Довольно простой код, который, я могу сказать, работал так, как задумано в Xcode 4.1, но ломается в Xcode 4.2.Вот код ошибки:
-(void)mergeDevData2Email:(NSMutableString *)target codeArray:(NSArray *)array1 valueArray:(NSArray *)array2 {
NSUInteger n = 0;
for (NSMutableString *aCode in array1) {
if ([array2 count] > n) {
NSMutableString *arg = [array2 objectAtIndex:(NSUInteger)n];
NSLog(@"Target isKindOf NSMutableString: %@", ([target isKindOfClass:[NSMutableString class]]) ? @"YES" :@"NO");
NSLog(@"aCode isKindOf NSMutableString: %@", ([aCode isKindOfClass:[NSMutableString class]]) ? @"YES" :@"NO");
NSLog(@"arg isKindOf NSMutableString: %@", ([arg isKindOfClass:[NSMutableString class]]) ? @"YES" :@"NO");
[target replaceOccurrencesOfString:aCode withString:arg options:NSLiteralSearch range:NSMakeRange(0, [target length])];
n++;
}
else {
break;
}
}
}
Это то, что отображает NSLogs:
2011-11-03 15: 42: 59.967 TestProg [30413: c503] Цель isKindOf NSMutableString: ДА
2011-11-03 15: 42: 59.968 TestProg [30413: c503] aCode isKindOf NSMutableString: ДА
2011-11-03 15: 42: 59.969 TestProg [30413: c503] arg isKindOfNSMutableString: YES
Когда я выполняю строку кода [target replaceOcurances ..., с которой я сталкиваюсь, -
Программный полученный сигнал: "SIGABRT".
Со следующимжурнал консоли -
2011-11-03 15: 43: 26.828 TestProg [30413: c503] * Завершение работы приложения из-за невыполненного исключения «NSInvalidArgumentException», причина: «Попытка изменить неизменяемыйобъект с replaceOccurferencesOfString: withString: options: range: '
Мой вопрос: ГДЕ я пытаюсь изменить неизменный объект?Во-вторых, почему это хорошо работает в Xcode 4.1?Конечно, все игроки выглядели изменчивыми для Xcode 4.1.Какая разница в Xcode 4.2?Мне здесь не хватает чего-то тонкого.