NSPredicate可以使用不区分大小写的搜索与Core Data IN比较吗? (快速4)

时间:2019-03-04 12:34:52

标签: swift core-data nspredicate

就我而言,我在Core Data中有一个对象,其ID字段是字符串。该字段由不同平台上的多个客户端填充,并且应该是GUID / UUID。理想情况下,这些应该始终是大写的,但并非所有的客户端实现都可以这样做,并且用于存储它们的代码也不能解决这个问题。现在让我们忽略明显的体系结构错误。我需要的是一种不区分大小写的搜索方式。对于我来说,现在只需从存储中获取所有内容,然后使用Swift数组过滤器功能对其进行过滤。这种方法有效,但是无效,并且当数据集变大时,将需要大量RAM。我尝试使用像这样的谓词

fetchRequest.predicate = NSPredicate(format: "someId IN [cd] %@", ids)

其中id是一个String数组。这行不通。可以使用带块谓词来解决吗?还有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

谢谢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)