从类中调用控制器中的函数(objective-c)

时间:2010-01-14 01:16:45

标签: iphone objective-c

我正在使用Objective-C编写iPhone应用程序。我创建了一个类(Foo.m),我希望能够在控制器中调用一个方法(MainViewController.m)来实例化它。我该怎么做呢?请举个例子。谢谢!

3 个答案:

答案 0 :(得分:0)

您可以这样做的一种方法是在Foo类中创建一个引用其创建者的属性。您不应保留此引用以避免循环引用,但代码可能如下所示

-(void)yourControllerClassMethod{
    Foo* f = [[Foo alloc] init];
    [f setOwnder:self];
}

在这种情况下,您的Foo类有一个名为owner的属性,该属性在Controller类创建新的Foo实例时设置。现在从您的Foo类中,您可以调用这样的控制器方法:

[[self owner] callSomeControllerMethod];

答案 1 :(得分:0)

首先,我建议阅读一些设计模式书籍。如果您的Foo类是模型,那么为什么您的模型会与Controller通信?如果Foo是一个视图,那为什么它会与您的控制器通信?

现在,虽然我怀疑您的应用程序在构建代码时存在设计问题,但仍有办法实现此目的。

当MainViewController.m实例化Foo时,你能否传入self并让Foo保留对它的引用?

或者,你应该在Foo中创建一个@protocol,当MainViewController创建Foo时,让MainViewController实现Foo的delegate

答案 2 :(得分:0)

你应该查看Erik M. Buck和Donald A. Yacktman的Cocoa Design Patterns。这是一本非常出色的书,即使你不熟悉一般的设计模式,也很容易理解。

听起来你想要做的就是其他人说的是一种叫做代表团的模式。要查看委派如何工作,请查看使用它的所有内置类。任何具有delegate属性和类似UIBlablaDelegate的协议的东西都在使用委托,你可以对你的类做同样的事情。