2016-03-20 18 views
0

JavaScriptスクリプトの評価の結果としてスローされたObjective-C例外をキャッチする方法はありますか?javascriptスクリプトの結果としてスローされたobjectiveC例外をキャッチ

例: 私はJSExportを介してエクスポートしたメソッドcanThrowでクラスObjを持っています。いくつかのスクリプトから、私はこのメソッドを呼び出し、実際に例外をスローします。 私はそれをどうにかして処理することができますか?

私はすでにスクリプト評価コードをtry-catchでラップしようとしましたが、それは役に立たなかった。

答えて

0

あなたの質問は少し不明ですが、私はとにかくそれに答えようとします。

Objective-CからJavascriptへの例外を発生させる必要がある場合は、-[JSContext exception]プロパティを使用する必要があります。詳細は、following questionを参照してください。

myJSContext[@"PassExceptionToObjC"] = ^void(JSValue *)jsException { 
    // Handle exception 
} 

そしてJavaScriptで次のコードを使用します:

try { 
    // some code 
} 
catch (exception) { 
    PassExceptionToObjC(exception); 
} 
をJavaScriptからのObjective-Cの例外を渡す

は簡単です、あなたは単に似のObjective-Cで例外を処理するいくつかの方法を、エクスポート

また、JavascriptからObjective-Cに特定の値を返すこともできます。同様に:あなたはJavascriptから呼び出された方法でのObjective-Cの例外をスロー避けるために必要がある場合には

function doSomething() { 
    try { 
     // Do something 
     return 'Ok'; 
    } 
    catch (error) { 
     return 'Error happens ' + error.message; 
    } 
} 

、単にあなたのObjective-Cのメソッドまたはブロックに@try/@catchを追加する必要があります

myJSContext[@"DoSomething"] = ^void(JSValue *)someValue { 
    @try { 
     // Do something 
    } 
    @catch (NSException *exception) { 
     // Handle exception 
    } 
} 

あるいは、 Objective-Cコードのロジックを変更すると、例外が発生します。

Objective-Cから呼び出されたJavascriptの例外を避ける必要がある場合、同様の方法が適用されます。単にtry/catchを追加します。ほとんどの場合、Objective-Cから呼び出されたJavaScriptの例外を無視することができます。しかし、私は少なくとも、トラブルシューティングを簡単にするために、自明ではないJavascriptに対してObjective-C側で例外ハンドリングを実装することを提案します。

希望します。

関連する問題