【问题标题】:Matt Gallagher's UITableView (Revisited) + NSFetchedResultsControllerMatt Gallagher 的 UITableView(重温)+ NSFetchedResultsController
【发布时间】:2011-10-06 12:31:54
【问题描述】:

如果您查看 Matt Gallagher 的 Cocoa With Love 博客,他在新的 a beautiful retake on UITableView 上进行了精彩的讨论(带有示例代码)......在帖子中,他谈到了动画和异构细胞的诸多好处,等等。然而,他列出的限制之一对我来说有点阻碍。它不适用于 NSFetchedResultsController。将数据加载到单元格中的设计假定所有数据都是静态的并且可以立即使用。但是,如果您正在构建一个包含许多行的表,并且您的数据由 Core Data 中的对象组成,那么如果您能够访问 FRC 的缓存和动态加载功能,您的视图控制器可能会受益匪浅。

我的问题:有没有人努力重新分配他重新审视的 UITableView 设计以与 NSFetchedResultsController 一起使用?如果有人已经完成(或正在开发),我很乐意(喜欢)在我的工作中尝试它,甚至帮助开发它。

【问题讨论】:

  • +1 提出一个好问题。不知道你到底需要什么,但如果你正在寻找延迟加载/缓存单元格,你可以查看 Enormego 的人的 EGOImageLoading。 Github 在这里github.com/enormego/EGOImageLoading
  • 好吧,让我再解释一下。我的每个单元格实际上都由一个核心数据对象支持。实际上有很多很多核心数据对象(将它们视为人员,地图或日历事件的数据库记录......实际上,我在核心数据中拥有所有这些东西,每一个都由某处表格中的一个单元格表示在我的应用程序中)。我使用核心数据的唯一原因是因为它负责管理那些大量数据,通过它进行搜索,只加载节省内存所需的内容。 FRC 是表格视图单元格和要加载的数据之间的粘合剂。
  • 那么回到您的回复@jesse ...我喜欢 EGOImageLoading,但我并不真正担心图像...这是单元格中其余信息背后的数据。
  • 也许我遗漏了一些重要的东西,但遵循 MVC 指南不是很简单吗?您将有一个来自 CoreData 的数据对象和一个视图对象(在本例中是来自 cocoawithlove 的那个)。在数据更改时,您调用FetchedResultsController-Delegate 并使用存储在数据对象中的值更新视图对象。
  • 您能否详细说明您希望避免 Gallagher 的方法是什么?在我看来,它与标准方法的区别在于它将数据视为静态数据。 (顺便说一句,如果您可以访问 iOS5 测试版和 WWDC2011 视频,请看一下;UITableView 中添加了很多内容。)

标签: iphone uitableview core-data nsfetchedresultscontroller


【解决方案1】:

Good to go...更改了Table Revisited,以支持核心数据Download

【讨论】:

  • 这看起来不错。运行它时我有点崩溃,但它很容易修复。当然比替代品更好。
  • 我认为这只是一个错误检查问题,我已经忘记了,但我会再调查一下。不过我是在 Xcode 3.2 下运行的。
  • 也许@phix23 正在等待更实质性的东西?不知道。我认为一旦有人检查了答案,它就会自动授予。
  • 我不喜欢这个解决方案,原因如下:代码复用性不强,核心数据模型与表视图模型绑定在一起——不适用于更复杂的数据模型或复杂的数据模型PageCells,它不异步执行数据获取,它不实现 NSFetchedResultsControllerDelegate 并且因此不更新单元格,当我单击“笔尖加载单元格”时它崩溃。我想到了一个更可重用的解决方案,它独立于使用的核心数据模型。
  • @phix23 你应该在开始赏金时表达你的想法,或者在我发布答案而不是最后一刻的 5 天前表达你的想法,我会尝试一些东西的。