我正在阅读我的应用程序中的一个plist,它在顶层是一个数组。这很简单,可以确保数组以可变的方式启动
self.plistData = [[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"myDataSource" ofType:@"plist"]] mutableCopy];
在数组的每个元素中是另一个数组,每个数组都包含一个字典。
根据表格单元格选择,我在所选索引处更改字典的属性:
[self.cellDescriptors[indexPath.section][indexOfTappedRow] setValue:@"YES" forKey: @"isSelected"];
当我尝试更改字典值时,我收到错误'-[__NSCFDictionary removeObjectForKey:]: mutating method sent to immutable object'
。如果由plist读入的NSDictionary是不可变的,则该错误是有意义的。
有没有办法从plist中读取内容并确保以可变版本的形式读入任何数组或词典?
答案 0 :(得分:2)
最简单的方法是使用NSPropertyListSerialization
并传递适当的选项来获取可变容器。
NSString *path = [[NSBundle mainBundle] pathForResource:@"myDataSource" ofType:@"plist"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSMutableArray *array = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListMutableContainers format:nil error:nil];
self.plistData = array;
理想情况下,您将使用error
参数并进行正确的错误检查,但这样可以帮助您入门。
此代码将加载plist并返回一个可变数组,每个包含的数组和字典也将是可变的。