2010-03-23 48 views
9

我想寫一個NSDictionary到plist,但是當我打開plist沒有數據寫入它。 從日誌我的路徑看起來是正確的,我的代碼是非常標準的。 任何想法?寫NSDictionary plist在我的應用程序包

NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", @"key3", nil]; 
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", nil]; 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

for (id key in dictionary) { 
    NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]); 
} 

NSString *path = [[NSBundle mainBundle] pathForResource:@"FormData" ofType:@"plist"]; 
NSLog(@"path:%@", path); 

[dictionary writeToFile:path atomically:YES]; 

回答

24

Johan是對的 - 你不允許修改你的應用程序捆綁。您有兩個很好的選擇來保存字典的位置:文檔目錄,當用戶同步設備時由iTunes備份;或未備份的緩存目錄。如果您不需要備份數據,請將其放入緩存中,這樣您不會減慢同步速度。你可以得到這樣的目錄路徑:

NSString *documentsDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

NSString *cachesDirectoryPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
+3

+1爲包括細節。 – alesplin 2010-03-23 22:25:56

+1

我認爲這可能需要額外的信息,現在文件共享存在。來自Apple的消息:「如果你不想讓文件與用戶共享,把它們放到應用程序的Library目錄下,如果沒有任何標準的Library子目錄是合適的,那麼在Library目錄下創建一個私人目錄,併爲它指定你的名字應用程序的包ID,然後可以使用該目錄來存儲任何私人應用程序的文件。「 – 2011-03-31 23:00:29

5

由於無法寫入應用程序捆綁包,因此無法保存。例如,將文件另存爲文檔文件夾。