NSPredicate和丹麦信å给出了错误的结果

时间:2014-05-06 13:32:35

标签: ios iphone objective-c core-data nspredicate

丹麦语只有3个非标准字符:åøæ

当我尝试使用以下谓词搜索我的Core Data实体时:

name CONTAINS[cd] "ø" // correct results
name CONTAINS[cd] "æ" // correct results
name CONTAINS[cd] "å" // wrong results - with 'å' and 'a'

前2个谓词正常但不是最后一个。它的结果是“å”和“a”字母。

这封一封信的特别之处是什么?

2 个答案:

答案 0 :(得分:1)

我建议你将查询字符串设置为小写,不要将[cd]用作谓词语句的一部分,既可以用于核心数据优化,也可以返回正确的结果。

工作示例:

NSArray *ar = @[@"å",@"a",@"åa"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self CONTAINS %@", @"å"];
NSArray *filteredArray = [ar filteredArrayUsingPredicate:predicate];
NSLog(@"Results: %@",filteredArray); // which returns (å,åa)

答案 1 :(得分:0)

这是变音符号搜索的正确行为。如果指定“ d”参数,则核心数据将运行变音符号不敏感搜索。这意味着它将忽略所有重音。

该字符是“特殊”字符,因为它具有多种unicode表示形式,并且您的搜索还将根据存储在商店中的unicode值产生不同的结果。

在objc.io https://www.objc.io/issues/9-strings/unicode/

上的字符串问题中有关于该字符的很好的解释