一个很简单的问题,但我似乎找不到答案。(开发iOS 5+应用程序)。
在我的AppDelegate中,我有一个属性,让我们称之为@property (non atomic) BOOL aFlag;。如果值发生变化,我希望通知我的AppDelegate。下面是我尝试过的(在AppDelegate.m中发生的一切),这与我将两个不同的对象与观察者“链接”时一样:
-(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:没有被调用。
我哪里错了?谢谢。
发布于 2012-10-04 16:50:36
你应该实现你自己的设置。你知道,在那个策划人身上,波蒂已经变了。
这样就更优化了。比对自己做KVO要好得多,也便宜得多。
你的解决方案有效,技术上你可以自己做KVO。
但是,想象一下,如果您从类内部开始使用NSNotificationCenter来触发类中的方法?能办到吗?是。应该是吧?可能不会。您可能有这样一个场景,它是可以的,但在一个干净的面向对象的解决方案中却不是这样。您应该为此向self发送消息。
这里也是一样的。执行如下:
- (void)setAFlag:(BOOL)flag;例如:
- (void)setAFlag:(BOOL)flag{
BOOL valueChanged = NO;
if(_aFlag != flag){
valueChanged = YES;
}
_aFlag = flag;
if(valueChanged)
[self doSomethingWithTheNewValueOfFlag];
}https://stackoverflow.com/questions/12728141
复制相似问题