2011-12-15 43 views
10

這是我如何展示UIAlertView中和委託clickedButtonAtIndex -ARC和UIAlertView中:無法識別的選擇發送到實例

UIAlertView *alert = 
    [[UIAlertView alloc] initWithTitle: @"title" 
           message: @"message" 
           delegate: self 
        cancelButtonTitle: @"Cancel" 
        otherButtonTitles: @"Continue", nil]; 

    [alert show]; 


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    //something 
} 

這段代碼工作完全沒有ARC。但隨着ARC它拋出這個錯誤 - 終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因是:「 - [__ NSCFType alertView:clickedButtonAtIndex:]:無法識別的選擇發送到實例0x859d790」

爲什麼委託是投擲任何想法這個錯誤?

+1

委託本身正在被釋放。你如何創建和管理該對象? –

+1

@FirozeLafeer - 調用這段代碼的對象,即自我由ARC發佈。我把它變成了一個財產,現在它似乎工作。謝謝:) – arank

回答

13

您的代表已被解除分配。仔細檢查你的代碼,確保顯示警告並將自己設置爲代理的對象以某種方式被保留(即:你的應用中的某些內容對它有強烈的參考)。

delegate: self cancelButtonTitle: @"No" otherButtonTitles: @"Yes",nil]; // don't forget the nil at the end here! (or it will crash first run)

有趣的是它崩潰僅在第一次運行該應用程序:如果你忘記了在結束零的最後一個otherButtonTitles參數後

+0

這確實是我的問題,在這篇文章後,我意識到是因爲我在故事板中複製了一個按鈕,它仍然有一個附加的方法來釋放viewController。因此,我的另一個方法,即WAS被調用並正確執行,無法執行clickClickButtonAtIndex中的任務。希望這可以幫助別人,感謝您的解決方案! –

+0

另外,爲UIAlertView搜索CocoaPods,你會發現一些基於塊的添加,這將簡化使用UIAlertView,並且不需要在視圖控制器中使用UIAlertViewDelegate。 –

0

類似也有可能發生。之後,它運行得很好。

相關問題