屬性列表文件是一種XML文件,Foundation框架中的數組和字典等均可以於屬性列表文件相互轉換。數組
NSArray類經常使用讀寫屬性列表文件的方法:app
+arrayWithContentsOfFile:類級構造方法,用於從屬性列表文件中讀取數據,建立NSArray對象。框架
-initWithContentsOfFile:實例構造方法,用於從屬性列表文件中讀取數據,建立NSArray對象。atom
-writeToFile:atomically:該方法把NSArray對象寫入到屬性列表文件中,第一個參數是文件名,第二個參數爲是否使用輔助文件,若是爲YES,則先寫入到一個輔助文件,而後輔助文件再從新命名爲目標文件,若是爲NO,則直接寫入到目標文件。spa
NSDictionary類經常使用讀寫屬性列表文件的方法:code
+dictionaryWithContentsOfFile:類級構造方法,用於從屬性列表文件中讀取數據,建立NSDictionary對象。對象
-initWithContentsOfFile:實例構造方法,用於從屬性列表文件中讀取數據,建立NSDictionary對象。blog
-writeToFile:atomically:該方法將NSDictionary對象寫入到屬性列表文件中。ip
屬性列表文件數據持久化具體方法,可參考如下實現方式:資源
假如在項目中手工建立了一個Contacts.plist文件,並在該文件中添加了幾條數據,以下圖所示。
固然也能夠經過代碼直接建立plist文件。
接下來須要作的是將項目資源的Contacts.plist文件中數據複製到沙箱Documents目錄下。
//對文件進行預處理,判斷在Documents目錄下是否存在plist文件,若是不存在則從資源目錄下複製一個。 -(void)createEditableCopyOfDatabaseIfNeeded { NSFileManager *fileManager=[NSFileManager defaultManager]; NSString *writableDBPath=[self applicationDocumentsDirectoryFile]; BOOL dbexits=[fileManager fileExistsAtPath:writableDBPath]; if (!dbexits) { NSString *defaultDBPath=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Contacts.plist"]; NSError *error; BOOL success=[fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; if (!success) { NSAssert1(0,@"錯誤寫入文件:‘%@’",[error localizedDescription]); } } } //獲取放置在沙箱Documents目錄下的文件的完整路徑 -(NSString *)applicationDocumentsDirectoryFile { NSString *documentDirectory=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *path=[documentDirectory stringByAppendingPathComponent:@"Contacts.plist"]; return path; }
createEditableCopyOfDatabaseIfNeeded方法中:
NSFileManager的copyItemAtPath:toPath:error:方法實現文件複製。
NSAssert1是Foundation框架提供的宏,它在斷言失敗的狀況下拋出異常,相似的還有NSAssert和NSAssert2等。
applicationDocumentsDirectoryFile方法中:
stringByAppendingPathComponent:可以在目錄後面追加文件名,返回完整的文件路徑。
沙箱Documents目錄下成功生成plist文件以後,就能夠進行增、刪、改、查操做了。可參考以下代碼:
NSString *path=[self applicationDocumentsDirectoryFile]; //將屬性列表文件內容讀取到array變量中,也就是獲取了屬性列表文件中所有的數據集合 NSMutableArray *array=[[NSMutableArray alloc]initWithContentsOfFile:path]; //向array中添加一條新記錄 NSDictionary *newContact=[NSDictionary dictionaryWithObjects:@[contact.Title,contact.Type] forKeys:@[@"Title",@"Type"]]; [array addObject:newContact]; //刪除array中一條記錄 [array removeObjectAtIndex:0]; //刪除array中所有記錄 [array removeAllObjects]; for (NSDictionary* dict in array) { //經過for循環,找到須要修改的數據項,進行修改數據 [dict setValue:@"Test" forKey:@"Title"]; } //將array從新寫入屬性列表文件中 [array writeToFile:path atomically:YES];
注:完成後,須要選擇Product->Clean菜單項清除一些再編譯。