观察UITableViewCell中NSArray的变化

时间:2014-05-29 08:47:10

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

我正在使用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

2 个答案:

答案 0 :(得分:1)

我猜你会观察keypath&#34; array&#34;像

这样的细胞
    [cell addObserver:self forKeyPath:@"array" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];

取决于https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOCompliance.html

自动更改通知仅触发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"];