如何在iOS Objective-C中捕获C++异常代码?

3

我是iOS编程的新手,现在遇到一个与从C ++类中抛出异常代码相关的问题。

    @try {
        myCPPClass myObj ; //this throws integer exception codes
    }
    @catch (...) { //I want to catch the integer value here, how ??
        NSLog(@"Exception:") ;
    }
    @finally {
    } 

我知道在Objective-C中使用异常捕获方式编码可能不是一个好的实践,我想知道如何为C++类在Objective-C中创建自定义异常类?

2个回答

2
将你的Objective-C源文件重命名为具有.mm扩展名。它们将被编译为Objective-C ++,这与Objective-C完全兼容,同时提供了C ++的所有功能。然后,您可以使用通常的方式捕获C ++异常。
try {
   ...
}
catch(std::exception& e) {
   ...
}

构造。


Objective-C很糟糕。你会想要使用C++来处理所有的逻辑,只有在必须与GUI接口时才使用Obj-C进行通信。 - Richard Hodges
1
已经尝试过了,但仍然无法从C++中捕获任何异常。 - user187676
@ErikAigner 如果您打开一个新的问题并提供一个MCVE,我会查看它。 - Richard Hodges

0

针对那些仍未从C ++中捕获任何异常的人,这是Richard answer的扩展。

请使用此方法而不是try catch

@try { } 
@catch (...) {
  NSLog(@"Exception:");
}

为什么?

使用 @catch(...) 捕获任何 Objective-C 异常,但无法捕获任何 C++ 异常。 因此,为了实现互操作性,请使用 @catch(...) 来捕获每个异常和 @throw; 来重新抛出已捕获的异常。 在 32 位中,@catch(...) 与 @catch(id exception) 具有相同的效果。

- C++互操作性

还是不捕获任何异常?

  • 不要指定 -no_compact_unwind 标志。
  • 如果包括普通 C 代码,则指定 -funwind-tables 标志。

- 解决语言异常崩溃


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接