从委托方法内部的选择器触发两次

时间:2013-03-13 16:59:33

标签: iphone objective-c static-libraries

在我的静态lib的委托方法被触发后发生了一个奇怪的问题。首先,该项目有一个子项目,它是一个静态库(xcode 4.6 ios 6.x)。静态lib根据事件触发自己的委托。 该应用程序实现静态lib的委托方法。在实现中,我使用以下内容来访问UI元素并触发其他事件。 Didgetnotified是lib的委托方法。

- (void)didGetNotified 
  {
   dispatch_async(dispatch_get_main_queue(), ^{
     [self parseData];

     NSNotificationCenter *notifyCenter = [NSNotificationCenter defaultCenter];

     [notifyCenter addObserver:self
                      selector:@selector(updateUI)
                          name:@"updateUIN"
                        object:nil];
   });
  }

  -(void) parseData {

   //parse data and its ready now and send notification

    [[NSNotificationCenter defaultCenter] postNotificationName:@"updateUIN" object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"updateUIN" object:nil];
    }

    -(void) updateUI {
     //this method gets fired twice mostly
     }

问题是updateUI被调用了两次。我看不出我做错了什么。这是线程的东西吗?静态lib委托不在主线程上。但我在主线程上使用调度。有人可以解释一下吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

经过深入调试后,我发现添加oberserver实际上发生了两次。解决方案是在添加它之前删除oberserver以防WIFI断开连接并且日期流通过3G并且那个案例我的代表被解雇了两次并注册了oberver 2次。

 [[NSNotificationCenter defaultCenter] removeObserver:self name:@"updateUIN" object:self];

 NSNotificationCenter *notifyCenter = [NSNotificationCenter defaultCenter];
 [notifyCenter addObserver:self
                  selector:@selector(updateUI)
                      name:@"updateUIN"
                    object:self];