2011-01-18 2 views
14

私はちょうどiOS開発を学び始めました。今ではsigabrtが私の主な機能にあります。Sigabrt on Main function

int retVal = UIApplicationMain(argc, argv, nil, nil); 

私はiOSのプログラミングに非常に新しいですと、私はこのエラーを引き起こすことによってできたものについては考えている:エラーが呼び出しによってトリガーされます。コールスタックで見つかったことの1つは、次の例外が発生したことです。dyld_stub_objc_exception_throw このエラーの原因は何ですか?

答えて

2

新しい言語/ APIを学習している人の典型的なエラーです。私はビューを正しく設定するのを忘れていました。

UIView *controllersView = [myViewController view]; 
[window addSubview:controllersView]; 
2

UIApplicationMainは基本的にアプリケーションの残りの部分を実行するので、クラッシュの実際の原因はアプリケーションのどこにでもある可能性があります。コールスタックをさらに見下ろす必要があるかもしれません。

ただし、最後の2つのパラメータとしてnilを渡しています。最初のnilprincipalClassNameの引数です。UIApplicationをプリンシパルクラスにしたい場合は、正当にゼロにすることができます。 2番目のnilはアプリケーションの委任名です。メインのペン先からデリゲートをロードする場合は、nilを渡す必要があります。あなたは?もしあなたがそうでなければ、それは問題かもしれません(私は、これらの引数の両方ともnilでこの関数を呼び出したとは言えません)。

+0

私はデリゲート名を渡してみましたが、成功しませんでした。私はそれがエラーが発生する前に私のコードが実行することができますdidFinishLaunchingWithOptionsは決して実行されません – Raphael

33

X-Code 4.2ではこの問題が発生していましたが、ストーリーボードが見つかりませんでした。実際の例外が何であったのかの兆候がなかったということは、不満を募らせた部分でした。私はtry/catchをメイン関数に追加することで、ログの例外を取得することができました。 (ARCを使用しているため、ARCを使用していない場合、メインと少し違って見えます)

int main(int argc, char *argv[]) 
{ 
    int retVal = 0; 
    @autoreleasepool { 
     NSString *classString = NSStringFromClass([sortaAppDelegate class]); 
     @try { 
      retVal = UIApplicationMain(argc, argv, nil, classString); 
     } 
     @catch (NSException *exception) { 
      NSLog(@"Exception - %@",[exception description]); 
      exit(EXIT_FAILURE); 
     } 
    } 
    return retVal; 
} 
+0

それは命を救う、私のアプリは私がUIViewControllerを渡していたUITableViewControllerが期待されています。 – Echilon

+1

スタックトレースを取得するには、NSLogging '[exception callStackSymbols];もお勧めします。またあなたは 'NSLog(@" Exception - %@ "、exception);'(nslogのような形式の文字列にあなたを送るときに) 'description 'を呼び出す必要はありません。 – apple16

+1

このテクニックは素晴らしいです!同様の難しい例外を捕まえるのを助けるために、誰もが推薦するべきである。この種の例外レポートを設定するために、すべてのプロジェクトに特別なDEBUGマクロを追加しています。 – jpap