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

标签 swift core-data nspredicate

在我的例子中,我在 Core Data 中有一个对象,其 id 字段是一个字符串。该字段由不同平台上的多个客户端填充,并且应该是 GUID/UUID。理想情况下,这些应该始终是大写,但并非所有客户端实现都这样做,存储它们的代码也没有考虑到这一点。让我们暂时忽略明显的架构错误。我需要的是一种以不区分大小写的方式搜索这些内容的方法。因为我现在只是从存储中获取所有内容,然后使用 Swift 数组过滤功能过滤它们。这可行,但效果不佳,而且当数据集变大时,将需要大量 RAM。我尝试使用像

这样的谓词

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

其中 ids 是一个字符串数组。这是行不通的。可以使用带有 block 的谓词来解决吗?还有其他解决方案吗?

最佳答案

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

关于swift - NSPredicate 可以使用不区分大小写的搜索与 Core Data IN 比较吗? ( swift 4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54983401/

相关文章:

ios - Swift:仅在一个 subview Controller 上隐藏状态栏

ios - (iOS + Firebase) 无法将图像从 UITableViewCell 传递到下一个 ViewController

ios - 如何在 Swift 中对子类化的 UIViewController 进行类型转换?

ios - Swift 4 - 无法仅在物理设备上将类型 'NSDate' 的值分配给类型 'Date?'

ios - 按钮上的 UITableViewCell 单击使用核心数据更新数据库属性值

ios - 使用 NSPredicate 不精确/相似匹配过滤 NSArray?

ios - 使用谓词获取总是返回 nil

ios - 如何快速比较颜色

ios - 如何将数据保存到一个 View Controller 中的 CoreData 中,然后让 tableview 在另一个 View Controller 中显示数据?

objective-c - 组合谓词以获得低于常量值的最大值