首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于自我的addObserver

关于自我的addObserver
EN

Stack Overflow用户
提问于 2012-10-04 13:16:14
回答 1查看 5.6K关注 0票数 4

一个很简单的问题,但我似乎找不到答案。(开发iOS 5+应用程序)。

在我的AppDelegate中,我有一个属性,让我们称之为@property (non atomic) BOOL aFlag;。如果值发生变化,我希望通知我的AppDelegate。下面是我尝试过的(在AppDelegate.m中发生的一切),这与我将两个不同的对象与观察者“链接”时一样:

代码语言:javascript
复制
-(BOOL)application:(UIApplication*)application 
       didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
    // Some stuff

    _aFlag = YES;
    [self addObserver:self 
           forKeyPath:@"aFlag" 
              options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) 
              context:nil];

    // Some other stuff
}


-(void)observeValueForKeyPath:(NSString*)keyPath 
                     ofObject:(id)object 
                       change:(NSDictionary*)change 
                      context:(void*)context {
    if ([keyPath isEqual:@"aFlag"]) {
        // Do something
    } else {
        // Do nothing
    }
}

但是observeValueForKeyPath:没有被调用。

我哪里错了?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-04 16:50:36

你应该实现你自己的设置。你知道,在那个策划人身上,波蒂已经变了。

这样就更优化了。比对自己做KVO要好得多,也便宜得多。

你的解决方案有效,技术上你可以自己做KVO。

但是,想象一下,如果您从类内部开始使用NSNotificationCenter来触发类中的方法?能办到吗?是。应该是吧?可能不会。您可能有这样一个场景,它是可以的,但在一个干净的面向对象的解决方案中却不是这样。您应该为此向self发送消息。

这里也是一样的。执行如下:

代码语言:javascript
复制
- (void)setAFlag:(BOOL)flag;

例如:

代码语言:javascript
复制
- (void)setAFlag:(BOOL)flag{
    BOOL valueChanged = NO;    

    if(_aFlag != flag){
       valueChanged = YES;
    }
    _aFlag = flag;

    if(valueChanged)
        [self doSomethingWithTheNewValueOfFlag];
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12728141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档