【问题标题】:NSDiacriticInsensitivePredicateOption not supported by RealmRealm 不支持 NSDiacriticInsensitivePredicateOption
【发布时间】:2015-11-17 14:57:41
【问题描述】:

我有一个 DictObject 的文本属性,其中包含一些越南字母,例如“Sống”。

@interface DictObj : RLMObject
@property NSString *text;//Ex: sống
@end

我想使用BEGINSWITH[cd] 执行变音符号不敏感搜索,但Realm 目前不支持它:

RLMResults *fetchedResults = [DictObj objectsInRealm:realm where:@"text BEGINSWITH[cd] %@",inputText];

我可以使用kCFStringTransformStripDiacritics 来转换我的输入文本,但是当字符串已经存储在 Realm 文件中时,我不知道如何执行该字符串转换。

【问题讨论】:

    标签: ios objective-c nsstring realm


    【解决方案1】:

    Realm Objective-C v2.5.0 在大多数字符串操作中添加了对变音符号不敏感修饰符的支持。除LIKE 外,所有受支持的字符串比较运算符现在都支持[d] 修饰符。

    请注意,在执行不区分变音符号的比较时需要权衡性能。如果您进行非常频繁的查找,最好预先计算一个去掉变音符号的字符串版本,并将其存储在模型的第二个属性中。然后,您可以在查询中使用 diacritic-free 属性,同时继续使用原始属性进行显示。如果您的领域中存储了现有数据,则可以将额外属性添加到您的类中并为现有对象填充它within a migration

    【讨论】:

    • 这不是有效的方法,但似乎没有比这更好的方法,除非 Realm 团队添加它。谢谢!
    • 添加支持作为github.com/realm/realm-cocoa/issues/1490 的一部分进行跟踪。
    • Realm Objective-C 和 Swift v2.5.0 中发布了支持。
    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多