"对象控制器",实体模式:小牛队的提取速度很慢

时间:2014-03-14 13:19:10

标签: macos cocoa core-data

在最后一个iMac上加载8425项需要5秒钟。

enter image description here

我不知道还有什么可以为您提供更多信息。我正在为NSComboBox的下拉列表加载项目。

我在Snow Leopard和Mountain Lion上测试过,它运行良好。在几台机器上试过,除小牛队外,它在所有osx上运行良好。相同的构建和数据库文件。

1 个答案:

答案 0 :(得分:1)

我的猜测是NSComboBox逐个加载所有项目,而CoreData每次都要进行磁盘往返。您应该使用Instruments检查这种情况,以确定发生了什么。

在显示之前尝试预取所有项目。在此类提取过程中,您可以将-[NSFetchRequest returnsObjectsAsFaults:]属性设置为NO

这是我项目中的一个预取片段:

if ( ! didPrefetch)
{
    didPrefetch = YES;

    // Your fetch request that will load all items
    NSFetchRequest* fetchRequest = ... ;

    // If you need to prefetch some relationships
    fetchRequest.relationshipKeyPathsForPrefetching = @[...]; 

    // This forces objects to fault info row cache
    fetchRequest.returnsObjectsAsFaults = NO; 

    [managedObjectContext executeFetchRequest:fetchRequest error:&error];
}