2010-07-12 42 views
0

我试图围绕NSNotification包裹我的头,但似乎无法让它工作。认为我误解了如何注册通知。注册一个NSNotification的bool

我有一个bool作为我的连接管理器类中的一个属性。在初始化我有几台服务器进行身份验证和检查,如果我能访问外部URL(应用程序将主要在公司内部使用和外部连接不总是可能的)

的BOOL属性将YES改为NO如果它无法访问连接,并且可以随时响应,我认为最好在它发生更改时注册一个通知。该属性称为externalConnectionAvailable

[ConnectionManager addObserver:self forKeyPath:@"externalConnectionAvailable" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:NULL]; 

,并有方法:

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    NSLog(@"observer called"); 
} 

但是,这不会被调用。我在做一些完全错误的事情吗?

感谢

+0

是ConnectionManager的一个实例或类?我们通常用小写字母开始变量名称。请添加实际更改值的代码,如果不合成,请添加值吸取器和设置器。 – tonklon 2010-07-12 07:08:29

+0

ConnectionManager是其中的类,不知道为什么我用它,想不出其他什么。实际上应该是自我,如果有什么 – Rudiger 2010-07-12 07:44:27

回答

0

这是一件非常愚蠢的。我只是改变属性通过调用externalConnectionAvailable不self.externalConnectionAvailable

0

在此声明:

[ConnectionManager addObserver:self forKeyPath:@"externalConnectionAvailable" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:NULL]; 

假设你继“可可路”,用通常的命名方案类和对象的情况下,你似乎是想添加整个类的观察者,而不是对象实例。

你应该有类似

ConnectionManager *connectionManagerInstance = // initialize manager... 
... 
[connectionManagerInstance addObserver:self forKeyPath:@"externalConnectionAvailable" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:NULL]; 
+0

这是否有一个很好的理由被拒绝? – 2010-07-12 05:39:11

+0

不是我,ConnectionManager实际上是创建它的类,所以技术上应该是自我的,如果有的话,但我怀疑它会起作用。对不起,非常累 – Rudiger 2010-07-12 07:49:11

+0

那么你是说我只能在对象实例上有一个KVO?为什么不是一个班级内的财产? – Rudiger 2010-07-12 23:21:29