2012-06-21 51 views
4

我收到一段時間無法識別的選擇器發送到實例異常。當我得到這個我想只是跳過它,我的應用程序應該工作。如何捕獲發送給實例異常的無法識別的選擇器?

但是我不知道如何捕捉。由於這並不容忍:

@property(nonatomic,retain) UIButton *button; 
    @try{ 

     if(button.currentBackgroundImage == nil){//rises exception 
    } 
    }@catch(NSException *e){ 
} 

我該如何處理?

謝謝。

回答

5

我使用和經常看到的技術是:不是捕捉異常,檢查對象響應選擇:

if(![button respondsToSelector:@selector(currentBackgroundImage)] || button.currentBackgroundImage == nil) { 
    // do your thing here... 
} 
+2

是的,這是正確的。你想避免例外,只要你可能可以^^。 – borrrden

+0

好了一段時間後仍然得到: - [__ NSCFType setBackgroundImage:forState:]:無法識別的選擇器發送到實例。也許與按鈕屬性我應該的東西。有了這個屬性,我保存按鈕實例,當我按下其他按鈕時,我會刪除先前按下的按鈕背景 – Streetboy

+0

我打開NSZombie,發現: - [UIButton setBackgroundImage:forState:]:發送到釋放實例的消息。當我將背景設置爲零時,我的按鈕是否被釋放了嗎? – Streetboy

3

如果您收到此異常,則意味着存在一個設計缺陷,您的代碼中存在一個錯誤。通過忽略異常來修補它並不是正確的做法。試着確定你爲什麼要把錯誤的信息發送給錯誤的對象。您的代碼將變得更加健壯和可維護。

另外,有時候當對象最初是正確的類型時,你會得到這個異常,但在被釋放的過程中已經到了一半。小心!

如果您仍想繞過異常,請閱讀Apple的文檔,其中介紹了在運行時將消息綁定到方法實現的多步驟過程。至少有兩個地方可以通過覆蓋NSObject的默認行爲來捕獲它。

相關問題