objective-c - 核心数据中的批量故障子关系

标签 objective-c ios core-data

我有一个非常简单的小模式,如下所示:

轨迹 --> 线段 --> 坐标

所有适当的关系都已到位以完成这项工作,他们当然让我做这样的事情:

NSArray *trails = <query all trails>

for (Trail *trail in trails) {
    for (Segment *segment in trail.segments) {
        for (Coordinate *coordinate in segment.coordinates) {
            //do something with coords
        }
    }
}

来自 Django 的背景,我对此感到很高兴,并假设将对 sqlite3 运行尽可能少的查询。错误的!对这些循环中的每个对象都进行了查询。

我现在已经阅读了关于故障的 Core Data 文档,我明白发生了什么,尽管我真的很想知道处理这种情况的最佳实践是什么。我需要内存中的每个对象(坐标模型有大约 100,000 个对象),因为它们都在同一时刻用于在 map 上绘制轨迹。

我应该如何处理这种超延迟加载?

最佳答案

为此,您可以使用 NSFetchRequestsetRelationshipKeyPathsForPrefetching: 方法。来自文档:

Prefetching allows Core Data to obtain related objects in a single fetch (per entity), rather than incurring subsequent access to the store for each individual record as their faults are tripped.

因此,在您对路径的初始提取请求中,您可以添加

[request setRelationshipKeyPathsForPrefetching:
    [NSArray arrayWithObjects:@"segments", @"segments.coordinates", nil]]

(我从来没有尝试过 2 层深,只有一层。)

关于objective-c - 核心数据中的批量故障子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594065/

相关文章:

用于测试 HTTP 响应代码和时间的 iOS App

iphone - 在 TabBarController 中的选项卡之间切换/导航

ios - 创建持久存储后核心数据错误

iphone - 如何以编程方式在 iPhone 中查找掉话?

ios - 如何在用户授予权限后以编程方式发送短信?

ios - 当所有单元格的大小不同时,如何使 UICollectionView 的单元格换行?

ios - 如何在 ios 中的 instagram 上分享?

ios - Objective-C 在 UIWebView 中调用 javascript 回调 Objective-C;线程问题

swift - CoreData 创建并保存具有 nil 属性的额外实体

ios - 如何在Xcode 4中将现有.momd添加到项目中?