乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      NSUserDefaults讀取和寫入自定義對(duì)象

       oskycar 2013-12-11

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

      比如存入再讀出一個(gè)字符串到NSUserDefaults:

      1. NSString *string = [NSString stringWithString @"hahaha"];  
      2. NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];  
      3. [ud setObject:string forKey:@"myKey"];  
      4. NSString *value;  
      5. 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ì)象

      1. @interface BusinessCard : NSObject <NSCoding>{  
      2.     NSString *_firstName;  
      3.     NSString *_lastName;  
      4. }  
      5. @property (nonatomic, retain) NSString *_firstName;  
      6. @property (nonatomic, retain) NSString *_lastName;  
      7. @end;  
      8.   
      9. @implementation BusinessCard  
      10. @synthesize _firstName, _lastName;  
      11. - (void)dealloc{  
      12.     [_firstName release];  
      13.     [_lastName release];  
      14.     [super dealloc];  
      15. }  
      16. - (id) initWithCoder: (NSCoder *)coder  
      17. {  
      18.     if (self = [super init])  
      19.     {  
      20.         self._firstName = [coder decodeObjectForKey:@"_firstName"];  
      21.         self._lastName = [coder decodeObjectForKey:@"_lastName"];  
      22.     }  
      23.     return self;  
      24. }  
      25. - (void) encodeWithCoder: (NSCoder *)coder  
      26. {  
      27.     [coder encodeObject:_firstName forKey:@"_firstName"];  
      28.     [coder encodeObject:_lastName forKey:@"_lastName"];  
      29.       
      30. }  
      31.   
      32. @end  
       

      然后再存取時(shí)通過NSData做載體:

      1. BusinessCard *bc = [[BusinessCard alloc] init];  
      2. NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];  
      3. NSData *udObject = [NSKeyedArchiver archivedDataWithRootObject:bc];  
      4. [ud setObject:udObject forKey:@"myBusinessCard"];  
      5. [bc release];  
      6. udObject = nil;  
      7. udObject = [ud objectForKey:@"myBusinessCard"];  
      8. bc = [NSKeyedUnarchiver unarchiveObjectWithData:udObject] ;  
      9.   
      10.       
      11.       
       

       

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

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


       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多