NSArray 作为核心数据 fetchRequest 中的参数
NSArray as parameter in Core Data fetchRequest
我有大约 10.000 个实体的数据库和 50 个 NSString 元素的动态 NSArray。想检查这些元素中的每一个是否存在于数据库中并创建新的存在元素数组。我不需要 return 整个实体,只需要那些 NSString 标题(与 NSString 数组中的相同)
NSPredicate 应该将 entity.title 与完全匹配的 NSString 元素进行比较。
最好的 processor/memory 有效的方法是什么?
我认为您应该在谓词中使用 '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 是否是你想要的。
我有大约 10.000 个实体的数据库和 50 个 NSString 元素的动态 NSArray。想检查这些元素中的每一个是否存在于数据库中并创建新的存在元素数组。我不需要 return 整个实体,只需要那些 NSString 标题(与 NSString 数组中的相同)
NSPredicate 应该将 entity.title 与完全匹配的 NSString 元素进行比较。
最好的 processor/memory 有效的方法是什么?
我认为您应该在谓词中使用 '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 是否是你想要的。