【问题标题】:Core data lazy loading in UITableView - awakeFromFetch called at different points on device and simulatorUITableView 中的核心数据延迟加载 - 在设备和模拟器上的不同点调用 awakeFromFetch
【发布时间】:2011-08-26 12:49:45
【问题描述】:

我遇到了核心数据问题,它在设备和模拟器上的行为似乎有所不同。

我有一个非常简单的 UITableView,它由核心数据模型驱动,与苹果提供的模板相比变化很小。

在模拟器上,一切正常。在设备上,我在表格视图中有正确数量的单元格以匹配数据库中托管对象的数量,但单元格本身不包含数据。我在单元格中有几个标签来自托管对象的瞬态属性,这些标签是空白的。

我的托管对象子类的 awakeFromFetch 方法和我的表视图委托的 cellForRowAtIndexPath 方法有 NSLog 语句。

在模拟器上,在 cellForRowAtIndexPath 之前调用了 awakeFromFetch,所以一切都很好。在设备上,情况正好相反,因此单元格是空白的,直到我通过上下滚动强制它们重新显示。

为什么会发生这种情况,我应该做出哪些改变来防止这种情况发生?我可以在单元配置代码期间查看托管对象是否有故障,但是如何强制触发故障?还是我应该做点别的?

【问题讨论】:

    标签: iphone objective-c uitableview core-data


    【解决方案1】:

    我通过确保首先调用托管对象的持久属性来配置我的单元格来解决这个问题。这会触发故障并填充其余字段。在 awakeFromFetch 中填充了瞬态属性,并且在触发故障之前不会调用它。为什么这在设备和模拟器上有所不同,我不知道。

    【讨论】:

      【解决方案2】:

      很明显,您需要上下滚动才能显示单元格的值。由于在 iphone 上内存太低而无法发挥性能...

      可能存在使用多线程或 GCD(Grand Central Dispatch)的解决方案之一。 使用线程,然后通知您的表数据已下载到内存中并准备显示在表视图中,然后更新表...

      参考this link

      【讨论】:

      • 谢谢你,但我认为多线程或 GCD 有点重量级 - 它只是一个包含一些托管对象的表格视图!
      • 然后你可以使用NSThread,然后使用NSNotifications,这将非常轻巧易用..
      猜你喜欢
      • 2018-08-27
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多