我是一名年轻的意大利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]; }
为什么不工作? 谢谢谢谢!
答案 0 :(得分:1)
Jason说的是正确的,但看起来你的代码中还有另一个更严重的问题:看来你传递的是一个原始值(定义的常量 YES )作为第一个参数到-setValue:forKey:
,它需要一个id
类型的参数(换句话说,一个对象,而不是一个原语)。
相反,您可以使用NSNumber
的实例来包装布尔值,然后将其放入数组中,如下所示:
[dictionary setValue:[NSNumber numberWithBool:YES] forKey:@"Preferito"];
答案 1 :(得分:0)
您正在从应用程序包中加载初始plist。不幸的是,你不能写到这个目录。当您需要做的是检查您的plist是否已存在于用户文档目录中。如果是,请从那里加载。如果没有,请从应用程序包中加载模板(原始)。当您将文件写回时,必须始终将其写入用户文档目录。
有关管理应用程序文件的详细信息,请参阅Files and Data Management的iPhone Application Programming Guide部分。