1

触发我的静态库的委托方法后会出现一个奇怪的问题。首先,该项目有一个子项目,它是一个静态库(xcode 4.6 ios 6.x)。静态库根据事件触发自己的委托。App 实现了静态库的委托方法。在实现中,我使用以下内容访问 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被调用了两次。我看不出我做错了什么。与线程有关吗?静态库委托不在主线程上。但我在主线程上使用调度。有人可以解释一下吗?预先感谢。

4

1 回答 1

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];
于 2013-03-14T09:14:42.990 回答