2010-03-11 30 views
1

我有一本字典需要保存到plist中。該paletteDictionary總是返回零:在plist中保存單個的NSMutableDictionary

- (void)saveUserPalette:(id) sender 
{ 
    [paletteDictionary setObject:matchedPaletteColor1Array forKey:@"1"]; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"UserPaletteData.plist"]; 
    // write plist to disk 
    [paletteDictionary writeToFile:path atomically:YES];  
} 

我讀回數據在不同的觀點,如:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"UserPaletteData.plist"]; 

NSMutableDictionary *plistDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:path]; 
if(plistDictionary==nil){ 
    NSLog(@"failed to retrieve dictionary from disk"); 
} 
+0

什麼是錯誤?代碼似乎沒問題。 – 2010-03-11 04:13:33

+0

沒有錯誤,但是plistDictionary仍然沒有記錄錯誤「無法從磁盤檢索字典」。 – yesimarobot 2010-03-11 04:16:23

+0

你可以編輯你的問題提到嗎? – 2010-03-11 04:28:48

回答

1

在模擬器中運行你的應用程序和瀏覽到以下路徑:

〜/庫/應用程序支持/ iPhone模擬器/用戶/應用程序/ {A GUID}/Documents

其中GUID將是這樣一個字符串:06430A38-AFAC-4C68-8F39-DBD6C81A5AA6 (這可能是上次修改文件夾)。

驗證UserPaletteData.plist是否存在並將其加載到Property List Editor.app以驗證它是否包含某些數據。

還要確保在字典中只使用以下數據類型,否則將無法寫入plist:(NSData,NSDate,NSNumber,NSString,NSArray或NSDictionary)。

要驗證您試圖保存到磁盤字典是有效期的plist,請嘗試以下操作:

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

這應該告訴你,如果你的任何對象都是一個plist中錯誤的數據類型。

如果這仍然沒有幫助,那麼你應該確保在調用saveUserPalette之前paletteDictionary已經被alloc/init了。

+0

UserPaletteData.plist不在那裏。 – yesimarobot 2010-03-11 04:52:31

+0

我也檢查matchedPaletteColor1Array,它的工作。 – yesimarobot 2010-03-11 04:56:11

+0

請嘗試我上面的更新說明找到罪魁禍首。 – 2010-03-11 05:08:13

0

檢查您在使用它之前是否正在分配(alloc/init)paletteDictionary。

2

你能提一下什麼對象是「matchedPaletteColor1Array」。我相信,它的一些自定義類對象。據我所知,可寫入的對象必須符合NSCoding,而NSString,NSDate等已經存在,因此在給定的代碼中,將「matchedPaletteColor1Array」設置爲某些字符串將起作用。

你可以看看下面的文章,使你的對象NSCoding啓用。 objects conforming to nscoding will not writetofile