2010-01-14 57 views

回答

0

您可以这样做的一种方法是在您的Foo类中创建一个引用其创建者的属性。你不应该保留此引用,以避免循环引用,但代码看起来像下面

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

在这种情况下,你的Foo类有被设置在控制器类进行新的Foo实例的属性叫老板。现在,从您的Foo类,你可以调用控制器方法是这样的:

所有的
[[self owner] callSomeControllerMethod]; 
+0

这真的很复杂。听起来好像他只需要首先阅读和学习更多关于Objective-C和Cocoa的知识。 – 2010-01-14 01:23:15

0

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

现在,虽然我怀疑您的应用程序在构建代码的方式上存在设计问题,但有些方法可以实现此目的。

当MainViewController.m实例化Foo时,你可以通过self并让Foo保留对它的引用吗?

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

+0

Foo实际上只是我创建的一个类,它是NSObject的一个子类。它不是模型或控制器。 – 2010-01-14 01:28:56

0

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

这听起来像你想要做的是其他人说什么是一种称为授权的模式。要了解委派如何工作,请查看所有使用它的内置类。任何拥有delegate属性和UIBlablaDelegate等协议的用户都在使用委托,您可以对类执行相同的操作。

相关问题