91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

IOS如何實現NSUserDefaults讀取和寫入自定義對象

發布時間:2021-07-08 14:32:57 來源:億速云 閱讀:129 作者:小新 欄目:移動開發

小編給大家分享一下IOS如何實現NSUserDefaults讀取和寫入自定義對象,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

IOS 中NSUserDefaults讀取和寫入自定義對象的實現方法

NSUserDefaults可以存取一些短小的信息。

比如存入再讀出一個字符串到NSUserDefaults:

NSString *string = [NSString stringWithString @"hahaha"]; 
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 
[ud setObject:string forKey:@"myKey"]; 
NSString *value; 
value = [ud objectForKey:"myKey"];

但是并不是所有的東西都能往里放的。NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.

 如果把一個自定義的類存到一個NSArray里,然后再存到NSUserDefaults里也是不能成功的。不信可以試試,如果你成功的請告訴我。

那怎么辦呢? 

我找到的方法是,讓這個自定義類實現<NSCoding>協議中的- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法(obj-c的協議protocol就是java的接口interface,就是C++的純虛函數),然后把該自定義的類對象編碼到NSData中,再從NSUserDefaults中進行讀取。

粘代碼:

假設有這樣一個簡單的類對象

@interface BusinessCard : NSObject <NSCoding>{ 
  NSString *_firstName; 
  NSString *_lastName; 
} 
@property (nonatomic, retain) NSString *_firstName; 
@property (nonatomic, retain) NSString *_lastName; 
@end; 
 
@implementation BusinessCard 
@synthesize _firstName, _lastName; 
- (void)dealloc{ 
  [_firstName release]; 
  [_lastName release]; 
  [super dealloc]; 
} 
- (id) initWithCoder: (NSCoder *)coder 
{ 
  if (self = [super init]) 
  { 
    self._firstName = [coder decodeObjectForKey:@"_firstName"]; 
    self._lastName = [coder decodeObjectForKey:@"_lastName"]; 
  } 
  return self; 
} 
- (void) encodeWithCoder: (NSCoder *)coder 
{ 
  [coder encodeObject:_firstName forKey:@"_firstName"]; 
  [coder encodeObject:_lastName forKey:@"_lastName"]; 
   
} 
 
@end

然后再存取時通過NSData做載體:

BusinessCard *bc = [[BusinessCard alloc] init]; 
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 
NSData *udObject = [NSKeyedArchiver archivedDataWithRootObject:bc]; 
[ud setObject:udObject forKey:@"myBusinessCard"]; 
[bc release]; 
udObject = nil; 
udObject = [ud objectForKey:@"myBusinessCard"]; 
bc = [NSKeyedUnarchiver unarchiveObjectWithData:udObject] ;

以上的代碼時由另一個程序中截取的,沒有測試過,但意思就是這樣了。

如果一個自定義類中由另一個自定義類對象,那么所有嵌套的類都要實現<NSCoding>。

以上是“IOS如何實現NSUserDefaults讀取和寫入自定義對象”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海盐县| 封丘县| 朔州市| 观塘区| 永川市| 仁布县| 弥勒县| 林周县| 彰武县| 二连浩特市| 望都县| 双牌县| 文化| 如皋市| 镇雄县| 化德县| 临湘市| 教育| 孝义市| 垦利县| 南昌县| 海丰县| 宜君县| 新疆| 静乐县| 滦南县| 长治县| 正蓝旗| 临夏市| 扶沟县| 泰州市| 定西市| 正阳县| 白沙| 东丽区| 周至县| 星子县| 太保市| 华池县| 高淳县| 芦山县|