[英]calling function in a controller from a class (objective-c)
我正在用Objective-C编写一个iPhone应用程序。 我创建了一个类(Foo.m),希望能够在实例化该控制器的控制器(MainViewController.m)中调用该方法。 我该怎么做呢? 请提供一个例子。 谢谢!
一种实现方法是在Foo类中创建一个引用其创建者的属性。 您不应保留此引用以避免循环引用,但是代码可能类似于以下内容
-(void)yourControllerClassMethod{
Foo* f = [[Foo alloc] init];
[f setOwnder:self];
}
在这种情况下,您的Foo类具有一个名为owner的属性,该属性在Controller类创建新的Foo实例时设置。 现在,从Foo类中,您可以像下面这样调用控制器方法:
[[self owner] callSomeControllerMethod];
首先,我建议您阅读一些设计模式书籍。 如果您的Foo
类是Model,那么为什么您的模型会与Controller通信? 如果Foo
是View,那么为什么它会与您的控制器通信?
现在,尽管我怀疑您的应用在构造代码的方式上存在设计问题,但仍有一些方法可以做到这一点。
当MainViewController.m实例化Foo时,您可以传递self
并让Foo保留对它的引用吗?
另外,您应该在Foo中创建一个@protocol
,当MainViewController创建Foo时,让MainViewController实现Foo的delegate
。
您可能应该查看Erik M. Buck和Donald A. Yacktman撰写的《 可可设计模式》 。 这是一本非常出色的书,即使您对一般的设计模式还不熟悉,也可以理解。
听起来您想要做的就是其他人说的话,这是一种称为授权的模式。 若要查看委派的工作原理,请查看所有使用委派的内置类。 任何具有delegate
属性和协议(如UIBlablaDelegate
都在使用委托,并且您可以对类进行相同的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.