2012-06-15 63 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”。这会在保存文件并尝试再次读取时导致错误。