數據存取

沙盒:
1、主目錄:

NSString *home = NSHomeDirectory()

2、文檔目錄:documents[0];

NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

3、緩存目錄:caches[0]

NSArray *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, NO);

4、臨時目錄:tmpDir

NSString *tmpDir = NSTemporaryDirectory();


plist的寫入

NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *doc = documents[0];

NSString *path = [doc stringByAppendingPathComponent:@"array.plist"];

[array writeToFile:path atomically:YES];


圖片數據的寫日:

NSData *imageData = UIImagePNGRepresentation(image);

    // 2. 建立保存文件的路徑

    NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *path = [documents[0] stringByAppendingPathComponent:@"image.png"];

    // 3. NSData寫入文件

    [imageData writeToFile:path atomically:YES];

注意:info是寫入不了的!info不都是以下數據類型的

•支持的數據類型:
Array
Dictionary
Boolean
Date
Number
String

// 1. 判斷文件是否存在

    NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *path = [documents[0] stringByAppendingPathComponent:@"image.png"];

    // 注意:此處不要使用imageNamed方法,因爲imageNamed方法是從bundle中加載圖像的

    UIImage *image = [UIImage imageWithContentsOfFile:path];

    

    // 2. 如果存在加載圖像並且顯示在UIImageView

    if (image != nil) {

        [imageView setImage:image];

    }



Archiver & Unarchiver歸檔和恢復
遵守<NSCoding>協議
實現方法:

// 歸檔(序列化/編碼)_是在保存數據時使用的

- (void)encodeWithCoder:(NSCoder *)aCoder

// 恢復(反序列化)_是在恢復數據時使用的

- (id)initWithCoder:(NSCoder *)aDecoder


•NSString、NSDictionary、NSArray、NSData、NSNumber等類型的對象,可以直接用NSKeyedArchiver進行歸檔和恢復

•[NSKeyedArchiver archiveRootObject:toFile:]

會首先調用被歸檔類對象的encodeWithCoder方法對該對象的屬性編碼,然後再寫入文件進行歸檔

•[NSKeyedUnarchiver unarchiveObjectWithFile:path]

從文件加載數據後,會調用類的initWithCoder方法,實例化該類對象,並恢復屬性


•如果父類也遵守了NSCoding協議,需要注意:
•在encodeWithCoder:方法中加上一句

[super encodeWithCoder:aCoder];

確保繼承的實例變量也能被編碼,即也能被歸檔

•在initWithCoder:方法中加上一句

self = [super initWithCoder:aDecoder];

確保繼承的實例變量也能被解碼,即也能被恢復


NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

 //TODO:......  

// 如果,對於某些需要保存在偏好設置中的數據,要求實時的響應,需要在保存系統偏好設置時,調用一個同步方法

[defaults synchronize];


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章