【问题标题】:Update Boolean Value in plist dictionary更新 plist 字典中的布尔值
【发布时间】: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]));
     }
}

您能提供的任何帮助将不胜感激。提前非常感谢。

【问题讨论】:

    标签: objective-c boolean plist nsmutabledictionary


    【解决方案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 文件的值,只要它不在包中即可。

    在对象中声明布尔属性时,需要使用“布尔”而不是“布尔”。当您保存文件并尝试再次读取时,这将导致错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 2016-12-19
      • 2021-10-26
      • 2020-06-07
      • 1970-01-01
      相关资源
      最近更新 更多