簡單掌握iOS應(yīng)用開發(fā)中sandbox沙盒的使用
一、iOS沙盒機制
iOS的應(yīng)用只能訪問為該應(yīng)用創(chuàng)建的區(qū)域,不可訪問其他區(qū)域,應(yīng)用的其他非代碼文件都存在此目錄下,包括圖片,屬性文件plist,bundle,nib文件等,這塊區(qū)域稱之為沙盒(sandBox)。
每個應(yīng)用都有屬于自己的存儲空間,即沙盒。
應(yīng)用只能訪問自己的沙盒,不可訪問其他區(qū)域。
如果應(yīng)用需要進行文件操作,則必須將文件存放在沙盒中,尤其是數(shù)據(jù)庫文件,在電腦上操作時,可以去訪問,但是如果要裝在真機上可以使用,必須將數(shù)據(jù)庫文件拷貝至沙盒中。
二、打開沙盒路徑
1、如果不知道沙盒路徑,可以在自己的應(yīng)用中打印其路徑。
NSLog(@"沙盒路徑:%@",NSHomeDirectory());
會得到打印結(jié)果*為字母或數(shù)字,即為沙盒的路徑
/Users/apple/Library/Application Support/iPhone Simulator/6.1/Applications/******-****-****-****-************
打開Finder,選擇前往-前往文件夾(或選擇快捷鍵command+shift+G)輸入打印出來的路徑即可
2、打開Finder,選擇前往并按住option鍵,進入資源庫
選擇Application Support-iPhone Simulator-選擇模擬器版本,即可看到各個應(yīng)用的沙盒目錄。
選中其中一個目錄,即可看到程序的名稱的App文件。
三、目錄結(jié)構(gòu)
沙盒默認情況下有三個目錄文件夾documents,Library,tmp及應(yīng)用的App文件,只可在相應(yīng)的文件夾中進行操作
documents:一般用來存放應(yīng)用中建立的文件,如數(shù)據(jù)庫文件,或程序中瀏覽到的文件數(shù)據(jù)。如果進行備份會將此文件夾中的文件包括其中;
Library:存儲應(yīng)用的默認設(shè)置及狀態(tài)信息;
Library/cache:用來存放緩存文件,此文件夾下數(shù)據(jù)在應(yīng)用退出時不會刪除。備份時不會包括此文件夾;
tmp:存放即時穿件的臨時文件
帶圖標(biāo)的App文件:
選中后顯示包內(nèi)容,即可看到存儲的圖標(biāo),nib文件,屬性列表等
四、在沙盒中寫文件
在沙盒目錄的Documents文件夾下添加一個plist文件,添加圖片等方法相同
// 獲取Documents文件夾目錄
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
// 設(shè)定plist的路徑
[rootPath stringByAppendingPathComponent:@"new.plist"];
// 然后在plist中寫入內(nèi)容
NSString *error;
// 序列化一個值“OK”
id plist = [NSPropertyListSerialization dataFromPropertyList:@"OK" format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
if(plist) {
NSLog(@"No error creating XML data.");
[plist writeToFile:plistPath atomically:YES];
}
else {
NSLog(@"%@",error);
[error release];
}
運行后在Documents文件夾下將看到一個new.plist文件
文件中有一個值OK,也可添加數(shù)組,字典等相關(guān)類型的內(nèi)容,只需將上文中的“OK”換成一個(id)類型的值即可
五、拷貝文件到沙盒目錄下
下面拷貝一個public.xml文件至document路徑下,也可拷貝其他文件,只需將文件名和類型對應(yīng)即可,尤其是database文件,一定要拷貝至沙盒才能使用。此文件不能是電腦中的文件,必須加入工程的Bundle中
// 獲取Documents路徑
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject];
// 設(shè)定要拷貝文件的路徑及名稱
NSString *xmlSandBoxPath = [documentsPath stringByAppendingPathComponent:@"public.xml"];
NSFileManager *fileManager = [NSFileManager defaultManager];
// 判斷文件是否已經(jīng)存在
BOOL isExisting = [fileManager fileExistsAtPath:xmlSandBoxPath];
if (!isExisting) {
// 本地?zé)o此文件,則將此文件拷貝到本地目錄。
NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:@"public" ofType:@"xml"];
NSError *err;
// 將Bundle中的文件拷貝至沙盒目錄下
[fileManager copyItemAtPath:xmlFilePath toPath:xmlSandBoxPath error:&err];
}
操作之后,Documents路徑下就有這個文件了
相關(guān)文章
ios學(xué)習(xí)筆記之基礎(chǔ)數(shù)據(jù)類型的轉(zhuǎn)換
在編碼過程中,數(shù)據(jù)的處理是必要的。眾多數(shù)據(jù)中,NSString、NSData、NSArray、 NSDictionary等數(shù)據(jù)類型是常用的,對付它們?nèi)菀?,但是在多個數(shù)據(jù)類型之間轉(zhuǎn)換就需要技巧了。本文主要給大家介紹ios中基礎(chǔ)數(shù)據(jù)類型的轉(zhuǎn)換,有需要的下面來一起看看吧。2016-11-11iOS應(yīng)用中發(fā)送HTTP的get請求以及HTTP異步請求的方法
這篇文章主要介紹了iOS應(yīng)用中發(fā)送HTTP的get請求以及HTTP異步請求的方法,代碼為傳統(tǒng)的Objective-C語言,說明都簡單地融入于注釋之中,需要的朋友可以參考下2016-02-02IOS 陀螺儀開發(fā)(CoreMotion框架)實例詳解
這篇文章主要介紹了IOS 陀螺儀開發(fā)實例詳解的相關(guān)資料,介紹了螺旋儀參數(shù)意義及CoreMotion框架,需要的朋友可以參考下2016-10-10LRecyclerView側(cè)滑iOS阻塞效果不完整的解決辦法
這篇文章主要介紹了LRecyclerView側(cè)滑iOS阻塞效果不完整的解決辦法,非常不錯,具有參考借鑒價值,需要的朋友參考下2016-12-12iOS開發(fā)之1行代碼實現(xiàn)緩存計算及清除緩存
這篇文章主要給大家介紹了關(guān)于iOS開發(fā)之1行代碼實現(xiàn)緩存計算及清除緩存的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05iOS開發(fā)retina屏幕下的點與像素關(guān)系詳解
這篇文章主要為大家介紹了iOS開發(fā)retina屏幕下的點與像素關(guān)系詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07深入理解Objective-C中類的數(shù)據(jù)結(jié)構(gòu)
最近發(fā)現(xiàn)用Objective-C確實好容易,下面這篇文章主要給大家介紹了關(guān)于Objective-C中類的數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05