Cocoa touch - button-viewController连接的问题

时间:2009-10-13 15:38:19

标签: iphone cocoa cocoa-touch interface-builder

我对可可触摸很新,我坚持一个似乎没有谷歌解决方案的问题。我已经为我的应用程序添加了一个视图,这个视图上有一个按钮。按下按钮时,我希望回调执行操作。

我的问题是没有调用回调。我在Interface Builder中创建了视图,将touch-up-inside连接连接到我的Owner类(在本例中是一个viewController类),并选择了适当的回调。

我得到的错误如下: 2009-10-13 17:13:51.708 MyApp [7467:20b] *由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'* - [NSCFSet contactsButtonPressed:]:无法识别的选择器发送到实例0x4c27330'

据我了解,这表明contactsButtonPressed和MyViewController之间的连接是错误的。我不确定NSCFSet对象来自哪里。

有没有人有任何想法?

谢谢!

3 个答案:

答案 0 :(得分:2)

  

我得到的错误如下:

2009-10-13 17:13:51.708 MyApp[7467:20b] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSCFSet contactsButtonPressed:]: unrecognized selector sent to instance 0x4c27330'

你可能没有保留你的任何控制器对象应该接收该动作消息。在控制器的dealloc方法中添加NSLog调用;你可能会发现它在你期望它之前被解除了。

那么要问的问题是应该拥有该控制器。然后,确保所有所有者都保留它。

如果您将控制器放在属性中,请确保您实际使用该属性。一个常见的错误是编写myController = theController,它绕过属性并直接分配给实例变量,而不是self.myController = theController(属性访问语法,隐式访问器消息)或[self setMyController:theController](显式消息语法) )。

此外,如果您已为该属性实现了自己的访问器(尤其是setMyController:),请确保您的setter释放旧对象并保留新对象。当然,这是假设你有理由实现自己的访问者;通常,您应该只是@synthesize属性并让编译器为您编写访问器。

答案 1 :(得分:0)

在代码中的某处,您有一行如下所示:

[button addTarget:self action:@selector(contactsButtonPressed:)];

如果你的行如下所示,你还需要一个带有这个签名的方法:

- (void)contactsButtonPressed:(UIButton *)sender {
  ...
}

如果您查看错误,似乎您正在将消息发送到NSCFSet对象而不是控制器。我会检查你是否将委托设置为self或控制器。

答案 2 :(得分:-1)

我也是可可的新手,

您可能忘记将sender参数添加到contactsButtonPressed。

您的视图的类名为NSCFSet吗? 尝试粘贴一些代码。