В нашем приложении у нас есть статическая библиотека C++, и я использую Objective-C++ для работы с ней. Эта библиотека С++ использует Rapidjson для анализа XML-данных:
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;
}
Проблема в том, что если document["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 Swift.
catch (const std::exception& e)
? Также вы уверены, чтоGetInt()
возвращает что-то производное отstd::exception
? - person NathanOliver   schedule 08.11.2016