Очень простое приложение для iPhone аварийно завершает работу на заданном тексте UILabel

У меня есть очень простое приложение. У меня есть кнопка и метка в IB. У меня есть IBAction для onClick, который вызывает setText на метке. Есть выход для этикетки. Все связано в ИБ. Это приводит к сбою приложения в первый раз в симуляторе. Когда я запускаю его снова, он устанавливает текст. Потом снова вылетает в следующий раз. Он всегда падает на самом устройстве. Это должно быть просто, но я не уверен, что делаю неправильно.

Спасибо.

в моем файле .h:

#import <UIKit/UIKit.h>

@interface UntitledViewController : UIViewController {
IBOutlet UILabel *label;
IBOutlet UIButton *button;
}

@property (nonatomic, retain) UILabel *label;

-(IBAction) onClick1: (id) sender;

@end

и в .м:

- (IBAction) onClick1: (id) sender
{
    //[label setText:@"Hello World!"];
    label.text = @"Hello World!";
    //[button setTitle:@"Clicked" forState:UIControlStateNormal];
}

Извините, я новичок на сайте. Как получить журнал сбоев и стек? Спасибо.


person Thomas Laskowski    schedule 04.01.2011    source источник
comment
Покажите нам простой пример кода, демонстрирующий ошибку.   -  person zoul    schedule 04.01.2011
comment
Во-первых, вы не предоставляете достаточно подробностей. Журнал сбоев, стек?   -  person jv42    schedule 04.01.2011
comment
Вы получаете журнал сбоев из консоли - (нажмите запустить -> консоль). Вы получаете трассировку стека от отладчика (выполнить -> отладчик) — консоль — это сообщения, выводимые вашим приложением. Отладчик позволяет увидеть, в каком состоянии находится ваш код в момент сбоя. Трассировка стека — это верхний левый раздел отладчика, в котором отображается список имен функций.   -  person deanWombourne    schedule 04.01.2011
comment
Что вы увидите в консоли, если поместите строку NSLog(@"%@", label); в качестве первой строки в свой метод onClick1?   -  person deanWombourne    schedule 04.01.2011
comment
Вы уверены, что синтезируете свою метку в верхней части файла .m?   -  person MishieMoo    schedule 04.01.2011


Ответы (2)


РЕДАКТИРОВАТЬ: Хотя этот ответ технически правильный, он вообще не отвечает на вопрос :( Извините


‹ предупреждение - это предположение >

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

Я предполагаю, что у вас есть такой код:

label = [[[UILabel alloc] initWithFrame:CGRectMake(0,0,10,10)] autorelease];

когда у вас должен быть код вроде

// Option 1
self.label = [[[UILabel alloc] initWithFrame:CGRectMake(0,0,10,10)] autorelease];

or

// Option 2
label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,10,10)];

(первый использует свойство для сохранения метки. Второй не освобождает его автоматически. Первый - рекомендуемый способ)

person deanWombourne    schedule 04.01.2011
comment
Хм. Я никогда не присваиваю ярлык. Я не знал, что мне это нужно, когда он создается в IB. - person Thomas Laskowski; 04.01.2011
comment
Ах, я пропустил IBOutlet в заголовочном файле (и неправильно понял вопрос!). Извините! - person deanWombourne; 04.01.2011
comment
Не беспокойся! Я ценю ваше время. - person Thomas Laskowski; 04.01.2011

Дважды проверьте, что вы установили соединение для метки в IB.
Поставьте точку останова в отладчике на строке label.text = @"Hello World!";
И убедитесь, что метка здесь не равна нулю.
Если она равна нулю, вы не установил для него подключение в ИБ.

person Valeriy Van    schedule 18.09.2011