我有大约10.000个实体的数据库和50个NSString元素的动态NSArray。想检查数据库中是否存在这些元素,并创建存在的新数组。我不需要返回整个实体,只需返回那些NSString标题(与NSString数组中的相同)
NSPredicate应该将entity.title与NSString元素进行比较,并使用EXACT匹配。
最好的处理器/内存有效方法是什么?
答案 0 :(得分:2)
我认为您应该在谓词中使用'in'操作来获得结果。这使您可以利用数据库来执行比较,而不是将所有10,000条记录带回来进行比较。如果采用这种方法,您的代码可能如下所示:
// Assuming that arrayName is your existing array of values to match, that
// EntityName is the object in CoreData that you’re looking at, and context
// is your moc
var newArray: [String] = []
let fetchRequest = NSFetchRequest<EntityName>(entityName: "EntityName")
fetchRequest.predicate = NSPredicate(format: "title in %@", arrayName)
do {
result = try context.fetch(fetchRequest)
for element in result {
newArray.append(element.title)
}
} catch {
… manage any errors …
}
注意 - 我的目标是Swift 3.0兼容代码 - 不确定swift是否适合您。