【发布时间】:2017-08-25 11:25:01
【问题描述】:
在我的应用程序中,我使用核心数据作为离线持久性数据库。 一切都按预期工作,直到我的客户期望对搜索记录进行一些修改。
我要做的是,如果有人尝试使用 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 Query 的调试日志是:
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]... 可能是一些缓存问题。
谢谢
【问题讨论】:
-
你可以做类似
"name==[c]" -
Ashwin bhai aa try karo [NSPredicate predicateWithFormat:@"ANY name LIKE[c] %@", @"teste"];或者更改为 [d] 可能是工作 karse sure nathi。
-
您的任何解决方案都没有成功。我的问题与案件无关。它在 diff 中有不同的字符(Unicode)。语言...我需要同一个字符的所有相关记录。