NSPredicate 可以使用不区分大小写的搜索与 Core Data IN 比较吗? (Swift 4)
Can NSPredicate use case insensitive search with Core Data IN comparison? (Swift 4)
在我的例子中,我在 Core Data 中有一个对象,其 id 字段是一个字符串。该字段由不同平台上的多个客户端填充,应该是 GUID/UUID。理想情况下,这些应该始终是大写,但并非所有客户端实现都这样做,存储它们的代码也没有考虑到这一点。让我们暂时忽略明显的架构错误。我需要的是一种以不区分大小写的方式搜索这些内容的方法。因为我现在只是从存储中获取所有内容,然后使用 Swift 数组过滤功能过滤它们。这可行,但效果不佳,而且当数据集变大时,将需要大量 RAM。我尝试使用像
这样的谓词
fetchRequest.predicate = NSPredicate(format: "someId IN [cd] %@", ids)
其中 ids 是一个字符串数组。这是行不通的。可以使用带有块的谓词来解决吗?还有其他解决方案吗?
谢谢 Martin R 的评论,它让我找到了适合我的解决方案。我最终得到了这个解决方案。这不是我想要的,但知道 ids 数组很少有超过 10 个条目,现在它会这样做,因为它至少解决了内存问题。希望 Swift 和 Core Data 将来能提供更好的解决方案。
var predicates = [NSPredicate]()
for id in idList
{
predicates.append(NSPredicate(format: "temporaryId LIKE[c] %@", id))
}
fetchRequest.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicates)
在我的例子中,我在 Core Data 中有一个对象,其 id 字段是一个字符串。该字段由不同平台上的多个客户端填充,应该是 GUID/UUID。理想情况下,这些应该始终是大写,但并非所有客户端实现都这样做,存储它们的代码也没有考虑到这一点。让我们暂时忽略明显的架构错误。我需要的是一种以不区分大小写的方式搜索这些内容的方法。因为我现在只是从存储中获取所有内容,然后使用 Swift 数组过滤功能过滤它们。这可行,但效果不佳,而且当数据集变大时,将需要大量 RAM。我尝试使用像
这样的谓词fetchRequest.predicate = NSPredicate(format: "someId IN [cd] %@", ids)
其中 ids 是一个字符串数组。这是行不通的。可以使用带有块的谓词来解决吗?还有其他解决方案吗?
谢谢 Martin R 的评论,它让我找到了适合我的解决方案。我最终得到了这个解决方案。这不是我想要的,但知道 ids 数组很少有超过 10 个条目,现在它会这样做,因为它至少解决了内存问题。希望 Swift 和 Core Data 将来能提供更好的解决方案。
var predicates = [NSPredicate]()
for id in idList
{
predicates.append(NSPredicate(format: "temporaryId LIKE[c] %@", id))
}
fetchRequest.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicates)