user4992124
user4992124

Reputation: 1594

KVO on NSObject not working for some reason

I'm trying to implement KVOController in my app. I managed to get it working on custom UISliders, but I can't seem to get it working on a custom NSObject. This is the object:

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

So, I introduced this listener into my code:

- (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]];
}

However, this isn't logging anything for this, nor when I change the keyPath to @"uicolor". What am I doing wrong?

Upvotes: 0

Views: 274

Answers (0)

Related Questions