2010-01-21 4 views
0

Я с NSString переменную-член, объявленный в заголовочном файле контроллера представления:Инициализировать переменную-член NSString внутри контроллера вид


@interface MyApprViewController : UIViewController { 
NSString *var; 
     ... 
} 

@property (retain) NSString *var; 
... 

-(IBAction)buttonPressed: (id)sender; 

Внутри реализации, я использую @synthesize var и попытаться использовать этот вар изнутри реализация метода buttonPressed, но он работает неправильно, и я предполагаю, что это потому, что var никогда не инициализировался. Где я могу инициализировать эту переменную? Я не хочу делать это внутри метода; Я хочу сделать это один раз, конечно, потому что я буду держать добавление текста к нему:


-(IBAction)buttonPressed: (id)sender { 
NSString *input = ((UIButton *)sender).currentTitle; 
var = [var stringByAppendingString:input]; 
textField.text = var; 
} 

[input release]; 
} 

Я попытался перекрывая метод инициализации внутри класса контроллера представления, но он никогда не вызывается (может быть, потому что нет явной инициализации класса контроллера вида?) Итак, где я должен инициализировать var, чтобы я мог использовать его внутри класса контроллера вида (внутри метода buttonPressed)?

Спасибо, Михай

ответ

1

Есть несколько мест для инициализации:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 

Это назначенный инициализатор. Вы сказали, что перегрузили «init», который не является назначенным инициализатором для UIViewController.

- (void)awakeFromNib 

Если ваш контроллер представления сам внутри родительского СИБ, этот метод вызывается один раз родитель NIB полностью загружен и материнская розетка NIB все были проводными.

- (void)viewDidLoad 

Если ваш контроллер просмотра имеет NIB, это вызывается при загрузке его NIB.

- (void)loadView 

Если ваш контроллер просмотра не имеет NIB, это вызывается, когда его вид сначала запрашивается.

+0

Спасибо за это. Я использовал viewDidLoad, и он работал, как ожидалось. –

0

Лучшее место будет внутри viewDidLoad или любого init используемого метода. Если у вас их нет, просто добавьте метод -(void)viewDidLoad в ваш UIViewController.

+0

Спасибо, это сработало! –

0

Конечно, это не сработает, stringByAppendingString - это метод экземпляра, и var никогда не выделяется. Лучший способ инициализации, если у вас есть файл nib (как этот пример appera), находится в viewDidLoad, но проверьте перед инициализацией if allready no, чтобы избежать всякий раз, когда этот метод называется новым объектом. наконец, запомнить релиз

+0

@ user652716 - без подписей; используйте страницу [страница профиля] (http://stackoverflow.com/users/652716/user652716); см. [FAQ] (http://stackoverflow.com/faq) – McDowell

Смежные вопросы