네덜란드어 로켈 설정을 사용하여 OSX Yosemite에서 "i"와 "I"의 대소 문자를 구분하지 않습니다. 그러나 OSX는 문자열이 다르다는 것을 계속해서 알려줍니다. 로케일을 "en_US"로 변경하면 비교가 예상대로 작동합니다."i"와 "I"의 대소 문자를 구별하지 않는 비교가 OSX에서 네덜란드어 로케일 설정과 함께 실패합니다. Yosemite
다음 xcode "명령 줄 도구"프로젝트를 사용하여 문제를 보여줄 수 있습니다.
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
CFStringRef s1 = (__bridge CFStringRef)@"i";
CFStringRef s2 = (__bridge CFStringRef)@"I";
CFLocaleRef tmpLocale = CFLocaleCreate(nil, (__bridge CFStringRef)@"nl_NL"); // or // CFLocaleRef tmpLocale = CFLocaleCopyCurrent(); on a Dutch OSX
int result = CFStringCompareWithOptionsAndLocale(s1, s2, CFRangeMake(0, 1), kCFCompareCaseInsensitive, tmpLocale);
CFRelease(tmpLocale);
NSLog(@"%d", result);
if (result == 0) NSLog(@"same"); else NSLog(@"different");
}
return 0;
}
OSX에서 버그입니까? 아니면 누락 된 것이 있습니까?
'CFStringRef'를 초기화 할 때'CFSTR ("i") 매크로 만 사용할 수 있습니다. '대신'NSString'을 CoreFoundation에 연결합니다. 너의 길은 잘못이 아니야. 생각을위한 바로 음식! – Sean