Поймать исключение targetC, которое было вызвано javascript-скриптом

Есть ли способ поймать исключение цели-C, которое было вызвано в результате оценки сценария JavaScript?

Например: у меня есть класс Obj с методом canThrow, который я экспортировал через JSExport. Из какого-то сценария я вызываю этот метод, и он действительно выдает исключение. Как я могу справиться с этим?

Я уже пытался обернуть код оценки скрипта в try-catch, но это не помогло.


person netanel    schedule 20.03.2016    source источник


Ответы (1)


Ваш вопрос немного неясен, но я все же постараюсь на него ответить.

Если вам нужно вызвать исключение из Objective-C в Javascript, вы должны использовать свойство -[JSContext exception]. Подробности см. в следующем вопросе.

Передача исключения из 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, вам просто нужно добавить @try/@catch в свой метод или блок Objective-C:

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

Или, что предпочтительнее, измените логику кода Objective-C, который вызывает исключение.

Аналогичный способ применяется, если вам нужно избежать исключения в Javascript, вызванного из Objective-C. Вы просто добавляете try/catch. В большинстве случаев вы можете просто игнорировать исключения в JavaScript, вызванные из Objective-C. Но я предлагаю реализовать обработку исключений на стороне Objective-C для любого нетривиального Javascript, хотя бы для упрощения устранения неполадок.

Надеюсь, поможет.

person Borys Verebskyi    schedule 20.03.2016