我是新来的ObjectiveC和Xcode并出错。这一小段代码从getAllRecords获取一个字典(myDataPlist)。然后我在(myDataPlist)内创建一个可变的字典副本(1条记录),并用它解密1个字段。这工作完美。我只返回该记录(mutCopy)。这也适用。我的问题是原始字典(myDataPlist)的变化。它解密的记录也在(myDataPlist)中解密。 2 NSLog(@“%@”,myDataPlist)返回不同的结果。我肯定错过了什么。为什么(myDataPlist)更改?副本更改时NSDictionary更改
感谢您的帮助。
-(NSDictionary *)getRecordForKey:(NSString *)key{
NSDictionary *myDataPlist = [self getAllRecords];
NSMutableDictionary *mutCopy = [[myDataPlist valueForKey:key] mutableCopy];
NSArray *keys = [mutCopy allKeys];
NSData *tData = [[NSData alloc]init];
NSLog(@"%@",myDataPlist);
for (int x = 0; x <= [keys count] - 1; x++) {
if (![keys[x] isEqualToString:@"Template"] && ![keys[x] isEqualToString:@"RecNum"]) {
NSMutableArray *myArray = [mutCopy objectForKey:keys[x]];
tData = myArray[1];
NSString *tString = [tData decryptData:tData withKey:self.settingsManager.masterPad];
myArray[1] = tString;
[mutCopy setObject:myArray forKey:keys[x]];
}
}
NSLog(@"%@",myDataPlist);
return mutCopy ;
}
我试过这个,它会在行myArray [1] = tString上导致异常。终止应用程序,由于未捕获的异常'NSInternalInconsistencyException',原因:' - [__ NSCFArray replaceObjectAtIndex:withObject:]:发送到不可变对象的变异方法 – 2013-04-23 02:51:43
我一定看到过! :)这是因为数组不再可变。替换NSMutableArray * myArray = [mutCopy objectForKey:keys [x]];与NSMutableArray * myArray = [NSMutableArray arrayWithArray:[mutCopy objectForKey:keys [x]]] ;.这应该让你去。 – Suhas 2013-04-23 03:16:35
你也可以尝试这个问题提供的解决方案http://stackoverflow.com/questions/5453481/how-to-do-true-deep-copy-for-nsarray-and-nsdictionary-with-have-nested-arrays -di – Suhas 2013-04-23 03:27:31