【问题标题】:Using a NSNotification as an if argument使用 NSNotification 作为 if 参数
【发布时间】:2014-03-03 13:10:20
【问题描述】:

只是想知道是否有办法使用 NSNotification 观察者作为 if 语句参数,或者在选择器部分中有一段代码

EG

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector( { SOME NEW CODE GOES HERE! ) name:@"addressTypeChanged" object:nil];

OR

if ([[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(self) name:@"addressTypeChanged" object:nil]) {

//some code//
}

【问题讨论】:

  • 您可以将已复制到堆上的块作为目标的参数传递(并使用-invoke 选择器),仅此而已。

标签: ios iphone objective-c


【解决方案1】:

到你的第一行:不,没有办法在@selector() 中放置一个块。可能值得看看 @selector 是什么以及它是如何工作的。 Here's one particular question 这可能会让你走上正轨。

到你的第二行:addObserver:selector:... 方法有一个void 返回类型,在if 语句中总是等同于NO。

您可能正在寻找的是基于 NSNotificationCenter 块的 API:

- (id)addObserverForName:(NSString *)name 
                  object:(id)obj 
                   queue:(NSOperationQueue *)queue 
              usingBlock:(void (^)(NSNotification *))block

收到通知时会调用block参数。

【讨论】:

    【解决方案2】:
    [[NSNotificationCenter defaultCenter] addObserverForName:@"addressTypeChanged"
                                                      object:object
                                                       queue:nil
                                                  usingBlock:^(NSNotification *notification){
                                                      /*
                                                        here you can call another methos
                                                       */
                                                  }];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多