六:資料存放區的五種方式(一),資料存放區五種方式

來源:互聯網
上載者:User

六:資料存放區的五種方式(一),資料存放區五種方式

  iOS開發中資料存在五種儲存方式之三:

    1.plist(XML屬性列表歸檔)

    2.喜好設定

    3.NSKeydeArchiver歸檔(儲存自訂對象)  一、plist(XML屬性列表歸檔)只能存取對象類檔案第一種方式:(四個檔案夾都可以取出路徑)
1 //擷取沙箱路徑2     NSString *home = NSHomeDirectory();3     //擷取documents的路徑兩種方式(其它三個檔案夾也能擷取)4     NSString *path = [home stringByAppendingString:@"/documents"];5     NSString *path1 = [home stringByAppendingPathComponent:@"library/cache"];

第二種方式:(僅有documents和cache能取出路徑)(擷取路徑的時候必須寫成YES,否則無法成功寫入)

1  //擷取cache路徑,NO表示檔案路徑前面用“~”表示2 NSString *cache = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) lastObject];3 NSString *doucument = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject];4 //拼接路徑5 NSString *path = [cache stringByAppendingPathComponent:@"abc.plist"];6 NSString *path1 = [doucument stringByAppendingPathComponent:@"/ce.plist"];7 //把檔案寫入檔案夾8 [arr writeToFile:path atomically:YES];9 [arr writeToFile:path1 atomically:YES];

讀取檔案:

1 //讀取檔案2 NSArray *arr1 =  [NSArray arrayWithContentsOfFile:path];3 NSLog(@"%@",arr1);

 

二、喜好設定(儲存使用者名稱、密碼、字型大小、是否自動登入等等基本設定)自動儲存到沙箱的Preferences檔案夾中

1 //擷取對象2 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];3 //儲存資料4 [ud setObject:@"abc" forKey:@"這是什麼"];5 [ud setObject:@"cde" forKey:@"俺是"];6 //讀取資料7 NSString *str = [ud objectForKey:@"俺是"];8 NSString *str1 = [ud objectForKey:@"這是什麼"];9 NSLog(@"%@---%@",str,str1);

注意:喜好設定儲存時候,儲存的時間不確定,可能是將來的某個時間儲存到檔案夾中,所以可以馬上同步儲存:

    [ud synchronize];

 

三、NSKeyedArchive的歸檔(儲存自訂對象)

在viewController.m中:

 1 - (void)viewDidLoad { 2     [super viewDidLoad]; 3      4     ZWPerson *p = [[ZWPerson alloc] init]; 5     p.name = @"mc"; 6     p.age = 18; 7     p.height = 1.88; 8     NSString *cache = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) lastObject]; 9     NSString *doucument = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject];10     //拼接路徑11     NSString *path = [cache stringByAppendingPathComponent:@"abc.doc"];12     NSString *path1 = [doucument stringByAppendingPathComponent:@"/ce.doc"];13     //儲存資料14     BOOL ar = [NSKeyedArchiver archiveRootObject:p toFile:path];15     BOOL ar1 = [NSKeyedArchiver archiveRootObject:p toFile:path1];16     NSLog(@"%d---%d",ar,ar1);17     //讀取資料18     ZWPerson *p1 = [NSKeyedUnarchiver unarchiveObjectWithFile:path];19     ZWPerson *p2 = [NSKeyedUnarchiver unarchiveObjectWithFile:path1];20     NSLog(@"%zd---%@",p1.age,p2.name);21 }

建立ZWPerson類(繼承自ViewController)

在ZWPerson.h中:

1 #import "ViewController.h"2 @interface ZWPerson : ViewController3 /** 名字 */4 @property (strong, nonatomic)NSString *name;5 /** 年齡 */6 @property (assign, nonatomic)NSInteger age;7 /** 身高 */8 @property (assign, nonatomic)double height;9 @end

在ZWPerson.h中:

 1 #import "ZWPerson.h" 2 @interface ZWPerson () 3 @end 4 @implementation ZWPerson 5 //儲存的時候調用這個方法 6 - (void)encodeWithCoder:(NSCoder *)aCoder 7 { 8     //儲存物件的屬性(根據實際需要儲存資料) 9     [aCoder encodeObject:self.name forKey:@"name"];10     [aCoder encodeInteger:self.age forKey:@"age"];11     [aCoder encodeDouble:self.height forKey:@"height"];12 }13 //讀取的時候調用14 - (instancetype)initWithCoder:(NSCoder *)aDecoder15 {16     if (self = [super initWithCoder:aDecoder]) {.17         //擷取對象的屬性(根據實際需要擷取資料)18         self.name = [aDecoder decodeObjectForKey:@"name"];19         self.age = [aDecoder decodeIntegerForKey:@"age"];20         self.height = [aDecoder decodeDoubleForKey:@"height"];21     }22     return self;23 }24 @end

如果是繼承自NSObject:則只需要更改initWithCoder中的if(self = super init)即可

注意:1、遵守NSCoding協議,並實現該協議中的兩個方法。

     2、如果是繼承,則子類一定要重寫那兩個方法。因為person的子類在存取的時候,會去子類中去找調用的方法,沒找到那麼它就去父類中找,所以最後儲存和讀取的時候新增加的屬性會被忽略。需要先調用父類的方法,先初始化父類的,再初始化子類的。

     3、儲存資料的檔案的尾碼名可以隨意命名。

     4、通過plist儲存的資料是直接顯示的,不安全。通過歸檔方法儲存的資料在檔案中開啟是亂碼的,更安全。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.