阅读和写入NSDictionary?

时间:2011-02-24 03:01:54

标签: iphone cocoa-touch

在我的应用程序中,我有一个表格视图,用户在导航栏中按下“添加”按钮,新的单元格被添加到表格视图中。表中的数据从NSArray加载,数组中的每个索引都存储一个带有4个键值对的NSMutableDictionary。每次添加单元格时,此数组都会保存到.plist中。现在,当用户选择表中的行时,将加载详细视图。此详细视图仅根据选择的行加载保存的.plist中的数据。

在此详细视图中,我希望允许用户编辑该特定行的字典中的数据。我一直在尝试不同的东西,我可以从字典中读取数据并将其加载到视图中,但当我尝试将数据保存回字典时,我的应用程序一直在终止。

有人可以向我解释读取和写入NSMutableDictionary数据的正确方法吗?

这就是我将数据写回.plist的方式:

NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:filePath];

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
dict = [array objectAtIndex:selectedRow];

NSString *tempA = [[NSString alloc] initWithFormat:@"%d pts", ivar_A];
NSString *tempB = [[NSString alloc] initWithFormat:@"%d pts", ivar_B];
NSString *tempC = [[NSString alloc] initWithFormat:@"%d pts", ivar_C];

[dict setValue:tempA forKey:@"keyA"];
[dict setValue:tempB forKey:@"keyB"];
[dict setValue:tempC forKey:@"keyC"];

[tempA release];
[tempB release];
[tempC release];

[array insertObject:dict atIndex:selectedRow];

//Save the modified array back to the plist
[array writeToFile:[self dataFilePath] atomically:YES];

[dict release];

[array release];

1 个答案:

答案 0 :(得分:3)

如果你使用[[NSMutableDictionary alloc] dictionaryFromContentsOfFile:@“pathtofile.plist],字典的内容仍然是不可变的,即使顶级容器是可变的。它在Apple的参考文献中有明确说明。

NSDictionary Reference

  

中的字典表示   路径标识的文件必须包含   只有属性列表对象(NSString,   NSData,NSDate,NSNumber,NSArray或   NSDictionary对象)。更多   详情,请参阅物业清单编程   指南。这包含的对象   字典是不可变的,即使是   字典是可变的。

如果需要再次使数据结构可写,则需要使用可变类型复制加载的数据结构,例如

[NSMutableDictionary dictionaryWithDictionary:oOrig]