2010-07-12 2 views
0

Я пытаюсь обернуть голову вокруг NSNotification, но, похоже, не может заставить ее работать. Думаю, я не понимаю, как зарегистрироваться для уведомления.Регистрация bool для NSNotification

У меня есть 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 экземпляром или классом? Обычно мы начинаем имена переменных строчной буквой. Добавьте код, который фактически изменяет значение, а также значение getter и setter, если они не синтезированы. – tonklon

+0

ConnectionManager - это класс, в котором он, не уверенный, почему я его использовал, не мог придумать ничего. На самом деле должен быть сам, если что-нибудь – Rudiger

ответ

0

Это было что-то очень глупо. Я просто менял свойство, вызывая externalConnectionAvailable не self.externalConnectionAvailable

0

В этом заявлении:

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

Предполагая, что вы следуете «Cocoa Way» и используя обычную схему именования классов и экземпляры объектов, то, по всей видимости, пытается добавить наблюдатель для всего класса, в отличие от экземпляра объекта.

Вы должны иметь что-то вроде

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

Есть ли веская причина, по которой это было отклонено? –

+0

Я не был, ConnectionManager на самом деле является классом, создающим его, поэтому технически это должно быть само собой, если я что-то, но я сомневаюсь, что он сработает. Извините, очень устал – Rudiger

+0

Итак, вы говорите, что я могу иметь только KVO на экземпляре объекта? Почему не свойство внутри класса? – Rudiger

 Смежные вопросы

  • Нет связанных вопросов^_^