延迟加载表视图时出现问题

时间:2014-05-10 08:48:50

标签: objective-c macos cocoa nstableview nsarraycontroller

在我试图填充nestableview lazily的问题上,我感到非常震惊。以下是我的方法。

我创建了一个自定义类PRIList,其中有一个数组实例来管理模型。 我已将priList.items绑定到xib中的数组控制器,其中items不是PRIList中的实例,但为了支持延迟加载,我实现了方法countOfItems和{{1} }。

最初,当我填充objectInItemsAtIndex:时,我使用有效对象填充少量对象(比如50)并使用有缺陷的对象进行休息。在PRIList中,我检查特定索引处的项是有效还是有缺陷。如果它有问题,我会获取下一组50个对象。

据我所知,objectInItemsAtIndex仅对表格视图中的可见行调用方法NSArrayController。但问题是,只要设置PRIList,就会为所有对象调用objectInItemsAtIndex方法。在表视图中更改某些选择时甚至会调用此方法(堆栈跟踪显示此方法是从objectInItemsAtIndex调用的)

基本上我想在用户在表格视图中向下滚动时获取记录。

我在Lion的另一个项目中采用了相同的方法。它在那里工作。目前我在小牛队。

我尝试覆盖自定义表视图中的[_NSModelObservingTracker startObservingModelObjectAtReferenceIndex]并将其返回到NO。仍然没有运气。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

首先,您是否已分配或绑定阵列控制器的排序描述符?或者设置任何列以自动生成排序描述符? (我不确定后者是否相关。这取决于列是否默认排序。)

在任何情况下,如果数组控制器感觉需要对对象进行排序以排列对象,那么它将需要加载所有内容。无论如何,我的印象是它始终如此,尽管你报告它有效。

对于这样的问题,我建议您进行全面的手动控制。这意味着不使用绑定或数组控制器。使用数据源。