В нашем приложении у нас есть статическая библиотека C++, и я использую Objective-C++ для работы с ней. что C++ библиотека использует rapidjson для синтаксического анализа XML-данных:C++ try/catch ignorance in iOS
try {
rapidjson::Document document;
document.Parse(connection.data.description);
connection.openTime = document["openFrom"].GetInt();
connection.closeTime = document["openTo"].GetInt();
return true;
} catch (std::exception e) {
connection.openTime = 0;
connection.closeTime = 0;
return false;
}
Проблема заключается в том, что если документ [ «openFrom»] не могут быть преобразованы в Int через GetInt() метод, исключение не поднимается. Вместо этого приложение падает с SIGABRT.
Assertion failed: (data_.f.flags & kIntFlag), function GetInt, file /Users/xxx/xxx/xx/ios/../src/rapidjson/document.h, line 1645.
В ОС Android, кстати, в том же случае исключение возбуждалось успешно. В чем может быть проблема? Я предполагаю, что проблема заключается в поведении компилятора Xcode's Swift.
Что произойдет, если вы измените его на 'catch (const std :: exception & e)'? Также вы уверены, что 'GetInt()' возвращает что-то, полученное из 'std :: exception'? – NathanOliver
@NathanOliver, это было первое, что я пытался сделать, не помогло. Я вообще не разбираюсь в C++, просто задаюсь вопросом то же самое: как возможно, что в такой ситуации (когда GetInt() не может преобразовать ввод-текст в Integer), исключение не будет повышаться. И как это зависит от компиляторов/ОС (как и в ОС Android, исключение составляло повышение, а блок catch принимал меры) – autobot