ios - CoreData 或 NSPredicate 是否像 sql 查询一样支持 COLLATE?如果是这样怎么办?

标签 ios swift core-data

在我的应用程序中,我使用核心数据作为离线持久性数据库。 一切都按预期工作,直到我的客户希望对搜索记录进行一些修改。

我要做的是,如果有人尝试使用 e 进行搜索,我的查询应该得到所有具有 é è ê ë 字符的记录......或其他任何字符非英语语言中“e”的形式。

这可以在 SQL 查询中通过对列名进行 COLLATE 来实现。但无法使用 COLLATE 创建 NSPredicate,有人可以帮我解决这个问题吗?

我的代码是这样的

let recordFetch = NSFetchRequest<NSFetchRequestResult>(entityName: table)
recordFetch.predicate = NSPredicate(format: "MyItem CONTAINS[cd] 'tem' OR MyItemIndex.MyItemStyleIndex.MyItemStyle.MyItemStyle CONTAINS[cd] 'tem' OR MyItemIndex.breweryIndex.brewery CONTAINS[cd] 'tem'")
let fetchedEmployees = try context.fetch(recordFetch)
return fetchedEmployees as! Array<NSFetchRequestResult>

我的 SQL 查询调试日志是:

SELECT DISTINCT 0, t0.Z_PK, t0.Z_OPT, t0.ZMYITEM, t0.ZMYITEMAPPEARANCEDESCRIPTION, t0.ZMYITEMAROMADESCRIPTION, t0.ZMYITEMBREWINGMETHOD, t0.ZMYITEMHISTORY, t0.ZMYITEMHOPS, t0.ZMYITEMID, t0.ZMYITEMLANGUAGEID, t0.ZMYITEMMALT, t0.ZMYITEMMOUTHFEELDESCRIPTION, t0.ZMYITEMSLOGAN, t0.ZMYITEMSUMMARY, t0.ZMYITEMTASTEDESCRIPTION, t0.ZINGREDIENTSDESCRIPTION, t0.ZISUPLOADED, t0.ZLANGUAGEID, t0.ZMYITEMINDEX, t0.ZLANGUAGE FROM ZMYITEM t0 LEFT OUTER JOIN ZMYITEMINDEX t1 ON t0.ZMYITEMINDEX = t1.Z_PK LEFT OUTER JOIN ZMYITEMSTYLEINDEX t2 ON t1.ZMYITEMSTYLEINDEX = t2.Z_PK LEFT OUTER JOIN ZMYITEMSTYLE t3 ON t2.Z_PK = t3.ZMYITEMSTYLEINDEX LEFT OUTER JOIN ZBREWERYINDEX t4 ON t1.ZBREWERYINDEX = t4.Z_PK JOIN ZLANGUAGE t5 ON t0.ZLANGUAGE = t5.Z_PK WHERE (( NSCoreDataStringSearch( t0.ZMYITEM, ?, 385, 0) OR  NSCoreDataStringSearch( t3.ZMYITEMSTYLE, ?, 385, 0) OR  NSCoreDataStringSearch( t4.ZBREWERY, ?, 385, 0)) AND  t5.ZLANGUAGECODE = ?) ORDER BY t1.ZCURRENTAVERAGESCORE DESC LIMIT 50

是的,它现在与 contains[cd] 一起工作...可能是一些缓存问题。

谢谢

最佳答案

你可以为“变音不敏感”比较添加“d”选项, 例如

NSPredicate(format: "name CONTAINS[d] %@", givenName)
NSPredicate(format: "name ==[d] %@", givenName)

此外,您可能希望为不区分大小写添加“c”选项 搜索,例如

NSPredicate(format: "name CONTAINS[cd] %@", givenName)

有关详细信息,请参阅 String Comparisons在“谓词编程指南”中。

关于ios - CoreData 或 NSPredicate 是否像 sql 查询一样支持 COLLATE?如果是这样怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45880302/

相关文章:

ios - 在 iOS 中检索按上次播放时间排序的歌曲列表

使用相同类型约束的 Swift 协议(protocol)与关联类型的一致性

Swift 1.2 Singleton 导致 App 无法启动

objective-c - 在核心数据中查找或创建对象的标准?

javascript - UIWebView stringByEvaluatingJavaScriptFromString 调试

ios - 在 swift 3.0 和 iOS 10 上手动开始刷新 UIRefreshControl

ios - 在 IOS 应用程序中使用 FFMPEG 的可靠性?

swift - UITextField 在 Swift 中设置最大字符长度

swift - 未保存核心数据关系数据

iphone - iOS 核心数据 - 将上下文传递给详细 View 的设计模式