iPhone - NSObject获取对viewController的引用

时间:2010-12-23 03:02:03

标签: iphone

我有NSObject类的这个对象。此对象显示在viewController管理的视图上。如何从对象的类中获取对viewController的引用?

2 个答案:

答案 0 :(得分:2)

您知道没有“myViewController”属性。让任何对象访问其他对象的最简单方法是通过委托关系。

为委托定义协议 - 通常在要访问将成为委托的对象的模块中,即视图控制器

@protocol MyViewControllerDelegate

- (void)someActionTheViewControllerWillDo;

#end

在实现它的类中宣传委托支持

@interface MyViewController : UIViewController <MyViewControllerDelegate>
...
@end

在视图控制器中实现您定义为协议一部分的功能:

@implementation MyViewController

etc. etc.

#pragma mark -
#pragma mark MyViewControllerDelegateMethods

- (void)someActionTheViewControllerWillDo
{
  NSLog(@"I'm being called from an object that has me as a delegate");
}

etc. etc.

@end

在调用对象中创建一个变量来存储委托对象

@interface MyObject : NSObject
{

etc. etc.

  id<MyViewControllerDelegate> myDelegate;

etc. etc. 
}

初始化该对象

MyObject* myObject = [[MyObject alloc] initWithblahblah...
myObject.myDelegate = self
/* assuming myObject is being created in the view controller... */

在myObject中 - 使用定义的协议访问委托对象中的方法!

[myDelegate someActionTheViewControllerWillDo];

答案 1 :(得分:0)

用户委托模式:

0。声明协议:

@protocol My_Object_Delegate;

1.给你的NSObject一个实例变量:

id <My_Object_Delegate> delegate;

2。将此委托设置为监督它的视图控制器:

myObject.delegate = myViewController;

3。当你的NSObject完成了。让它让代表执行某项任务:

[myObject.delegate performaCertainTask:self];