objective-c nscomparisonresult工作错误?

时间:2014-04-06 06:59:47

标签: objective-c string comparison string-comparison

它在某种程度上不适用于斯堪的纳维亚字母。

当我输入@“å”时,有两个“三明治”搜索词的字符串; 一个字符串以“ø”开头,低于“å”,另一个字符串以“å”开头。然而,这个比较代码返回SOMETIMES正确,有时错误的结果,即使我使用相同的搜索字符串,即@“å”一遍又一遍。有没有我忽略的东西?

编辑:抱歉它应该是两个不同的compStrings(在我的代码中),我忘了把数字2作为后缀。

compString2表示以å开头的第二个字符串。 compString是以ø开头的那个。

我需要将搜索字符串与两个字符串进行比较,以确定它是否在这两个字符串之间。

让我以更好的方式表达它,对于那些不懂斯堪的纳维亚字母的人来说,å就像c和ø就像b,如果搜索字符串是c,那么它必须在b和c之间,对吗?

这是我的代码:

NSString *compString = [array objectAtIndex:i]; //i is an incremental number from a for-loop

//norwegian language
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"no_NO"];


if([searchString compare:compString2
                 options:(NSCaseInsensitiveSearch | NSAnchoredSearch)
                   range:range
                  locale:locale] == (NSOrderedAscending | NSOrderedSame)) {

    if([searchString compare:compString
                     options:(NSCaseInsensitiveSearch | NSAnchoredSearch) 
                       range:range
                      locale:locale] == NSOrderedDescending) {

        NSLog(@"found");

    }
}

FINAL-编辑:

我发现了问题。解决方案很简单。永远不要做我按位写的OR运算符“|”或普通OR运算符“||”。

if([searchString compare:compString
options: NSCaseInsensitiveSearch 
range:range locale:locale] == NSOrderedAscending ||
 [searchString
 compare:compString
 options: NSCaseInsensitiveSearch 
range:range locale:locale] == NSOrderedSame)

表示 searchString< = compString

if([searchString
   compare:compString
   options: NSCaseInsensitiveSearch
    range:range locale:locale] == NSOrderedDescending)

意思是 searchString> compString

1 个答案:

答案 0 :(得分:1)

我认为你不应该在第一次比较结果评估中使用NSOrderedAscendingNSOrderedSame作为位字段的位,因为你没有得到你的逻辑(!)OR可能想要。

请在您的第一个if ()

中尝试此操作
if([searchString compare:compString2
                 options:(NSCaseInsensitiveSearch | NSAnchoredSearch)
                   range:range
                  locale:locale] != NSOrderedDescending) {

    /* ... */

}