Ios 无法使用'@试试';禁用Objective-C异常

Ios 无法使用'@试试';禁用Objective-C异常,ios,objective-c,xcode,exception,try-catch,Ios,Objective C,Xcode,Exception,Try Catch,我试图在Obj-C中创建一个类别,并使用@try-catch,因为没有其他方法可以检查UIStoryboard中是否存在标识符 - (UIViewController *)viewControllerWithID:(NSString *)key { UIViewController *vc; @try { // ERROR: Cannot use '@try' with Objective-C exceptions disabled vc = [self ins

我试图在Obj-C中创建一个类别,并使用
@try-catch
,因为没有其他方法可以检查
UIStoryboard
中是否存在标识符

- (UIViewController *)viewControllerWithID:(NSString *)key {
    UIViewController *vc;

    @try { // ERROR: Cannot use '@try' with Objective-C exceptions disabled
        vc = [self instantiateViewControllerWithIdentifier:key];
    }
    @catch (NSException *ex) {}

    return vc;
}
无法在禁用Objective-C异常的情况下使用'@try'

我在谷歌上搜索了这个错误,发现我必须检查在构建设置中是否将
Enable Objective-C Exceptions
设置为yes。我检查过了,设置为是

这是我找到的唯一解决办法,但它不起作用

我使用的是XCode 6.2,这是一个Swift项目,但Swift不支持@try catch,所以我在Obj-C中这样做



当我将相同的设置设置为“否”时,我会收到一条重复的错误消息,而当我再次将其设置为“是”时,我只会收到一条错误消息。这真的很奇怪。

你根本不应该试图捕捉这个异常。如果您试图实例化一个不存在的视图控制器,这将是一个严重的编程错误。当然,当您编写代码时,您知道有哪些视图控制器吗

编辑


让我扩展一下。如果要基于(比如)用户输入选择视图控制器,应在尝试实例化它之前验证它是否在允许的视图控制器列表(您编写的)中,所以你永远不会看到异常。

当我将文件传输到XCode 6.3时,我认为这是XCode 6.2中一个愚蠢的错误,它不再给我错误。

你尝试过清理(Cmd-Shift-K)然后尝试重新构建吗?有时候Xcode不会“忘记”错误,即使它们在项目清理之前已经修复。但是我没有改变任何东西这一定是Xcode 6.2中的一个错误。你能解释一下为什么需要这个类别吗?在什么情况下,你会不知道你是否有一个具有特定标识符的控制器?@rdelmar URL schemes等等。但我不想这样做。如果让vc=sb,我想能够做到。实例化EviewControllerWithiIdentifier(key){},我不能这样做,因为apple不支持它。@Arbiutor No,您可以编写代码来实现它。在代码中包含所有允许的视图控制器标识符的列表,并检查列表中是否有要使用的标识符。按照我的方式执行时出现了什么错误?我只想要一个100%的故障保护解决方案,而且我的方式是最优雅的。@arbiutor你的方式一点也不优雅,这是错误的。在编写代码时,您必须知道哪些标识符是有效的——毕竟您将标识符分配给了每个视图控制器。为什么不能创建一个标识符数组,然后只测试其中是否有键?不应该以这种方式使用异常。