iPhone:如何编写字典对象的 plist 数组

Posted

技术标签:

【中文标题】iPhone:如何编写字典对象的 plist 数组【英文标题】:iPhone: How to write plist array of dictionary object 【发布时间】:2010-04-18 21:45:39 【问题描述】:

我是一名年轻的意大利 iPhone 开发人员。我有一个具有这种结构的 plist 文件(名为“Frase”):

根数组
 - 项目 0 字典
      框架字符串
      优先布尔值
 - 项目 1 字典
      框架字符串
      优先布尔值
- 项目 2 字典
      框架字符串
      优先布尔值
 - 第 3 项字典
      框架字符串
      优先布尔值
除外。

一个数组,包含许多元素字典,都一样,由“Frase”(字符串)和“Preferito”(BOOL)组成。

变量“indirizzo”,增加或减少按钮Next或Back的点击。应用界面:

http://img691.imageshack.us/img691/357/schermata20100418a20331.png

当我点击 AddPreferito 按钮时,“Preferito”项必须为 YES。随后,必须使用新字典更新数组。代码:

(void)addpreferito:(id)sender 

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Frase" ofType:@"plist"];
MSMutableArray *frase = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
NSMutableDictionary *dictionary = [frase objectAtIndex:indirizzo];
[字典 setValue: YES forKey:@"Preferito"];
[frase replaceObjectAtIndex:indirizzo withObject:dictionary];
[frase writeToFile:plistPath atomically:YES];

为什么不工作? 谢谢谢谢!

【问题讨论】:

【参考方案1】:

Jason 说的是对的,但您的代码中似乎还有另一个更严重的问题:您似乎传递了一个原始值(定义的常量 YES)作为第一个参数到-setValue:forKey:,它需要一个id 类型的参数(换句话说,是一个对象,而不是一个原语)。

相反,您可以使用NSNumber 的实例来包装布尔值,然后将其放入数组中,如下所示:

[dictionary setValue:[NSNumber numberWithBool:YES] forKey:@"Preferito"];

【讨论】:

【参考方案2】:

您正在从应用程序包中加载初始 plist。不幸的是,您无法写入此目录。当您需要做的是检查您的 plist 是否已存在于用户文档目录中。如果是这样,请从那里加载它。如果没有,请从应用程序包中加载您的模板(原始)。回写文件时,必须始终将其写入用户文档目录。

有关管理应用程序文件的更多信息,请参阅iPhone Application Programming Guide 的Files and Data Management 部分。

【讨论】:

以上是关于iPhone:如何编写字典对象的 plist 数组的主要内容,如果未能解决你的问题,请参考以下文章

想要从 iPhone 的 plist 中的字典数组中获取数据? [复制]

从 plist 中获取数组中的字典对象的问题

iOS开发,如何替换plist这个数组下数据

iPhone Dev - 从 Plist 编辑数组中的对象

plist中的NSdictionary对象需要是数组的数组,怎么转换?

如何序列化 iPhone sdk 中的简单对象?