我是NSFileManager,我可以,建立與管理檔案於資料匣中。
我是.plist,我可以將資料以XML檔案格式的方式保存。
我是NSDictionary,我可以寫入資料至.plist檔。
那我們合作吧,NSDictionary寫入資料至.plist檔,在透過NSFileManager將檔案存於特定資料匣中。
第1步:建立一個名為"NSFileManager_plist_NSDictionary"的"Single View Application"專案。
第2步:新增TempData.plist樣板檔案
- 新增TempData.plist檔,後續會使用此檔作為新檔案的樣板,作為樣板的目的是.plist是一個XML檔,其會有特定的儲存格式,透過新增.plist檔的方式,即可在自動完成此格式的設定,之後直複製使用就可以了
第3步:設定畫面
- 分別建立"寫入"與"讀取"2個按鈕
- 並建立對應的Touch Up Inside事件對應的IBAction
第4步:複製建立.plist
ViewController.m
- 於ViewController.m檔中,建立createPlist方法,此方法會回傳plist的檔案路徑
- 透過NSFileManger建立"data.plist"檔,而建立的方式是透過複製"tempData.plist"的方式建立
- 當然,透過NSFileManger可先透過fileExistAtPath訊息判斷要建立的檔案是否已存在,若不存在才建立
//建立複製一個data.plist檔
-(NSString*)createPlist
{
NSError *error;
//搜尋此APP下的Document目錄,
//記住,Document是可讓使用者自行建檔的其中一個目錄
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//第0個index,即為Document目錄的字串
NSString *documentsDirectory = [paths objectAtIndex:0];
//在Document下加上檔名data.plist
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"data.plist"];
//defaultManager訊息,
//取得預設的NSFileManager
NSFileManager *fileManager = [NSFileManager defaultManager];
//透過NSFileManager,
//查看data.plist檔是否存在,
//若不存在,則複製新的plist檔
if (![fileManager fileExistsAtPath: path])
{
//取得bundle下的tempData.plist檔案路徑,
//記住,bundle指的是APP這整包程式,
//整理APP即打包成一個bundle,
//內容是固定的。
NSString *bundle = [[NSBundle mainBundle] pathForResource:@"tempData" ofType:@"plist"];
//複製tempData.plist成document目錄下的data.plist
[fileManager copyItemAtPath:bundle toPath: path error:&error];
}
//回傳document目錄下的data.plist路徑
return path;
}
- 於ViewController.m檔中的write:方法中,加入寫入plist的程式
- 方法很簡單,透過NSDictionary的writeToFile:automatically:訊息,即可將資料寫入plist檔中
- (IBAction)write:(id)sender {
//建立NSDictionary資料
NSDictionary *data = [[NSDictionary alloc]initWithObjectsAndKeys:
@"Nick", @"name"
, @"19", @"age"
, nil];
//取得document目錄下的data.plist路徑
NSString *path = [self createPlist];
//寫入資料至data.plist,
//automically為YES,
//表示會自動作好檔案寫入管理,
//避免直接寫檔寫壞了的風險
[data writeToFile: path atomically:YES];
}
第6步:資料讀自.plist
- 於ViewController.m檔中的read:方法中,加入讀取plist的程式
- 在建立NSDictionary時,透過initWithContentsOfFile:即可將plist的資料讀出至NSDictionary
- 在最後以AlertView顯示讀取到的資料
- (IBAction)read:(id)sender {
//取得document目錄下的data.plist路徑
NSString *path = [self createPlist];
//透過initWitiContentsOfFile,
//將資料自data.plist中讀出至NSDictionary
NSDictionary *data = [[NSDictionary alloc] initWithContentsOfFile:path];
//組合data中的資料成一段文字
NSString * msg = [NSString stringWithFormat:@"name:%@, age:%@"
, [data objectForKey:@"name"]
, [data objectForKey:@"age"]];
//透過UIAlertView顯示讀取的資料
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:Nil
message:msg
delegate:nil
cancelButtonTitle:@"關閉"
otherButtonTitles:nil];
[alert show];
}
第7步:執行
- 若先按讀取,則會無任何資料
- 先儲存在讀取,你會發現AlertView會顯示出存入後讀取的資料
檔案連結:NSFileManager_plist_NSDictionary.zip
更多的NSFileManager資訊:
- 在iOS中,檔案的儲存目錄可分為下列四類:
- Documents
- 這是最常被用來存放檔案的資料夾,也是 Apple 官方建議存放檔案的資料夾,iTunes 備份時會連同此資料夾做備份。
- Library
- 預設是用來存放程式的相關資訊,像是設定或是執行狀態等等。
- Tmp
- 暫存用的資料夾,當應用程式結束時,此資料夾也會一並銷燬,不會備份,當系統需要而外資源時,也會優先刪除該資料夾內的東西。
- Cache
- 位於 Library 中,是 Library 內的子資料夾,此資料夾並不會被 iTunes 備份。
- NSFile除了可以複製檔案外、也可以搬移、建立、刪除檔案,同時也可以與NSData搭配,直接將資料寫入檔案中,透過NSData的搭配,你可以自訂自已的資料格式