Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CoreData—在批处理中按关系获取对象以获得更好的性能 介绍_Ios_Swift_Core Data - Fatal编程技术网

Ios CoreData—在批处理中按关系获取对象以获得更好的性能 介绍

Ios CoreData—在批处理中按关系获取对象以获得更好的性能 介绍,ios,swift,core-data,Ios,Swift,Core Data,只要可能,我都会尝试在核心数据中使用查找或创建模式。当我为一组可由id识别的项目(不管是字符串还是int)执行此操作时,我会成批执行此操作(建议对每个项目执行一次获取): 这里唯一的键是端点和项的组合 对于该实体,我对每个项目执行一次提取,因为我不知道如何在批处理中执行该操作: var foundObjects: [ItemPosition] = [] for item in items { let fetchRequest = NSFetchRequest<E>(entity

只要可能,我都会尝试在核心数据中使用查找或创建模式。当我为一组可由id识别的项目(不管是字符串还是int)执行此操作时,我会成批执行此操作(建议对每个项目执行一次获取):

这里唯一的键是
端点
的组合

对于该实体,我对每个项目执行一次提取,因为我不知道如何在批处理中执行该操作:

var foundObjects: [ItemPosition] = []
for item in items {
   let fetchRequest = NSFetchRequest<E>(entityName: E.entityName())
        fetchRequest.predicate = NSPredicate(format: "item = %@ AND endpoint = %@", item, endpoint)
   let results = try! context.fetch(fetchRequest)
   if let position = results.first {
       foundObjects.append(position)
   }
}
var foundObjects:[ItemPosition]=[]
对于项目中的项目{
让fetchRequest=NSFetchRequest(entityName:E.entityName())
fetchRequest.predicate=NSPredicate(格式:“项=%@和端点=%@”,项,端点)
let results=try!context.fetch(fetchRequest)
如果让位置=results.first{
foundObjects.append(位置)
}
}
这不是最优的,因为它会针对每个项目访问SQL数据库,我希望避免这种情况

问题:
是否有一种方法可以通过批处理中的多个关系获取对象?类似于上面提到的NSPredicate(格式:“id IN%@”,itemIDs)met?

我可以想出几种方法来实现这一点,但都不是特别优雅。您可以使用复合词或谓词:

var predicates: [NSPredicate] = []
    for item in items {
        predicates.append(NSPredicate(format: "item = %@ AND endpoint = %@", item, endpoint))
    }
    let compoundPredicate = NSCompoundPredicate.init(orPredicateWithSubpredicates: predicates)
    let results = try! context.fetch(compoundPredicate)

或者,您可以通过附加端点和项目id来为ItemPosition对象生成id,并以此获取?

我可以想出几种方法来实现这一点,但这两种方法都不是特别优雅的。您可以使用复合词或谓词:

var predicates: [NSPredicate] = []
    for item in items {
        predicates.append(NSPredicate(format: "item = %@ AND endpoint = %@", item, endpoint))
    }
    let compoundPredicate = NSCompoundPredicate.init(orPredicateWithSubpredicates: predicates)
    let results = try! context.fetch(compoundPredicate)

或者,您可以通过附加端点和项目id来生成ItemPosition对象的id,并通过该id进行提取?

是否考虑过对实体进行初始提取,然后对返回的对象数组调用
.filter
?这将允许您删除想要或不需要的对象。是否考虑过对实体进行初始提取,然后对返回的对象数组调用
.filter
?这将允许您删除想要或不需要的对象。
var predicates: [NSPredicate] = []
    for item in items {
        predicates.append(NSPredicate(format: "item = %@ AND endpoint = %@", item, endpoint))
    }
    let compoundPredicate = NSCompoundPredicate.init(orPredicateWithSubpredicates: predicates)
    let results = try! context.fetch(compoundPredicate)