Давайте пройдемся по этому пути, найдем вашу ошибку и решим проблему утечки памяти:
Сначала вы создаете NSMutableString. Отлично. (+1 сохранить счет)
Затем вы добавляете еще одну строку в NSMutableString. Все в порядке. (все еще +1 сохраняют счет).
Затем вы обрезаете newlineCharacterSet, который возвращает ... автоматически выпущенную строку NSString. Поскольку этот объект отличается от вашего исходного объекта, вы вытекли из исходного объекта (так как он имел счет сохранения +1 и у вас больше нет указателя на него), и теперь у вас есть неизменяемая строка NSS для загрузки. Это означает, что в следующий раз, когда этот метод будет вызван, вы попытаетесь добавить строку в строку NSString, которая вызовет исключение «не может изменить неизменяемый объект».
Вот быстрый способ решить эту проблему:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(!currentElementValue)
currentElementValue = [[NSMutableString alloc] initWithString:string];
else
{
[currentElementValue appendString:string];
NSString *trimmedString = [currentElementValue stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
[currentElementValue setString:trimmedString];
NSString *instructions = @"instructions";
[directions setValue:string forKey:instructions]; //mm
[appDelegate.directions setValue:string forKey:instructions];
//[appDelegate.directions setObject:string forKey:currentElementValue];
// [appDelegate
}
}
(сохранить обрезанную строку в другой переменной, затем использовать setString: метод NSMutableString для передачи содержимого, но без потери указателя на NSMutableString)