Ale*_*exR 2 objective-c nsdictionary nsarray ios
我有一个属性列表,我读入NSDictionary,我想从中创建一个可变副本到NSMutableDictionary来编辑内容,然后能够通过复制原始内容来重置可变字典.
NSDictionary *defaultRows;
NSMutableDictionary *rows;
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"];
defaultRows = [[[NSDictionary alloc] initWithContentsOfFile: plistPath] objectForKey:@"rows"];
Run Code Online (Sandbox Code Playgroud)
这就是我尝试创建原始字典的副本(根据Apple的建议):
rows = [NSMutableDictionary dictionaryWithDictionary: defaultRows];
Run Code Online (Sandbox Code Playgroud)
当我尝试用以下内容更改字典行的内容时:
[[[rows objectForKey:self.company.coaTypeCode] objectForKey:statementType] removeObjectsAtIndexes:rowsToDelete];
我收到运行时错误*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object'.
由于defaultRows从属性列表加载,最简单的方法是使用可变容器反序列化属性列表.
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"];
NSData *rowsData = [NSData dataWithContentsOfFile:plistPath];
NSMutableDictionary *rows = [NSPropertyListSerialization propertyListWithData:rowsData
options:NSPropertyListMutableContainers format:NULL error:NULL];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2972 次 |
| 最近记录: |