实现具有问题的KeyValue观察

时间:2017-01-27 21:03:22

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

我正在尝试实现Key Value Observation模式,并且在大多数过程中都运行良好但我的newValue和oldValue是相同的,即使值已从旧值更改为新值。这是我到目前为止所实现的示例代码。如果有人能告诉我哪里出错了,那就太好了。

overflow:hidden

添加观察者

@property (strong, nonatomic) NSString* selectedRow; 

值将更新的方法

 [self addObserver:self
           forKeyPath:@"selectedRow"
              options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew
              context:NULL];

观察者呼叫

-(void) methodToChangeValue {
self.selectedRow = [self.tableView indexPathForCell:[selectedCell]];
//Above line is dummy that will get the row for indexPath and set the selected row, I wanted to pass that row to selectRow key

}

**即使我从方法中更改了值,旧值和新值也是相同的。

由于

1 个答案:

答案 0 :(得分:1)

你的问题是这些问题:

_selectedRow = [self.tableView indexPathForCell:[selectedCell]];
[self setValue:_selectedRow forKey:@"selectedRow"];

你为什么要这样做?为什么不以正确的方式做到:

self.selectedRow = [self.tableView indexPathForCell:[selectedCell]];

如果你这样做,KVO将正常工作。正如您现在所做的那样,您直接设置实例变量(绕过KVO),然后使用KVC将属性设置为与其自己的实例变量相同的值。由于您将属性设置为其自己的值,因此您的观察者会将旧值和新值视为相同。

您还使用了selectedRow的错误数据类型。它必须是NSIndexPath而不是NSString。获得旧值和新值也是如此。使用NSIndexPath