2012-06-15 46 views
0

我正在嘗試更新iphone應用程序中plist字典中的布爾值。 plist字典包含多個字符串和兩個布爾值。以下是我目前的代碼。在plist字典中更新布爾值

我首先定義plist,然後定義NSMutableDictionary。當下面的第三行代碼運行時,我得到一個錯誤。

NSString *plistFile = [[NSBundle mainBundle] pathForResource:@"Property List" ofType:@"plist"]; 
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:plistFile]; 

[[dict objectForKey:@"Day 1"] setBool:TRUE forKey:@"Bookmarked"]; 

錯誤凸顯下面,下面的錯誤return語句「主題1:程序接收到的信號:‘SIGABRT’

int main(int argc, char *argv[]) 
{ @autoreleasepool{ 
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 

你可以提供任何幫助,將不勝感激感謝這麼多。提前。

回答

2

只是因爲dict是可變的,並不意味着它的子字典是。此外NSMutableDictionary沒有setBool:forKey:方法。

NSMutableDictionary *subDict = [[dict objectForKey:@"Day 1"] mutableCopy]; 
[subDict setObject:[NSNumber numberWithBool:TRUE] forKey:@"Bookmarked"]; 
[dict setObject:subDict forKey:@"Day 1"]; 
+0

我在按鈕單擊事件中添加了此新代碼,代碼不再崩潰,但包含書籤布爾值的第1天字典未更新爲TRUE或YES。我在運行應用程序並關閉iphone模擬器後檢查了plist。 – iroosma

+0

不要忘記autorelease mutableCopy或者你會泄漏它 – cdelacroix

+0

@ user1459279:你確定plist在字典更新後被覆蓋嗎? – cdelacroix

1

只要不存在於軟件包中,您可以修改plist文件的值。

當您在對象中聲明布爾屬性時,它需要使用「BOOL」而不是「Boolean」。這會在保存文件並嘗試再次讀取時導致錯誤。