我是新來的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