02-偏好設(shè)置與歸檔的使用

偏好設(shè)置-實(shí)例代碼:

// 存數(shù)據(jù)
- (IBAction)save:(id)sender { 
  // 偏好設(shè)置NSUserDefaults 
  // 底層就是封閉了?個(gè)字典,利?字典的?式生成plist?件
  // 好處:不需要關(guān)?文件名(它會(huì)自動(dòng)生成)快速進(jìn)?鍵值對(duì)存儲(chǔ).
  NSUserDefaults *defautls = [NSUserDefaultsstandardUserDefaults];
  [defautls setObject:@"gaowei" forKey:@"name"];
  [defautls setBool:YES forKey:@"isBool"]; 
  [defautls setInteger:5 forKey:@"num"]; 
  //同步,?即寫入文件.
  [defautls synchronize];
}

// 讀數(shù)據(jù)
- (IBAction)reader:(id)sender {
  // 存是?什么key存的, 讀的時(shí)候就要用什么key值取 
  // 存的時(shí)候使?的什么類型,取的時(shí)候也要用什么類型.
  NSString *str = [[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
  BOOL isBool = [[NSUserDefaultsstandardUserDefaults] boolForKey:@"isBool"];
  NSInteger num = [[NSUserDefaults standardUserDefaults] integerForKey:@"num"];
  NSLog(@"name =%@-isBool=%d-num=%ld",str,isBool,num);
}

歸檔-實(shí)例代碼:

// 保存數(shù)據(jù)
- (IBAction)save:(id)sender {
  // 歸檔?般都是保存自定義對(duì)象的時(shí)候,使用歸檔.因?yàn)閜list文件不能夠保存自定義對(duì)象. 
  // 如果一個(gè)字典當(dāng)中保存有自定義對(duì)象,如果把這個(gè)字典寫?到文件當(dāng)中,它是不會(huì)?成plist?件的.
  Persion *persion = [[Persion alloc] init];
  persion.name = @"gaowei"; 
  persion.age = 18;
  // 獲取沙盒臨時(shí)目錄
  NSString *tempPath = NSTemporaryDirectory(); 
  NSString *filePath = [tempPath stringByAppendingPathComponent:@"persion.data"]; 
  // archiveRootObject這個(gè)?法底層會(huì)去調(diào)用保存對(duì)象的encodeWithCoder?法,去詢問要保存這個(gè)對(duì)象的哪些屬性.
  // 所以要實(shí)現(xiàn)encodeWithCoder方法, 告訴要保存這個(gè)對(duì)象的哪些屬性.
  [NSKeyedArchiver archiveRootObject:persion toFile:filePath]; 
}

// 讀取數(shù)據(jù)
- (IBAction)reader:(id)sender { 
  // 獲取沙盒臨時(shí)目錄
  NSString *tempPath = NSTemporaryDirectory(); 
  NSString *filePath = [tempPath stringByAppendingPathComponent:@"persion.data"]; 

  // NSKeyedUnarchiver會(huì)調(diào)?initWithCoder這個(gè)?法,來讓你告訴它去獲取這個(gè)對(duì)象的哪些屬性. 
  // 所以我們?cè)诒4娴膶?duì)象當(dāng)中實(shí)現(xiàn)initWithCoder?法. 
  Persion *persion = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
  NSLog(@"name=%@---age=%d",persion.name,persion.age);
}

要保存的對(duì)象

#import <Foundation/Foundation.h> 
 // 要遵守<NSCoding>協(xié)議
@interface Persion : NSObject <NSCoding>
@property (nonatomic, strong) NSString *name;
@property(nonatomic, assign) int age;
@end

 // archiveRootObject這個(gè)方法底層會(huì)去調(diào)用保存對(duì)象的encodeWithCoder?法,去詢問要保存這個(gè)對(duì)象的哪些屬性. 
 // 只有遵守了NSCoding協(xié)議之后才能夠?qū)崿F(xiàn)這個(gè)方法. 
-(void)encodeWithCoder:(NSCoder *)encode {
    [encode encodeObject:self.name forKey:@"name"];
    [encode encodeInt32:self.age forKey:@"age"];
}
 
// NSKeyedUnarchiver會(huì)調(diào)用initWithCoder這個(gè)方法,來讓你告訴它去獲取這個(gè)對(duì)象的哪些屬性.
 // initWithCoder什么時(shí)候調(diào)用:解析一個(gè)文件的時(shí)候就會(huì)調(diào)用. 
-(instancetype)initWithCoder:(NSCoder *)decoder {
  // 這個(gè)地?為什么沒有[super initWithCoder]
  // 是因?yàn)樗母割悰]有遵守NSCoding協(xié)議
  if (self = [super init]) {
      // 要給它??的屬性進(jìn)行賦值,外界取得對(duì)象時(shí)訪問該屬性,里?才會(huì)用值. 
      self.age = [decoder decodeInt32ForKey:@"age"];
      self.name = [decoder decodeObjectForKey:@"name"];
   }
    return self;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • //存儲(chǔ)沒有實(shí)現(xiàn)NSCoding協(xié)議的數(shù)據(jù)/ //可以直接寫入文件的:字符串,數(shù)組,字典,(基本數(shù)據(jù)類型轉(zhuǎn)化為nu...
    nothing_c閱讀 522評(píng)論 0 1
  • 1. 文件存儲(chǔ) 文件存儲(chǔ)不對(duì)存儲(chǔ)的內(nèi)容進(jìn)行任何的格式化處理,所有數(shù)據(jù)都是原封不動(dòng)保存到文件當(dāng)中,因而適合用于存儲(chǔ)一...
    樂瀟閱讀 1,233評(píng)論 0 0
  • 歸檔(稱為序列化)是把對(duì)象轉(zhuǎn)為字節(jié)碼,以文件的形式存儲(chǔ)到磁盤上;程序運(yùn)行過程中或者當(dāng)再次重寫打開程序的時(shí)候,可以通...
    Eugene_iOS閱讀 6,742評(píng)論 0 10
  • 1.Core Data 含義: Core Data(數(shù)據(jù)庫(kù))是數(shù)據(jù)持久化存儲(chǔ)的最適合的方式,通過一系列特性避免使...
    Jian_同學(xué)閱讀 785評(píng)論 0 1
  • 1 今天早上過來的時(shí)候狀態(tài)不是特別好,因?yàn)榻裉煊袀€(gè)難纏的事情,要準(zhǔn)備項(xiàng)目報(bào)告的事情,但是這個(gè)項(xiàng)目一直很難推進(jìn),所以...
    冬冬Steven閱讀 199評(píng)論 0 0

友情鏈接更多精彩內(nèi)容