2012-03-22 2 views
0

У меня есть rootViewController и есть UIButton, который создан программно. Я хочу, чтобы этот UIButton отображал другой контроллер. По какой-то причине он выходит из строя со следующей ошибкой:UIButton, созданный программно сбой при вызове метода

Undefined symbols for architecture i386:
"_OBJC_CLASS_$_TutorialViewController", referenced from: objc-class-ref in RootViewController.o ld: symbol(s) not found for architecture i386 collect2: ld returned 1 exit status

вот код, который создает Информационный UIButton. этот код в методе loadView:

// Create a Button to get Help   
UIButton *helpButton = [UIButton buttonWithType:UIButtonTypeInfoDark ] ; 
CGRect buttonRect = helpButton.frame; 

// CALCulate the bottom right corner 
buttonRect.origin.x = self.view.frame.size.width - buttonRect.size.width - 8; 
buttonRect.origin.y = buttonRect.size.height - 8; 
[helpButton setFrame:buttonRect]; 

[helpButton addTarget:self action:@selector(doHelp:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:helpButton]; 

} 

Вот действие на transisition другого контроллер вида:

- (IBAction)doHelp:(id)sender{ 
NSLog(@"help button pressed"); 

TutorialViewController *sampleView = [[[TutorialViewController alloc] init] autorelease]; 
[sampleView setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; 
[self presentModalViewController:sampleView animated:YES]; 
} 

спасибо за любую помощь.

+0

У вас пробовали мои ан? – Krunal

+0

Почему вы инициализируете контроллер вида «init» вместо «initWithNibName: bundle:»? – viggio24

+0

init должен быть в порядке, в худшем случае viewController не имеет вида и выглядит черным. Возможно, он называет 'initWithNibName: bundle:' из этого метода init. Я делаю это время от времени. –

ответ

2

Проверьте в настройках Target, на Строительства фаз списке источников компилирования, что у вас есть файл TutorialViewController.m в списке.

+2

Или выберите TutorialViewController.m и установите флажок «Целевое членство» в правой панели. –

+0

@MatthiasBauch Nifty! не знал об этом :) – adig

+0

Вы были правы! Я скопировал файлы TutorialViewController в проект. что-то должно было поступить не так во время копирования ... спасибо за вашу помощь! – hanumanDev

-1

Я думаю, что вместо (IBAction), вы должны написать (void)

+0

Нет IBAction определяется как void: #define IBAction void – viggio24

+0

as in - (void) doHelp: (id) отправитель {....} Я пробовал это. тем не менее. – hanumanDev

+0

Но кнопка создана не IB ... поэтому я думаю, что мы не должны писать (void) вместо (IBOutlet) ?? – Krunal

1

вместо (IBAction)doHelp:(id)sender вы должны написать (void)doHelp .... попробовать это :)

0

Вы #importing в .h файл, а не файл .m?

Проблема не в вашем UIButton, проблема в том, что класс TutorialViewController не скомпилирован правильно.

5

adig вероятно прав.

Кроме того, это технически не является «аварийным». Он «не может построить, с этой ошибкой компоновщика». Вы можете сказать, что это ошибка компоновщика, потому что он сказал: «ld возвратил 1 статус выхода». ld является компоновщиком.

Под обложками XCode компилирует и связывает ваш код перед его запуском. Если это не удается во время компиляции или связывания, это «сбой сборки», а не «сбой». Авария возникает, когда приложение создается, но затем внезапно останавливается во время выполнения. Одной из распространенных причин этого является обращение к указателю nil.

0

очень простой, но иногда мы можем пропустить это :) Вы заявили о том же методе в файле .h?

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