NSObject上的KVO由于某种原因无法工作

时间:2016-05-02 18:52:37

标签: ios objective-c key-value-observing kvocontroller

我正在尝试在我的应用中实施KVOController。我设法让它在自定义UISliders上运行,但我似乎无法使用自定义NSObject。这是对象:

Restaurant.h

#import <UIKit/UIKit.h>

@interface Restaurant : NSObject

@property (nonatomic, copy, readonly) NSString *name, *tagline;
@property (nonatomic, copy, readonly) UIColor *uicolor;

- (id)initWithName:(NSString *)main;
- (void)setName:(NSString *)title;
- (void)changeColor:(UIColor)color;

@end

Restaurant.m

@implementation Restaurant

- (id)initWithName:(NSString *)main {
    self = [super init];
    if (self)
    {
        _name = main;

    }
    return self;
}

- (void)setName:(NSString *)title {
    _name = title;
}

- (void)changeColor:(UIColor)color {
    _uicolor = color;
}

@end

所以,我在我的代码中引入了这个监听器:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.restaurant = [[Restaurant alloc] initWithName:@"test"];
    [self.restaurant changeColor:[UIColor blueColor]];

    FBKVOController *KVOController = [FBKVOController controllerWithObserver:self];
    self.KVOController = KVOController;

    [self.KVOController observe:self.restaurant keyPath:@"name" options:NSKeyValueObservingOptionInitial|NSKeyValueObservingOptionNew block:^(id observer, id object, NSDictionary *change) {
        NSLog(@"Restaurant changed!");
    }];
}

- (void)someOtherMethod:(id)sender {
    [self.restaurant setName:@"Another test"];
    [self.restaurant changeColor:[UIColor redColor]];
}

但是,这不会记录任何内容,也不会将keyPath更改为@"uicolor"。我做错了什么?

0 个答案:

没有答案