2012-03-02 11 views
0

私はobjective-cを初めて使用しています。現在、iOS Appで作業しています。 私は、カスタムUIViewオブジェクトの中にある、SettingsButtonを呼び出すButtonを持っています。 このボタンを押すと、FileOwner "ViewController.m"のTouch Up Insideハンドラが呼び出されます。これは後でNavControllerのViewControllerを押します。 しかし、アプリケーションはSIGABRTまたはEXC_BAD_ACCESSでクラッシュします。 AppDelegate.mにNavigationControllerのコードを挿入しているので、これが発生しています アイデアはありますか?NavigationControllerでButtonを押したときにiOSアプリケーションがクラッシュする

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
// Override point for customization after application launch. 
UIViewController *vc; 
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
    vc = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; 
} else { 
    vc = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; 
} 

UINavigationController* navController = 
[[UINavigationController alloc] initWithRootViewController:vc]; 
navController.navigationBarHidden = true; 
[self.window addSubview:navController.view]; 

[self.window makeKeyAndVisible]; 
return YES; 
} 

ViewController.m:

- (IBAction)SettingsPressed:(id)sender { 
NSLog(@"SettingsPressed!"); 
} 

明確にする:私の意図はSettingsButtonを押すとバック​​を持つ場合にのみ表示を変更することです戻るボタン。しかし、アプリケーションは既に空のEventhandlerでクラッシュします。

にErrorMessage SIGABRTが発生した場合:もちろん

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString SettingsPressed:]: unrecognized selector sent to instance 0x7a06fc0' 
+0

クラッシュする行を置くことはできますか? –

+0

発生したエラーメッセージをコンソールから追加しました。あなたが望んでいたことを願っています。 – Marv

+0

さて、近づくと、あなたはSettingsPressedを呼び出す部分のコードを見ることができます –

答えて

0

をあなたがNSStringのに直接SettingsPressedメッセージを送信しているかどうかを確認するために、あなたのコード内で検索を実行し、間違ったオブジェクトにメッセージを送っていると、インタフェースビルダーで適切な接続を行ったかどうかを確認してください。さらに詳しい情報を得るには、デバッガpo addressOfCrashingInstanceを送信することもできます。

+0

これをデバッグする方法は本当にわかりません。コンソールで 'po addressOfCrashingInstance'と入力すると'エラー:宣言されていない識別子を使用しています 'addressOfCrashingInstance' エラー:表現を解析中にエラーが1回発生しました。 ' インタフェースビルダーの接続は問題ありません。 – Marv

+0

私は、addressOfCrashingInstanceという単語を、po 0x7a06fc0 – Andrea

+0

のようなデバッガに表示されたインスタンスのアドレスに置き換えることを意味しました。次回はそうします。ありがとうございました – Marv

1

私はちょうどそれを解決しました。

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
// Override point for customization after application launch. 
UIViewController *vc; 
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
    vc = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; 
} else { 
    vc = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; 
} 

_navController = [[UINavigationController alloc] initWithRootViewController:vc]; 
_navController.navigationBarHidden = true; 
[self.window addSubview:_navController.view]; 
[self.window makeKeyAndVisible]; 
return YES; 
} 

このような小さなミスを、このような大きな効果を: 私はAppDelegate.hにプロパティを挿入し、AppDelegate.mで、それを合成し、次にそれを編集する必要がありました。 しかし、上記のコードが原因でエラーが発生している理由がわかりません。おそらく誰もがわかりますか?

関連する問題