在一个班级完成操作后发送通知?

时间:2012-02-23 09:42:18

标签: iphone objective-c ios4 nsnotificationcenter

我有两个班,A班和B班。

A类有一个方法

 -(void)methodA:(id)sender
{

}

和B类有一个方法

-(void)methodB:(id)sender
{

}

现在我在方法A中正在进行一些工作,所以一旦完成,我想从methodA发送通知:到methodB:所以我可以在通知的基础上做一些操作。

那我怎么能这样做?任何人都可以指导我,因为我是obj-c的新手吗?

3 个答案:

答案 0 :(得分:1)

使用委托。来自wiki的简单代码:访问http://en.wikipedia.org/wiki/Delegation_pattern

  • 委托是一个对象,其对象(通常)被调用以处理或响应特定事件或操作。
  • 您必须“告诉”一个接受您希望成为委托的委托的对象。这是通过调用[object setDelegate:self];或者设置object.delegate = self;在你的代码中。
  • 充当委托的对象应该实现指定的委托方法。该对象通常在协议中定义方法,或者在NSObject上通过类别定义为默认/空方法,或两者​​。 (正式的协议方法可能更清晰,特别是现在Objective-C 2.0支持可选的协议方法。)
  • 当发生相关事件时,调用对象检查委托是否实现匹配方法(使用-respondsToSelector :)并调用该方法(如果有)。然后,代理人可以控制在将控制权返回给调用者之前做必要的响应。

答案 1 :(得分:0)

最简单的方法。

在B级-(id)initWithNibName: Bundle:中,您需要添加注册NSNotifications。

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
 {
      self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
      if (self) {

         // Custom initialization        
         [[NSNotificationCenter defaultCenter] addObserver:self 
                                                  selector:@selector(methodB:) 
                                                      name:@"methodAFinished" 
                                                    object:nil];

      }

      return self;

}

然后你需要在A类方法A:function。

中进行以下操作
 - (void)methodA:(id)sender {

       // Once you have completed your actions do the following

       [[NSNotificationCenter defaultCenter] postNotificationName:@"methodAFinished" object:nil];

 }

 - (void)methodB:(id)sender {

      // This will then be called in the other class, do whatever is needed in here.

 }

希望对你有用!

此外,请不要忘记,在B组的-(void)viewDidDisappear:animated功能中,您需要取消注册通知。

 - (void)viewDidDisappear:(BOOL)animated {

       [super viewDidDisappear:animated];
       [[NSNotificationCenter defaultCenter] removeObserver:self];

 }

那应该完成你所要求的。如果这不是您正在工作或在下面发表评论,请添加您的问题,我可以纠正我的答案。

答案 2 :(得分:0)

在B组注册观察员,如:

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(method:) name:@"notificationName" object:nil];

并发布A类通知,如:

[NSNotificationCenter defaultCenter] postNotificationName:@"notificationname" object:nil];

删除B类中的Observer,当它被解除分配时,如

[[NSNotificationCenter defaultCenter]removeObserver:self];