2016-03-20 35 views
0

是否有任何方式捕獲由於JavaScript腳本評估而引發的Objective-C異常?捕獲由於JavaScript腳本而拋出的objectiveC異常

例如: 我有一個類Obj的方法canThrow,我已經通過JSExport導出。從一些腳本我調用這個方法,它確實會拋出一個異常。 我可以處理它的任何方式?

我已經嘗試將腳本評估代碼封裝在try-catch中,但這並沒有幫助。

回答

0

你的問題有點不清楚,但我會盡力回答。

如果您需要引發異常從Objective-C到Javascript,您應該使用-[JSContext exception]屬性。詳情請參閱following question

從Javascript傳遞例外的Objective-C是簡單,你只需輸出一些方法,將處理異常在Objective-C,如:

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

然後在JavaScript中使用下面的代碼:

try { 
    // some code 
} 
catch (exception) { 
    PassExceptionToObjC(exception); 
} 

或者,您可以將特定的值從您的Javascript返回到Objective-C。像:

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

如果你需要避免扔在方法的Objective-C異常,從Javascript調用,你應該簡單地在你的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的異常處理,至少可以簡化故障排除。

希望它有幫助。