Почему мои переменные не сохраняются между методами? - iPhone - PullRequest
1 голос
/ 06 июня 2011

Заголовочный файл:

NSString *righta;
@property(nonatomic, retain) NSString *righta;

(я обычно не делаю объявления @property для своих переменных, но думал, что это может помочь переменной сохраниться в классе, хотя это не так)

Файл реализации:

@synthesize righta;

- (void) function1 {
     righta = [NSString stringWithFormat:@"A"];
}

- (IBAction)function2:(id)sender {
     NSLog(@"righta is still %@", righta);
}

При попытке получить доступ к значению строки во второй функции я получаю «EXC_BAD_ACCESS», и приложение вылетает.

Любая помощь будет принята с благодарностью.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 06 июня 2011

stringWithFormat возвращает автоматически освобожденный объект.Вы должны сохранить это.Обратите внимание, что вы обращаетесь непосредственно к ivar, а не к свойству, поэтому строка не сохраняется.Вместо этого используйте свойство:

self.righta = [NSString stringWithFormat:@"A"];

Некоторые программисты предпочитают синтезировать свои свойства с другим именем ivar, чтобы избежать прямого доступа к ivar по ошибке.

2 голосов
/ 06 июня 2011

Вы должны использовать

self.righta  = [NSString stringWithFormat:@"A"];

Для присвоения переменной, в противном случае метод доступа не используется и значение не сохраняется.

1 голос
/ 06 июня 2011

Изменить функцию 1 на:

self.righta = [NSString stringWithFormat:@"A"];

Вы назначали непосредственно правому ивару без сохранения строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...