更新 plist 字典中的布尔值
Posted
技术标签:
【中文标题】更新 plist 字典中的布尔值【英文标题】:Update Boolean Value in plist dictionary 【发布时间】:2012-06-15 17:06:20 【问题描述】:我正在尝试更新 iphone 应用程序中 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"];
该错误突出显示下面的返回语句,并带有以下错误“线程 1:程序收到信号:“SIGABRT”
int main(int argc, char *argv[])
@autoreleasepool
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
您能提供的任何帮助将不胜感激。提前非常感谢。
【问题讨论】:
【参考方案1】:仅仅因为dict
是可变的并不意味着它的子字典是可变的。 NSMutableDictionary
也没有 setBool:forKey:
方法。
NSMutableDictionary *subDict = [[dict objectForKey:@"Day 1"] mutableCopy];
[subDict setObject:[NSNumber numberWithBool:TRUE] forKey:@"Bookmarked"];
[dict setObject:subDict forKey:@"Day 1"];
【讨论】:
我在按钮单击事件中添加了这个新代码,代码不再崩溃,但包含 Bookmarked Boolean 的第 1 天字典没有更新为 TRUE 或 YES。我在运行应用程序时和关闭 iphone 模拟器后检查了 plist。 别忘了自动释放 mutableCopy 否则你会泄露它 @user1459279:你确定字典更新后plist被覆盖了吗? autorelease 是 arc 的错误。 plist 没有更新,只有字典,这是两个独立的实体,一个在内存中,一个在磁盘上。你不能使用 [NSBundle mainBundle] 来保存数据,只是为了访问它。 感谢您告知我无法永久修改 plist。【参考方案2】:您可以修改 plist 文件的值,只要它不在包中即可。
在对象中声明布尔属性时,需要使用“布尔”而不是“布尔”。当您保存文件并尝试再次读取时,这将导致错误。
【讨论】:
以上是关于更新 plist 字典中的布尔值的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift,从 plist 加载数据时,如何区分布尔值和整数值?