2016-03-20 4 views
0

Gibt es eine Möglichkeit, eine Objective-C-Ausnahme abzufangen, die als Ergebnis einer JavaScript-Skriptauswertung ausgelöst wurde?Fangen Sie eine obctiveC-Ausnahme ein, die als Ergebnis eines JavaScript-Skripts ausgelöst wurde

Zum Beispiel: Ich habe eine Klasse Obj mit einer Methode canThrow, die ich über JSExport exportiert habe. Aus irgendeinem Skript rufe ich diese Methode auf und es löst tatsächlich eine Ausnahme aus. Irgendwie kann ich damit umgehen?

Ich habe bereits versucht, den Skript-Evaluierungscode in einen try-catch zu packen, aber das hat nicht geholfen.

Antwort

0

Ihre Frage ist ein wenig unklar, aber ich werde versuchen, es trotzdem zu beantworten.

Wenn Sie eine Ausnahme von Objective-C in Javascript auslösen müssen, sollten Sie die Eigenschaft -[JSContext exception] verwenden. Einzelheiten finden Sie unter following question.

Passing Ausnahme von Javascript zu Objective-C ist einfach, exportieren Sie einfach eine Methode, die Ausnahme in Objective-C wie behandelt:

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

Und dann folgenden Code in Javascript verwenden:

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

Alternativ können Sie einen bestimmten Wert von Ihrem Javascript nach Objective-C zurückgeben. Wie:

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

Im Fall, dass Sie Objective-C Ausnahme in der Methode zu werfen, um zu vermeiden, von Javascript genannt, geben Sie einfach @try/@catch in Ihrer Objective-C-Methode hinzufügen sollen oder Block:

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

Oder bevorzugt, Änderungslogik von Objective-C-Code, die eine Ausnahme auslöst.

Ähnliches gilt, wenn Sie eine Ausnahme in Javascript vermeiden müssen, die von Objective-C aufgerufen wird. Sie fügen einfach try/catch hinzu. In den meisten Fällen können Sie Ausnahmen in JavaScript ignorieren, die von Objective-C aufgerufen werden. Aber ich schlage vor, die Ausnahmebehandlung auf Objective-C-Seite für jedes nicht-triviale Javascript zu implementieren, zumindest um die Fehlersuche zu vereinfachen.

Ich hoffe, es hilft.

Verwandte Themen