私たちのアプリでは、C++静的ライブラリがあり、Objective-C++を使用しています。i ++でC++ try/catch無知
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は」] GetIntで()メソッドを介してのIntに変換することができない場合は、例外が発生していないことである:++ライブラリは、XMLデータを解析するrapidjsonを利用しcは 。代わりに私のアプリはSIGABRTでクラッシュします。
Assertion failed: (data_.f.flags & kIntFlag), function GetInt, file /Users/xxx/xxx/xx/ios/../src/rapidjson/document.h, line 1645.
Android OSでは、btwも同じように例外が発生します。 何が問題なのでしょうか? XcodeのSwiftコンパイラの動作に問題があると思います。それは明らかにあなたが提供するログで述べたように
これを 'catch(const std :: exception&e)'に変更するとどうなりますか? 'GetInt()'は 'std :: exception'から派生したものを返しますか? – NathanOliver
@ NathanOliver私がやろうとした最初のことは助けになりませんでした。私はC++がうまくいかず、同じことを考えました。そのような状況(GetInt()が入力テキストをIntegerに変換できない場合)では、例外は発生しません。コンパイラ/ OSに依存する方法(Android OSの場合と同様、例外が発生しキャッチブロックが発生した) – autobot