IOS - NSMutableString: добавление и инициализация свойства

Я явно чего-то не понимаю.

Я разбираю XML-документ, поэтому у меня есть NSMutableString для добавления к одному из элементов, потому что foundCharacters обрезается и делает это по частям. Я могу заставить все это работать, но я не понимаю, почему это не работает определенным образом.

@property (copy, nonatomic) NSMutableString *currentFoundCharacter;

Вот как я объявляю свойство для ViewController.

Тогда у меня есть:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
  {
    if (!currentFoundCharacter) {
      currentFoundCharacter = [[NSMutableString alloc] init]; // Have to do this or new strings never append to it.
    }
    if ([currentAttribute compare:@"description"] == NSOrderedSame && currentAttribute.length > 1) {
    [currentFoundCharacter appendString:[string copy]];
  }

Вот это прямо здесь работает. Он объединит в одном элементе все, что я хочу. но если я попытаюсь использовать синтезированные методы, я получаю сообщение об изменении неизменяемого объекта, поэтому в основном заменяю все currentFoundCharacters на self.currentFoundCharacters.

Возможно, я неправильно понял, когда и зачем использовать свойства и переменные экземпляра, но вне методов инициализации, и поэтому у меня сложилось впечатление, что лучше использовать сеттеры / геттеры. В конце концов, я просто хочу убедиться, что создаю поддерживаемый код.


person Doug    schedule 21.04.2012    source источник
comment
Я бы не объявлял изменяемый класс копией.   -  person CodaFi    schedule 22.04.2012
comment
Я также только что научился разбирать xml несколько дней назад. Я вижу только два различия. 1. Я не сделал свой currentFoundCharacter свойством моего класса. Я только заявил об этом в интерфейсе. 2. Я выделяю NSMutableString только один раз и использую [NSMutableString string], чтобы очистить его.   -  person David Skrundz    schedule 22.04.2012


Ответы (1)


Используйте сохранить вместо копирования в своей собственности. Копия дает вам неизменную копию.

person Mario    schedule 21.04.2012
comment
Комментарий CodaFi выше был правильным, я никогда не задумывался об этом, но я всегда просто делал копии NSString, чтобы они владели передаваемой строкой, не понимая, что NSMutableString будет другим. Это решило мою проблему, но и этот ответ был верным с технической точки зрения. - person Doug; 22.04.2012