【发布时间】:2012-02-25 19:23:51
【问题描述】:
我有一个属性列表,我将其读入 NSDictionary,我想从中创建一个可变副本到 NSMutableDictionary 中以编辑内容,然后可以通过复制回原始内容来重置可变字典。
NSDictionary *defaultRows;
NSMutableDictionary *rows;
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"];
defaultRows = [[[NSDictionary alloc] initWithContentsOfFile: plistPath] objectForKey:@"rows"];
这就是我尝试创建原始字典副本的方式(根据Apple's recommendation):
rows = [NSMutableDictionary dictionaryWithDictionary: defaultRows];
当我尝试更改字典行的内容时:
[[[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'。
我已经阅读了article here,但想知道是否有更优雅的方法来实现深拷贝?
【问题讨论】:
-
如果 defaultRows 被声明为 NSMutableDictionary 是否有效?
-
BryanMac,很遗憾没有。我声明了
NSMutableDictionary *rows, *defaultRows;,但得到了同样的错误信息。
标签: objective-c ios nsarray nsdictionary