2015-05-12 32 views
0

我試圖在Obj-C中設定一個類別並使用@try-catch,因爲沒有其他方法來檢查UIStoryboard中是否存在標識符。在Objective-C例外情況下禁止使用'@try'

- (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; 
} 

不能使用「@try」禁用

Objective-C的異常我GOOGLE了這個錯誤,我發現我必須檢查Enable Objective-C Exceptions在構建設置設置爲yes。我檢查並設置爲是。

它是我找到的唯一解決方案,它不工作。

即時通訊使用XCode 6.2,這是一個Swift項目,但Swift不支持@ try-catch,這就是爲什麼我在Obj-C中這樣做。


當我設置相同的設置沒有我得到一個重複的錯誤消息,當我把它設置爲yes再次我只得到一個錯誤消息。這真的很奇怪。

+0

您是否嘗試清洗(Cmd-Shift-K)然後嘗試再次構建?有時Xcode不會「忘記」有關錯誤,即使它們在項目清理之前已經修復。 – stonesam92

+0

但我沒有改變任何東西 – Arbitur

+0

這一定是xcode 6.2中的一個bug – Arbitur

回答

0

你根本不應該試圖捕捉這個異常。如果你嘗試實例化一個不存在的視圖控制器,這是一個嚴重的編程錯誤。當你編寫代碼時,你知道哪些視圖控制器?

編輯

讓我擴大一點。如果你想選擇一個基於(比方說)用戶輸入的視圖控制器,你應該驗證它是否在允許的視圖控制器列表中(你編寫的)之前你試圖實例化它,所以你永遠不會看到例外。

+0

我有我的理由 – Arbitur

+0

但我不想這樣做。我希望能夠做到讓vc = sb。 instantiateViewControllerWithIdentifier(key){} – Arbitur

+0

我不能這樣做,因爲蘋果不支持。 – Arbitur

0

因爲我認爲這是XCode 6.2中的一個愚蠢的錯誤,當我將文件傳輸到XCode 6.3時,它不再給我提供錯誤。

+0

你不應該以這種方式使用異常。 – JeremyP

相關問題