Добавление строк в NSMutableString - PullRequest
6 голосов
/ 01 апреля 2010

Сейчас мы немного разбираемся в этом и не понимаем, почему этот простой фрагмент кода выдает ошибку. Сокращено для краткости:

NSMutableString *output;

...

@property (nonatomic, retain) NSMutableString *output;

...

@synthesize output;

...

// logs "output start" as expected
output = [NSMutableString stringWithCapacity:0];
[output appendString:@"output start"];
NSLog(@"%@", output);

...

// error happens here
// this is later on in a different method
[output appendString:@"doing roll for player"];

Может кто-нибудь заметить мою ошибку?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2010

Изменить строку

output = [NSMutableString stringWithString:@"output start"]

до

[self setOutput:[NSMutableString stringWithString:@"output start"]]

(или self.output = ..., если вы предпочитаете эту запись).

Несмотря на то, что вы объявили свойство, вы не используете установщик, поэтому вы не сохраняете строку.

1 голос
/ 01 апреля 2010

Решение действительно было связано с сохранением, как указано пользователем invariant . Метод класса:

output = [NSMutableString stringWithCapacity:0];

возвращает autorelease NSMutableString. При назначении моему выходному свойству - по-видимому, даже с флагом сохранения - оно не сохраняло его. Решением было выделить его самому, а не авто-релиз:

output = [[NSMutableString alloc] initWithCapacity:0];

Тогда удержание сработало. Любое объяснение причин было бы очень кстати.

Редактировать

Разобрался, почему. Я получал доступ к экземплярам vars напрямую, а не через геттер / сеттер, который я синтезировал. Больше информации в моем блоге .

...