1

我有一个简单地由 UITextView 组成的应用程序。应用程序加载后,键盘会出现,并且 AccessoryView 会加载到键盘顶部以将其关闭。

在我决定在应用程序加载时我不想加载键盘之前,这非常有效。问题是每当我尝试编辑文本时,应用程序就会崩溃(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 语句,该应用程序可以工作......但我没有我的附件视图。有没有可能我在 InterfaceBuilder 中做错了什么?附件视图是我的 ViewController 中的一个单独视图。不过,它已正确连接(如果我从打开键盘的应用程序开始,它确实可以正常工作)。

任何想法将不胜感激。对不起,如果这很明显,但我仍然是初学者,这些事情会引起巨大的头痛。

4

1 回答 1

1

当您尝试向已释放的对象发送消息时,会发生 EXC_BAD_ACCESS 错误。如果您使用返回自动释放对象的便捷方法,请确保在设置 ivars 时调用 retain。

如果这不起作用,您可以考虑使用 NSZombieEnabled 来跟踪您将消息发送到已释放对象的位置。

我找到了一些你可以看看的指南:

http://www.fromconcentratesoftware.com/2007/08/09/nszombieenabled-for-the-debugger-adverse/

http://collat​​eraldamag3.blogspot.com/2009/11/iphone-tutorial-nszombieenabled-and.html

于 2011-03-11T22:40:34.320 回答