objective-c比较结果是否错误?

objective-c比较结果是否错误?,objective-c,string,comparison,string-comparison,Objective C,String,Comparison,String Comparison,它不知何故不适用于斯堪的纳维亚字母 当我输入@“å”时,有两个字符串“夹心”了搜索词; 一个字符串以低于“å”的“ø”开头,另一个字符串以“å”开头。然而,这个比较代码有时返回正确的结果,有时返回错误的结果,即使我反复使用相同的搜索字符串,即@“å”。有什么是我忽略的吗 编辑:对不起,应该是两个不同的字符串(就像在我的代码中一样),我忘了把数字2作为后缀 compString2表示以å开头的第二个字符串。 compString是以ø开头的字符串。 我需要将搜索字符串与两个字符串进行比较,以确定它

它不知何故不适用于斯堪的纳维亚字母

当我输入@“å”时,有两个字符串“夹心”了搜索词; 一个字符串以低于“å”的“ø”开头,另一个字符串以“å”开头。然而,这个比较代码有时返回正确的结果,有时返回错误的结果,即使我反复使用相同的搜索字符串,即@“å”。有什么是我忽略的吗

编辑:对不起,应该是两个不同的字符串(就像在我的代码中一样),我忘了把数字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");

    }
}
最终编辑:

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


意思是searchString compString

我认为您不应该在第一次比较结果求值中使用
sensorderedascing
sensorderedsame
作为位字段的位,因为您没有得到您可能想要的逻辑(!)

if([searchString
   compare:compString
   options: NSCaseInsensitiveSearch
    range:range locale:locale] == NSOrderedDescending)
在您的第一个
if()
中尝试以下操作:


你想达到什么目标?为什么一个
if
在另一个里面?@Wain嗨,我已经更新了我的问题。我也尝试了这个,但结果相同。有时匹配,有时不匹配。我总是使用相同的比较字符串和搜索字符串,令人难以置信的是,它给出了不同的结果。也许它与iOS7或Xcode 5.1有关?也许nslocale并不总是占主导地位?那么
范围
变量呢?此外,解释了
选项
应该是“使用C位OR运算符的以下任意选项:
nscaseinsensitivisearch
NSLiteralSearch
NSNumericSearch
”。换句话说,它没有明确提到
NSAnchoredSearch
。您能发布可以编译和运行的代码吗?您的意思是我应该将nil作为参数“range”的参数吗?我意识到了这一点,奇怪的是,它使用NSAnchoredSearch搜索效果更好。现在我已经删除了它,但结果仍然是一样的。代码很长。。。它位于对象搜索栏的textDidChange方法中。我只有一个带有一个搜索栏的TableView。不,我不建议您将
nil
作为参数
range
!很可能您的代码很长。为了定位错误,您应该提供。此外,您必须尝试使用断点和调试器或
NSLog
s检查您的算法,以确认是否确实是比较不起作用?是的,我确认只有比较才是问题所在。然而,我想知道是否还有其他方法来比较?
if([searchString
   compare:compString
   options: NSCaseInsensitiveSearch
    range:range locale:locale] == NSOrderedDescending)
if([searchString compare:compString2
                 options:(NSCaseInsensitiveSearch | NSAnchoredSearch)
                   range:range
                  locale:locale] != NSOrderedDescending) {

    /* ... */

}