gpt4 book ai didi

ios - 导入 CoreData 时检查重复项

转载 作者:行者123 更新时间:2023-11-28 20:30:17 24 4
gpt4 key购买 nike

我正在使用 RestKit 将数据导入到 Core Data 存储中,并且需要检查重复项。如果商品已经在商店中,我想用最新的属性更新它。如果它是一个新项目,我想创建它。

导入速度很慢,所以我使用了 Instruments,发现导入过程中最长的部分是检查项目是否已经存在(带有获取请求)

所以我想知道如果检查商品是否已经在商店中,是否更快:

  • 使用 countForFetchRequest 查看项目是否已经存在,然后执行 FetchRequest 返回要更新的项目,或者
  • 只需执行 FetchRequest 即可获取要更新的项目
  • 或者有更好的方法吗?

我认为 countForFetchRequest 会更快,因为不会返回整个 NSManagedObject,并且只有在我知道会有 NSManagedObject 时才执行获取请求。

谢谢

- (Product *)productWithId:(int)productID {

    NSManagedObjectContext *context = [Model sharedInstance].managedObjectContext;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"product_id == %d", productID];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Product" inManagedObjectContext:context];
request.predicate = predicate;
request.fetchLimit = 1;

NSError *error = nil;

NSUInteger count = [context countForFetchRequest:request error:&error];

if (!error && count == 1) {
NSArray *results = [context executeFetchRequest:request error:&error];
if (!error && [results count]) {
return [results objectAtIndex:0];
}
return nil;
}

return nil;

}

最佳答案

据我所知,在 Core Data 中查找和/或导入对象的最佳方法在 Implementing Find-or-Create Efficiently 中有所描述。 .

该文档描述了一种查找或创建模式,它基于对数据进行排序:您从服务下载的数据和您从商店获取的数据。

我真的建议您阅读我提供的链接。您会发现自己的表现有所提高。

显然,您应该在后台完成工作,防止主线程卡住,使用线程限制或新的 iOS 核心数据队列 API。

希望对您有所帮助。

关于ios - 导入 CoreData 时检查重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12415564/

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