加载inputAccessoryView的问题

时间:2011-03-11 22:02:54

标签: iphone objective-c cocoa-touch uitextview accessoryview

我有一个只包含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语句,该应用程序可以运行......但我没有我的accessoryView。可能我在InterfaceBuilder中做错了吗? accessoryView是我的ViewController中的一个单独视图。虽然它已正确连接(如果我从带键盘的应用程序开始,它确实可以正常工作)。

非常感谢任何想法。对不起,如果这是显而易见的,但我仍然是初学者,这些事情会引起巨大的麻烦。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

http://collateraldamag3.blogspot.com/2009/11/iphone-tutorial-nszombieenabled-and.html