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

时间:2010-04-18 21:45:40

标签: iphone arrays dictionary plist

我是一名年轻的意大利iPhone开发商。我有一个plist文件(名为“Frase”),具有以下结构:

Root Array
 - Item 0         Dictionary
      Frase        String
      Preferito    Bool
 - Item 1         Dictionary
      Frase        String
      Preferito    Bool
-  Item 2         Dictionary
      Frase        String
      Preferito    Bool
 - Item 3         Dictionary
      Frase        String
      Preferito    Bool
exc.

包含许多元素字典的数组,全部相同,由“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];
[dictionary setValue: YES forKey:@"Preferito"];
[frase replaceObjectAtIndex:indirizzo withObject:dictionary];
[frase writeToFile:plistPath atomically:YES];

}

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

有关管理应用程序文件的详细信息,请参阅Files and Data ManagementiPhone Application Programming Guide部分。