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 中的字典数组中获取数据? [复制]