沙盒檔案儲存

2021-07-08 19:42:58 字數 3219 閱讀 8888

1.plist檔案的訪問

1.1 document的目錄搜尋

// 1.拼接字串

nsstring* homepath = nshomedirectory(); (獲得沙盒路徑)

// 2.系統提供的搜尋

// searchpath:搜尋路徑 fordirectories:哪個資料夾 indomains:在哪搜尋

nsstring* docpath = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes)[0];

1.2// 什麼能做plist儲存

// 一定要有write to file的方法

如果物件是nsstring、nsdictionary、nsarray、nsdata、nsnumber等型別,就可以使用writetofile:atomically:方法直接將物件寫到屬性列表檔案中

// 獲取doc目錄

// nsdocumentdirectory : 搜尋哪個資料夾

// nsuserdomainmask : 在哪搜尋

nsstring* docpath = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes)[0];

// filepath 存放的檔案完整路徑名

// // 建立乙個字典

// nsdictionary* dict = @;

//// // 存

// [dict writetofile:filepath atomically:yes];

// 建立array

nsarray* array = @[ @"語句", @"你好" ];

// atomically:執行緒安全的

[array writetofile:filepath atomically:yes];

1.3讀取資料

// 獲取doc目錄

nsstring* docpath = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes)[0];

// filepath

// nsdictionary* dict = [nsdictionary dictionarywithcontentsoffile:filepath];

// nslog(@"%@", dict);

2.偏好設定的儲存

// 存資料

// 1.不需要關心檔名

// 2.快速的做鍵值對的儲存

// 3. nsuserdefaults 實際上就是系統對字典的封裝

nsuserdefaults* ud = [nsuserdefaults standarduserdefaults];

[ud setobject:@"value" forkey:@"key"];

[ud setbool:yes forkey:@"ison"];

// 同步 ios8以後不需要呼叫也可以正常使用

//注意:userdefaults設定資料時,不是立即寫入,而是根據時間戳定時地把快取中的資料寫入本地磁碟。所以呼叫了set方法之後資料有可能還沒有寫入磁碟應用程式就終止了。出現以上問題,

[ud synchronize];

// 取資料

nsuserdefaults* ud = [nsuserdefaults standarduserdefaults];

nslog(@"%@", [ud objectforkey:@"key"]);

nskeyedarchiver 歸檔和回檔

如果物件是nsstring、nsdictionary、nsarray、nsdata、nsnumber等型別,可以直接用nskeyedarchiver進行歸檔和恢復

不是所有的物件都可以直接用這種方法進行歸檔,只有遵守了nscoding協議的物件才可以

nscoding協議有2個方法:

encodewithcoder:

每次歸檔物件時,都會呼叫這個方法。一般在這個方法裡面指定如何歸檔物件中的每個例項變數,可以使用encodeobject:forkey:方法歸檔例項變數

initwithcoder:

每次從檔案中恢復(解碼)物件時,都會呼叫這個方法。一般在這個方法裡面指定如何解碼檔案中的資料為物件的例項變數,可以使用decodeobject:forkey方法解碼例項變數

如果父類也遵守了nscoding協議,請注意:

應該在encodewithcoder:方法中加上一句

[super encodewithcode:encode];

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

應該在initwithcoder:方法中加上一句

self = [super initwithcoder:decoder];

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

// 存資料

// tmp 檔案路徑的獲取

//將檔案存放到tmp臨時資料下

nsstring* tmppath = nstemporarydirectory();

teacher* t = [[teacher alloc] init];

t.name = @"tom";

t.age = 18;

[nskeyedarchiver archiverootobject:t tofile:filepath];

// 取資料

nsstring* tmppath = nstemporarydirectory();

teacher* t = [nskeyedunarchiver unarchiveobjectwithfile:filepath];

nslog(@"%d", t.age);

在teacher類中

@implementation

teacher

// 告訴系統需要歸檔哪些屬性

- (void)encodewithcoder:(nscoder*)acoder

// 告訴系統解檔哪些屬性

- (id)initwithcoder:(nscoder*)adecoder

return

self;

}@end

沙盒儲存機制

1.documents 儲存應用執行時生成的需要持久化的資料,itunes同步裝置時會備份該目錄。例如,遊戲應用可將遊戲存檔儲存在該目錄 nsstring document nssearchpathfordirectoriesindomains nsdocumentdirectory nsuserd...

IOS資料儲存之檔案沙盒儲存

前言 接下來具體認識一下沙盒儲存 每個ios應用都有自己的應用沙盒,應用沙盒就是檔案系統目錄,與其他應用的檔案系統隔離,ios系統不允許訪問其他應用的應用沙盒。在ios8中已經開放訪問。應用沙盒一般包括以下幾個檔案目錄 應用程式包 documents libaray 下面有caches和prefer...

沙盒檔案管理

沙盒檔案 每個ios 應用都有自己的應用沙盒,應用沙盒就是檔案系統目錄,與其他應用的檔案系統隔離,ios系統不允許訪問其他應用的應用沙盒。在 ios8 中已經開放訪問。應用沙盒一般包括以下幾個檔案目錄 應用程式包 documents libaray 下面有 caches 和preferences 目...