2011-01-04 3 views
0

У меня очень простое приложение. У меня есть кнопка и ярлык в IB. У меня есть IBAction для onClick, который вызывает setText на ярлыке. Там есть розетка для этикетки. Все связано в IB. Это первый раз сбой приложения в симуляторе. Когда я запускаю его снова, он устанавливает текст. Затем снова произойдет сбой. Он всегда срабатывает на самом устройстве. Это должно быть просто, но я не уверен, что я делаю неправильно.Очень простое приложение для iPhone падает на UILabel 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 

и в .m:

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

К сожалению, я новичок на сайте. Как получить журнал сбоев и стек? Благодарю.

+1

Покажите нам простой пример кода, который показывает ошибку. – zoul

+0

Во-первых, вы не предоставляете достаточно деталей. Журнал сбоев, стек? – jv42

+0

Вы получаете журнал сбоев с консоли - (нажмите кнопку run -> console). Вы получаете трассировку стека из отладчика (run -> debugger) - консоль - это сообщения, выводимые вашим приложением. Отладчик позволяет увидеть, что состояние вашего кода находится в точке, где он сбой. Трассировка стека - это верхняя левая часть отладчика, которая показывает список имен функций. – deanWombourne

ответ

1

EDIT: В то время как этот ответ технически правильно, это не дает ответа на вопрос вообще :(Sorry


< предупреждение - это догадка>

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

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

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

, когда вы должны иметь код, как

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

или

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

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

+0

Хм. Я никогда не выделяю ярлык. Я не знал, что мне нужно, когда он создается в IB. –

+0

А, я пропустил IBOutlet в файле заголовка (и неправильно понял вопрос!). Прости! – deanWombourne

+0

Не беспокойтесь! Я ценю ваше время. –

1

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

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