【问题标题】:Using KVO to reload data in UITableView使用 KVO 在 UITableView 中重新加载数据
【发布时间】:2011-12-07 05:31:50
【问题描述】:

我最近一直在扩展我的视野,并试图开始在我的编程中更多地使用 KVO。

我的 iPhone 应用程序中有一个视图控制器,它充当 UITableView 的数据源和委托。我还有一个单例模型控制器,它协调使用从网络获取的数据填充我的模型。

在我的视图控制器中,我请求模型的控制器从 Web 加载新数据。然后我可以观察单例的“数据集”属性,并在将项目添加到集合中或从集合中删除时接收 KVO 通知。

现在,我的表格视图中的每个单元格都有一个指示符,用于指定该单元格中的内容是否已被阅读(如邮件中的蓝色“未读”点)。 Like mail, when a row is selected, I'll display details about that row.在详细视图的 viewDidLoad 中,我将对象的“读取”属性设置为“是”。我希望原始视图控制器能够观察数据集中每个对象的“读取”属性,以便可以根据需要自动调用 [tableView reloadData] 并重新绘制没有蓝点的单元格。

在研究这个时,我发现了以下链接:http://homepage.mac.com/mmalc/CocoaExamples/controllers.html#observingACollection

据此,看来我将执行以下操作:
1) 成为数组的观察者
2) 每当我收到有关数组更改的通知时,我都会添加(或删除)自己作为我感兴趣的各个属性的观察者。
3)当我收到我感兴趣的属性更改的通知时,我可以调用 [tableView reloadData]

我目前正在尝试实施这种方法。有这方面经验的人可以就这种方法提供一些建议吗?如果这是处理这种情况的最佳方法?

如果这是正确的方法,是否有人愿意分享他们在集合更改时为集合中的对象添加/删除观察者的实现?

谢谢!

【问题讨论】:

  • 听起来你在正确的轨道上。要理解的关键是观察一个集合与观察该集合中的所有项目不同,听起来你已经弄清楚了。在对数组的观察中,你需要开始观察已经添加到数组中的东西,停止观察已经被移除的东西。这就是为什么观察收藏品和内容很重要的原因。

标签: iphone ios uitableview key-value-observing


【解决方案1】:

我认为您可以通过使用 Core Data 和 Fetched Results Controller 来完成这项任务。 我相信这可以为您节省很多工作。 这是一个很好的指南:Ray Wenderlich Core Data Tutorial, getting started

【讨论】:

  • 我在原始示例中没有使用 Core Data,但是当您使用时,Fetched Results Controllers 可以提供很大帮助。感谢您的帖子
  • 那个指南太棒了!使用 NSFetchedResultsController 可以非常快速且流畅地对表格视图中显示的数据进行增量更新。
猜你喜欢
  • 2023-03-31
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多