提问人:vc7 提问时间:5/29/2014 最后编辑:vc7 更新时间:5/29/2014 访问量:780
观察 UITableViewCell 中 NSArray 的更改
Observing changes of an NSArray in a UITableViewCell
问:
我用来观察数组的变化,数组将在位于 的单元格中更改。我已将单元格中的数组分配给公共属性供其他视图控制器使用,它们的地址是相同的。KVO
tableViewController
tableView
NSArray
虽然我需要观察 .我能够观察其他属性和其他类型,并且我已经实现了相关的数组访问器,用于在自定义单元格类的数组中添加删除对象。 但无法获得数组更改的通知。tableViewController
otherViewController
NSString
我用于选项。我想问题是我把数组放在单元格中导致无法到达那里?NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
KVO
SDK版本:iOS 7.1
这是我对这部分的看法层次结构:
tableViewController
+-----------------------------+
| tableView |
|+----------+ |
|| cell | |
||+--------+| public |
||| || array |
||| array || property |
||| +----+ || assign +----+ | (Observer)
||| | |-++--------| |<--+--[ otherViewController ]
||| +----+ || to +----+ |
||+--------+| |
|| | |
|+----------+ |
+-----------------------------+
更新
为了更清楚,我在这里添加我的实现
在 的方法中:otherViewController
- viewDidLoad
[self addObserver:self forKeyPath:@"self.tableViewController.theArray" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:nil];
在 :tableViewController
tableView:cellForRowAtIndexPath:
self.theArray = cell.theArray
答:
1赞
Ken Kuan
5/29/2014
#1
我猜你观察到单元格的键路径“数组”,比如
[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];
}
并记得在重复使用单元时删除旧的观察者。
希望这能帮到你。
评论
0赞
vc7
5/29/2014
这值得一试!!我会在有:)的东西后更新状态
0赞
wootage
5/29/2014
#2
您可以手动发送观察到的密钥的通知
[self willChangeValueForKey:@"your key path"];
[array addObject:object];`
[self didChangeValueForKey:@"your key path"];
评论
But what I didn’t know was that direct ivar manipulation doesn’t trigger KVO