gpt4 book ai didi

ios - 有没有比提取请求更快的方法来检索核心数据中的特定托管对象?

转载 作者:可可西里 更新时间:2023-11-01 06:09:08 24 4
gpt4 key购买 nike

我有一个创建托管对象 (IntersectionObject) 的方法,每个对象都具有三个属性。这三个属性本身就是托管对象。

PropertyObject1、PropertyObject2 和 PropertyObject3 各有大约 20 种不同的可能性。

IntersectionObject 本质上是特定 PropertyObject1、PropertyObject2 和 PropertyObject3 的组合。

大约有 1200 个 IntersectionObjects,为了创建它们,我使用获取请求来检索和设置正确的 PropertyObject:

- (PropertyObject1 *)fetchedPropertyObject1FromID: (NSNumber *)propertyObjectID {

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"PropertyObject1" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];

NSError *error = nil;
NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
NSLog(@"error fetching PropertyObject from ID, error:%@", error);
return nil;
}

for (PropertyObject1 *object in fetchedObjects) {

if (object.propertyObjectID.longValue == propertyObjectID.longValue) {
return object;
}
}

return nil;

}

我发现对 1200 个 IntersectionObjects 中的每一个重复此提取 3 次大约需要 2 秒,而且速度太慢。有更快的方法吗?

编辑:已接受的答案包含我在其下方评论中使用的解决方案。事实证明,简单地将 PropertyObjects 映射到字典是获取关联对象的最简单、最快捷的方法。

最佳答案

如果您有托管对象 ID,请在 MOC 上使用 objectWithID:

如果您不这样做,并且您将在短时间内创建大量关联,则分批从 MOC 中获取所有托管对象(每批可能 100 个项目,请参阅 NSFetchRequest 上的 fetchBatchSize),创建一个将您的 objectID 映射到托管对象的字典,这样您就可以进行本地查找。使用 refreshObject:mergeChanges: 处理批处理时,将每个对象恢复为故障。

关于ios - 有没有比提取请求更快的方法来检索核心数据中的特定托管对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20690149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com