Добавить Observer в переменную BOOL
Можно ли добавить наблюдателей к простым переменным, таким как BOOL или NSIntegers, и посмотреть, когда они изменятся?
Спасибо!
4 ответа
Вы наблюдаете, что ключи будут уведомлены, когда их значение изменится. Тип данных может быть любым. Для всего, что определено как свойство Objective-C (с @property в файле.h), все готово, поэтому, если вы хотите наблюдать свойство BOOL, которое вы добавляете в контроллер представления, вы делаете это следующим образом:
в myViewController.h:
@interface myViewController : UIViewController {
BOOL mySetting;
}
@property (nonatomic) BOOL mySetting;
в myViewController.m
@implementation myViewController
@synthesize mySetting;
// rest of myViewController implementation
@end
в другом ViewController.m:
// assumes myVC is a defined property of otherViewController
- (void)presentMyViewController {
self.myVC = [[[MyViewController alloc] init] autorelease];
// note: remove self as an observer before myVC is released/dealloced
[self.myVC addObserver:self forKeyPath:@"mySetting" options:0 context:nil];
// present myVC modally or with navigation controller here
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (object == self.myVC && [keyPath isEqualToString:@"mySetting"]) {
NSLog(@"OtherVC: The value of self.myVC.mySetting has changed");
}
}
Я полагаю, что вы имели в виду: как получить значение INT или BOOL из словаря 'change', если свойство изменилось.
Вы можете просто сделать это так:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if ([keyPath isEqualToString:@"mySetting"])
{
NSNumber *mySettingNum = [change objectForKey:NSKeyValueChangeNewKey];
BOOL newSetting = [mySettingNum boolValue];
NSLog(@"mySetting is %s", (newSetting ? "true" : "false"));
return;
}
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
Да; единственное требование состоит в том, чтобы объект, в котором встречаются эти переменные, соответствовал значению ключа для этих свойств.
Если они являются свойствами объектов, тогда да.
Если они не являются собственностью, то нет.