ios – 是否有更快的方法来检索核心数据中的特定托管对象而不是获取请求?

ios – 是否有更快的方法来检索核心数据中的特定托管对象而不是获取请求?,第1张

概述我有一个方法来创建每个具有三个属性的托管对象(IntersectionObject).这三个属性本身就是托管对象. PropertyObject1,PropertyObject2和PropertyObject3各有大约20种不同的可能性. IntersectionObject本质上是特定PropertyObject1,PropertyObject2和PropertyObject3的组合. 有大约1 我有一个方法来创建每个具有三个属性的托管对象(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中的每一个重复这个三次获取需要大约2秒,而且太慢了.有更快的方法吗?

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

解决方法 如果您具有托管对象标识,请在MOC上使用objectWithID :.

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

总结

以上是内存溢出为你收集整理的ios – 是否有更快的方法来检索核心数据中的特定托管对象而不是获取请求?全部内容,希望文章能够帮你解决ios – 是否有更快的方法来检索核心数据中的特定托管对象而不是获取请求?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1022149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存