objective-c:从另一个控制器调用void函数

时间:2009-11-13 11:15:10

标签: objective-c cocoa

我有一个空白,比如特定控制器中的 - (void)doSomething 。 我可以通过 [self doSomething] 在此控制器中调用它,但我不知道如何从另一个.m文件中调用此void。

我想在 - (IBAction)操作中调用它:( id)发件人

我尝试过使用performSelector,但是我在日志中得到了一个'unconiezd selector send'。 我不知道我是否必须使用通知中心,或委托......

谢谢, 罗南。

3 个答案:

答案 0 :(得分:6)

您必须在第二个控制器中拥有第一个控制器的实例(您声明该功能的控制器)。

FirstViewController *firstController = [[FirstViewController alloc] init];
[firstController doSomething];

如果您的第一个控制器在其他地方被声明,并且您希望第二个控制器知道它,请在第二个控制器中输入FirstViewController类型的属性,并在需要时使用{{1}进行初始化实例。
有时候,如果您有多个控制器实例并且希望每个控制器实例都了解所有其他实例,那么这可能会非常复杂,因此我建议您将方法重写为类方法:

FirstViewController

所以你可以随时随地用

来调用它
+ (void) doSomething;

答案 1 :(得分:3)

如果你想要调用它的对象并且方法是公共的,那么你只需:

[object doSomething];

答案 2 :(得分:0)

问题是你有两个控制器不知道对方的存在。通知中心当然是处理这种情况的方法:优点是你不需要在两者之间建立正式的联系。

委托方法是另一种可能性,但是您必须通过Interface Builder中的IBOutlet建立连接,或者您必须让一个控制器创建另一个控制器并将其自身作为委托传递。这将它们更紧密地联系在一起,这可能适合也可能不适合。如果两个控制器之间的唯一连接是调用一个 - (void)方法,那么我将使用NSNotification。