【问题标题】:How do I update an Integervalue in a .plist?如何更新 .plist 中的整数值?
【发布时间】:2010-11-14 12:24:18
【问题描述】:

我想在“Secret.plist”中更新一个整数值。 这是一张图片:http://img214.imageshack.us/img214/8005/bildschirmfoto20101114u.png

现在,在我的应用程序中,我希望改变黄金值,这是我目前的代码:

NSString *path = [[NSBundle mainBundle] pathForResource:@"Secret" ofType:@"plist"];
NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];

NSNumber *goldNumber = [NSNumber numberWithInt:1234];
[tempDict setObject:goldNumber forKey:@"Gold"];
[tempDict writeToFile:path atomically:YES];

执行应用程序后,我的 .plist 没有更新,仍然是“5000”而不是“1234”。我做错了什么?

编辑:退出应用程序后,我的 .plist 中的新值未保存/更新。只要应用程序运行,值就会以某种方式更新。因此,当我在更新后检索值时,它是正确的。当我重新启动我的应用程序时,它不再更新。 NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];

    [tempDict setObject:@"A new String." forKey:@"key"];
    [tempDict writeToFile:path atomically:YES];

即使是这个也不适合我。有没有人有代码可以简单地将我的数据保存到我的 .plist 中,以便我在重新启动应用程序时可以检索它?

【问题讨论】:

  • 这里发生的事情比代码示例中显示的要多。当我尝试它时,该示例在 iPhone 模拟器中运行时更新了存储的 plist。你在哪个版本的 iOS 上运行它?你是在真机还是模拟器上运行?你会发more complete sample吗?

标签: iphone database cocos2d-iphone plist


【解决方案1】:

这个 Secret.plist 是否位于 app bundle 中?如果要编辑文件,则应将其复制到应用程序包之外。有一些标准目录,您可以在其中放置东西。

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];

documentsDir 是您可以放置​​它的地方。

除了代码看起来不错。

【讨论】:

  • 它在我的资源文件夹中。我应该把它复制到哪里?如果我把它放在我的资源文件夹中,它不起作用吗?
  • 您的资源文件夹(或其内容)最终会出现在您的应用程序包目录中。更改应用程序包中的内容会弄乱代码签名。相反,在第一次启动时,将 Secret.plist 复制到我上面指定的 filesDir 并尝试修改该文件。
  • 我不明白你的意思。我在其他代码 sn-p 之上添加了上面的行,但这不可能是正确的。 NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDir = [documentPaths objectAtIndex:0]; NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:documentsDir]; NSNumber *goldNumber = [NSNumber numberWithInt:1234]; [tempDict setObject:goldNumber forKey:@"Gold"]; [tempDict writeToFile:documentsDir atomically:YES];
  • NSApplicationSupportDirectory 似乎比NSDocumentDirectory 更合适,尽管您需要创建并使用它的子目录作为存储位置。至于签名,你可以随时exclude plists from the seal
  • 在执行如此复杂的任务之前,我只想更改 .plist 中的值。为了使用简单的 .plist,我真的必须执行所有这些步骤吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2016-06-11
相关资源
最近更新 更多