【问题标题】:How can I change all the values for keys in a plist at once to one particular value?如何一次将 plist 中键的所有值更改为一个特定值?
【发布时间】:2012-01-03 17:35:41
【问题描述】:

我有一个带有多个键的 plist。每个键的值都是“N”或“Y”。

我没有任何问题可以一一更改值。但是有没有办法将 plist 中键的每个值都更改为一个值?它真的会缩短我的代码。

当前代码为 plist 中的一个键更改一个值,如下所示:

NSString *newValue;
newValue = @"Y";

[manufacturerDictionary setObject:[NSString stringWithString:newValue] 
                           forKey:manufacturerName];
[manufacturerDictionary writeToFile: path atomically:YES];
[manufacturerDictionary release];

【问题讨论】:

  • 你能展示一下当前的代码吗?这是适用于 iOS 还是 OS X?
  • 我将编辑我的问题以显示当前代码。

标签: objective-c plist nsmutabledictionary


【解决方案1】:

根据您的代码,我假设您的 plist 包含一个存档的 NSDictionary 作为根对象。这个怎么样:

NSString *newValue = @"Y";
NSArray *allKeys = [manufacturerDictionary allKeys];
for (NSString *key in allKeys)
{
    [manufacturerDictionary setObject:newValue forKey:key];
}
[manufacturerDictionary writeToFile:path atomically:YES];
[manufacturerDictionary release];

for (NSString *key in allKeys) 使用快速枚举来枚举字典中存在的每个键。

【讨论】:

  • 你好安德鲁!我尝试了您的解决方案,它看起来对我有用,但出现以下令人讨厌的小错误:2012-01-03 13:37:12.668 PTD[6821:12203] *** 由于未捕获的异常“NSGenericException”而终止应用程序', reason: '*** Collection <__nscfdictionary:> 在枚举时发生了变异。'
  • 这就是我在没有测试的情况下在文本编辑器中快速编写内容的结果!问题是(曾经)在枚举其内容时无法更改可变对象的内容。解决方案是先将其所有键取出到一个单独的数组中,然后枚举该数组。
  • 工作得像个冠军,安德鲁!谢谢!!您刚刚使我免于编写数百行代码! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 2021-08-30
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多