2010-06-21 2 views
2

사용하기 전에 NSRegularExpressionSearch이 있는지 어떻게 확인할 수 있습니까?C 열거 형이 있는지 확인하십시오.

enum { 
    NSCaseInsensitiveSearch = 1, 
    NSLiteralSearch = 2, 
    NSBackwardsSearch = 4, 
    NSAnchoredSearch = 8, 
    NSNumericSearch = 64, 
    NSDiacriticInsensitiveSearch = 128, 
    NSWidthInsensitiveSearch = 256, 
    NSForcedOrderingSearch = 512, 
    NSRegularExpressionSearch = 1024 
}; 

업데이트 - 최신 SDK에 대해 컴파일하고 런타임시 NSRegularExpressionSearch가 있는지 확인하고 싶습니다.

#if __IPHONE_3_2 <= __IPHONE_OS_VERSION_MAX_ALLOWED 

그래서 현재 운영 체제가 3.2 이상인지 확인해야 할 때

+2

정의 도움말없이 프로그램이 컴파일되지 않는다는 사실이 있습니까? –

+0

아니요 :) 앱이 NSRegularExpressionSearch를 포함하지 않는 이전 버전의 OS와 호환되어야합니다. – christo16

+0

@ christo16 : 음, 그건 말이 안됩니다. 이름이 정의되고 컴파일되고 이름이 정의되지 않은 경우 컴파일되지 않습니다. –

답변

2

NSRegularExpressionSearch은 컴파일됩니다.

if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 3.2) {} 

다른 경우에 당신은 클래스 인스턴스가 선택에 응답하는 것이 존재하거나 확인 수도 있지만있는 NSString은 열거 이외를 변경하지 않았다. 애플이 UI_USER_INTERFACE_IDIOM 매크로를 처리하는 방법을 참조하십시오 또 다른 예를 들어

if (NSClassFromString(@"UIGestureRecognizer") != nil) {} 
if ([someView respondsToSelector:@selector(gestureRecognizers)]) {} 

: 제스처 인식기와 연관된 열거가 있다면 예를 들어, 다음 중 하나를 사용할 수 있습니다.

편집 : 시스템 버전이 NSFoundationVersionNumber입니다 외에

버전 번호를 확인합니다.

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iPhoneOS_3_1) {} 

NSString과 더 밀접하게 관련되어 있지만 3.2 헤더에는 3.2에 대한 상수가 없습니다.

+0

OS 버전으로 검사하는 것을 피하려고했는데, 대개 나쁜 습관입니다. 그러나 그것은 확인하는 유일한 방법 인 것처럼 보입니다. – christo16

1

질문 제목이 올바르지 않습니다. 귀하의 질문은 NSRegularExpressionSearch가 있는지 여부가 아닙니다. (예, SDK => 3.2 인 컴파일 타임에 존재합니다.) 귀하의 질문은 rangeOfString:options:과 같은 메소드가 런타임시 정규 표현식의 옵션 비트를 올바르게 해석 할 수 있는지 여부입니다.

이것은 함수의 동작에 대한 질문이므로이 문제를 파악하는 한 가지 확실한 방법은 실험을하는 것입니다. 지원이있을 때 당신이 아는 것은 성공할 것이지만 그렇지 않은 경우 실패 할 것입니다.

문자열과 일치하는 정규식을 사용하여 일치를 시도 할 수 있지만 정규식 문자열을 문자 그대로 문자열에 존재하지 않으므로 정규식 옵션을 이해하지 못하면 리터럴 일치를 수행하고 실패합니다 . 예 :

관련 문제