欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

IOS 中NSUserDefaults讀取和寫入自定義對(duì)象的實(shí)現(xiàn)方法

 更新時(shí)間:2017年09月18日 10:53:48   作者:chyroger  
這篇文章主要介紹了IOS 中NSUserDefaults讀取和寫入自定義對(duì)象的實(shí)現(xiàn)方法的相關(guān)資料,希望通過本文大家能夠理解掌握這部分內(nèi)容,需要的朋友可以參考下

IOS 中NSUserDefaults讀取和寫入自定義對(duì)象的實(shí)現(xiàn)方法

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

比如存入再讀出一個(gè)字符串到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.

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

那怎么辦呢? 

我找到的方法是,讓這個(gè)自定義類實(shí)現(xiàn)<NSCoding>協(xié)議中的- (id) initWithCoder: (NSCoder *)coder方法和- (void) encodeWithCoder: (NSCoder *)coder方法(obj-c的協(xié)議protocol就是java的接口interface,就是C++的純虛函數(shù)),然后把該自定義的類對(duì)象編碼到NSData中,再?gòu)腘SUserDefaults中進(jìn)行讀取。

粘代碼:

假設(shè)有這樣一個(gè)簡(jiǎn)單的類對(duì)象

@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 

然后再存取時(shí)通過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] ; 

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

如果一個(gè)自定義類中由另一個(gè)自定義類對(duì)象,那么所有嵌套的類都要實(shí)現(xiàn)<NSCoding>。

如有疑問請(qǐng)留言或到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

最新評(píng)論