【发布时间】:2014-05-29 08:47:09
【问题描述】:
我正在使用KVO 观察数组的变化,数组将在tableViewController 的tableView 中的单元格中更改。我已将单元格中的数组分配给公共NSArray 属性以供其他视图控制器使用,它们的地址相同。
虽然我需要从otherViewController 观察tableViewController 的属性值变化。我能够观察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
【问题讨论】:
-
这可能是你如何访问数组中的项目
But what I didn’t know was that direct ivar manipulation doesn’t trigger KVO的一些问题。查看这篇文章,希望它对你有帮助qualitycoding.org/dot-notation-wins -
对于 KVO 相关的,我在这里使用点符号。我不确定使用 ivar 是否会触发 KVO,我可以使用它:)
-
你的更新真的很奇怪。由于 tableview 有很多单元格,这将导致您在单元格中观察到随机数组。
标签: ios objective-c uitableview key-value-observing