我是使用UIKit的初學者。當我厭倦了iOS 7 SDK中的UIPickerView工作時,我遇到了一個難以解決的問題。與UIPickerView一起使用BAD_ACCESS&NSInvalidArgumentException
我們知道UIPickerView需要兩個資源才能完美工作:dataSource & delegate。所以我寫了一個名爲「KMPickerProtocols」的類。我通過它到UIPickerViewDataSource & UIPickerViewDelegate協議,然後我添加了一些額外的setter方法。
KMPickerProtocols被採用到dataSource的所有基本方法和委託Protocols +必要的可選方法設置每行的標題(pickerView:titleForRow:forComponent)。所有這些方法在沒有任何問題的情況下完成任務(在正常情況下)。
最後,我用這段代碼手動設定UIPickerView(名爲_accountPicker)的代表且dataSource屬性:
NSArray *delegateAgent = [[KMTwitterDelegate new] run ];
_accountPicker.dataSource = [delegateAgent objectAtIndex:0];
_accountPicker.delegate = [delegateAgent objectAtIndex:1] ;
(運行方法被設計爲設置一些特性,包括每行的高度和。 ..)
現在,當我運行我的應用程序時,它將以UIPickerView的形式顯示存儲在系統(帳戶框架)中的我的twitterAccounts。但存在這樣的問題:當我滾動選擇器視圖或點擊任何行,該程序將崩潰,我在這行代碼得到BAD_ACCESS(代碼= 2,地址=爲0x1):
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([KMAppDelegate class]));
}
有時候我會在上面得到SIGABRT信號。在這些情況下,日誌說:
終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是: ' - [NSMallocBlock pickerView:titleForRow:forComponent:]:無法識別的選擇發送到實例0x8c75ad0'
如果你能幫我解決這個問題,我將不勝感激。我真的不知道錯誤在哪裏。但我想這個屏幕快照將有助於發現:
在上面的截圖中的問題是,UIPicker稱爲「pickerView:forComponent:titleForRow」爲0排法,三次而不是一次。我只是不知道這是因爲myFault還是因爲UIPicker的典型行爲。
謝謝。我檢查過它,這正是我的預期。並且在第一次運行應用程序時,沒有問題,但是當您使用選擇器時,會發生這些不好的事情。 – kaymas