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 예외가 발생합니다. 'NSCFArray replaceObjectAtIndex : withObject :] : 변경 가능한 메소드가 불변 객체로 전송되었습니다. –
나는 그것을 보아 왔음에 틀림 없습니다! :) 이것은 배열이 더 이상 변경할 수 없기 때문에 발생합니다. NSMutableArray 바꾸기 * myArray = [mutCopy objectForKey : keys [x]]; NSMutableArray를 사용하여 * myArray = [NSMutableArray arrayWithArray : [mutCopy objectForKey : keys [x]]] ;. 그게 너를 가야 해. – Suhas
이 질문에 제공된 솔루션을 사용해 볼 수도 있습니다. http://stackoverflow.com/questions/5453481/how-to-do-true-deep-copy-for-nsarray-and-nsdictionary-with-have-nested-arrays -di – Suhas