我有一個應用程序,它只是由一個UITextView組成。一旦應用程序加載,鍵盤就會出現,並在鍵盤頂部加載一個AccessoryView以解除它。加載inputAccessoryView的問題
這工作出色,直到我決定我不想在應用程序加載時加載鍵盤。問題是,每當我嘗試編輯文本時,應用程序崩潰(EXC_BAD_ACCESS)。我不明白爲什麼會這樣。這裏是我的代碼 - 該通道被標記出故障的應用程序:
- (void)viewWillAppear:(BOOL)animated {
// Make the keyboard appear when the application launches.
[super viewWillAppear:animated];
// [textView becomeFirstResponder];}
然後:
- (BOOL)textViewShouldBeginEditing:(UITextView *)aTextView {
// this crashes app if no keyboard is loaded in viewdidload:
if (textView.inputAccessoryView == nil) {
textView.inputAccessoryView = accessoryView;
self.accessoryView = nil;
}
return YES;
}
如果我註釋掉最後if語句,應用程序的工作......但我不沒有我的accessoryView。有可能我在InterfaceBuilder中做了錯誤的事情嗎? accessoryView是我的ViewController中的一個單獨的視圖。雖然它連接正確(如果我用帶鍵盤的應用程序開始,它確實工作得很好)。
任何想法將非常感激。對不起,如果這是顯而易見的,但我仍然是一個初學者,這些事情造成巨大的麻煩。
謝謝,真的很有幫助!那麼,事實證明,我從Apple的樣品複製了AccessoryView的代碼,並且將附件視圖聲明爲'@property(nonatomic,assign)IBOutlet UIView * accessoryView;'我現在有'@property(nonatomic,retain)IBOutlet UIView * accessoryView;'和應用程序不會崩潰了。在這種情況下,保留和分配究竟有什麼區別? Apple加載了一個accessoryView筆尖,而我的accessoryView是我的ViewController筆尖的一個視圖 - 這是原因嗎? –
@ n.evermind賦值和保留屬性之間的區別在合成的setter方法中。對於分配,設置者只是將傳入的值賦予伊娃,保留,設置者釋放舊值,將伊娃設置爲新值並保留呼叫。有關更多信息,可以閱讀[聲明的屬性](http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/ TP30001163-CH17-SW1)來自Apple的文檔 –