2012-03-22 21 views
0

私はrootViewControllerを持っており、プログラムで作成されたUIButtonを持っています。このUIButtonに別のView Controllerを表示させたい。なんらかの理由で、次のエラーでクラッシュします。メソッドが呼び出されたときにプログラムによってクラッシュする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

ここにInfo 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

私のansを試してみましたか? – Krunal

+0

なぜ "initWithNibName:bundle:"ではなく "init"でView Controllerを初期化していますか? – viggio24

+0

initは大丈夫です。最悪の場合、viewControllerにはビューがなく、黒く表示されます。たぶん彼はこのinitメソッドから 'initWithNibName:bundle:'を呼び出します。私は時々これを行う。 –

答えて

2

チェックを記述する必要があります。あなたが(void)doHelpを記述する必要があり

+2

に関連付けられたアクションの場合は、 '(IBAction)'の代わりに '(void)'を使用するか、またはTutorialViewController.mを選択し、右側のサイドバーの "Target Membership"をチェックするのは間違った概念です。 –

+0

@MatthiasBauch Nifty!それについて知らなかった:) – adig

+0

あなたは正しい! TutorialViewControllerファイルをプロジェクトにコピーしました。コピー中に何かが間違っているはずです...あなたの助けに感謝します! – hanumanDev

-1

私が代わりに(IBAction)を考える、あなたがリストにTutorialViewController.mファイルを持っているソースをコンパイルリストの下のビルドフェーズのターゲット設定で(void)

+0

IBActionはvoidとして定義されていません: #define IBAction void – viggio24

+0

in - (void)doHelp:(id)sender {....}私はそれを試しました。しかし同じエラー。 – hanumanDev

+0

しかし、ボタンはIBによって作成されていないので、私は(void)代わりに(IBOutlet)を書いてはいけないと思いますか? – Krunal

1

の代わり(IBAction)doHelp:(id)sender ....これを試してみてください:)

0

あなたは.hファイルではなく、.mファイルを#importingていますか?

問題はあなたのUIButtonではなく、問題はTutorialViewControllerクラスが正しくコンパイルされていないことです。

5

adigが正しいでしょう。

また、技術的には「クラッシュ」ではありません。このリンカーエラーでビルドに失敗しました。 「ldは1つの終了ステータスを返しました」という理由で、リンカーエラーであることがわかります。 ldはリンカーです。

XCodeは、コードを実行する前にコードをコンパイルしてリンクします。コンパイルやリンク中に失敗した場合、それは「クラッシュ」ではなく「ビルド失敗」です。クラッシュはアプリケーションがビルドされたときですが、実行時に突然停止します。これの一般的な原因の1つは、無ポインタにアクセスすることです。

0

非常に基本的ですが、私たちはそれを見逃すかもしれません:) .hファイルで同じ方法を宣言しましたか?