【问题标题】:iPhone: How to write plist array of dictionary objectiPhone:如何编写字典对象的 plist 数组
【发布时间】: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];

}

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

【问题讨论】:

    标签: iphone arrays dictionary plist


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-16
        • 2012-06-24
        • 1970-01-01
        相关资源
        最近更新 更多