我正在使用KVO
来观察数组的更改,数组将在tableViewController
的{{1}}中的单元格中更改。我已将单元格中的数组分配给公共tableView
属性,供其他视图控制器使用,它们的地址相同。
虽然我需要观察来自NSArray
的{{1}}属性的值更改。我能够观察到tableViewController
和其他类型的其他属性,并且我已经实现了相关的数组访问器,用于在自定义单元类中添加数组中的删除对象。 但无法获取有关数组更改的通知。
我使用otherViewController
作为选项。我想问题是我把数组放在单元格导致NSString
无法到达那里?
SDK版本:iOS 7.1
以下是此部分的视图层次结构:
NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
为了更清楚,我在这里添加我的实现
使用KVO
的{{1}}方法:
tableViewController
+-----------------------------+
| tableView |
|+----------+ |
|| cell | |
||+--------+| public |
||| || array |
||| array || property |
||| +----+ || assign +----+ | (Observer)
||| | |-++--------| |<--+--[ otherViewController ]
||| +----+ || to +----+ |
||+--------+| |
|| | |
|+----------+ |
+-----------------------------+
在otherViewController
的{{1}}:
- viewDidLoad
答案 0 :(得分:1)
我猜你会观察keypath&#34; array&#34;像
这样的细胞 [cell addObserver:self forKeyPath:@"array" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];
自动更改通知仅触发mutableArrayValueForKey:proxy。
如果要在此实现上触发KVO,则应按如下方式实现数组访问器:
- (void)addArrayObject:(id)object {
NSMutableArray *notifiableArray = [self mutableArrayForKeyPath:@"array"];
[notifiableArray addObject:object];
}
并记住在重复使用单元格时删除旧的观察者。
希望这可以帮到你。
答案 1 :(得分:0)
您可以手动发送观察密钥的通知
[self willChangeValueForKey:@"your key path"];
[array addObject:object];`
[self didChangeValueForKey:@"your key path"];