I can't figure out how to simple observe change in one object property, that's not working as expected.

Here my code:

- (void)observeBasketValueChane:(MyObject*)theObject{
    [theObject addObserver: self
                  forKeyPath: @"value"
                     options: NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
                     context: NULL];

// not working
    theObject.value = 5;

// will work
    [theObject willChangeValueForKey:@"value"];
    [theObject setValue: [NSNumber numberWithInt: 3] forKey:@"value"];
    [theObject didChangeValueForKey:@"value"];
}

The Apple doc said KVO on dot syntax is automatically done. My value property is synthesized on MyObject but that is not working as expected. Note that Myobject is a coreData object. But i don't see why it will change something since i have synthesized the method. Thank you for your help.

* edit

As Quellish said, my property was defined as

@property (nonatomic) int32_t value;

And that will not works.

The correct way is

@property (nonatomic) NSNumber* value;
有帮助吗?

解决方案

This line:

theObject.value = 5;

Will not work, because you are setting a property that represents an NSNumber with an integer. Try this instead to see if it fixes your issue:

theObject.value = [NSNumber numberWithInteger:5];

You seem to have some other issues with how you are implementing KVO, but it looks like the above will fix the problem you are describing in this question.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top