, 당신은 UIBarButtonSystemItemPageCurl
조건부 처리기를 사용하여 정의되는 것을 확인할 수있는 것들 :
typedef NS_ENUM(NSInteger, UIBarButtonSystemItem) {
⋮
#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
UIBarButtonSystemItemPageCurl,
#endif
};
…_MAX_ALLOWED
는 SDK 버전으로 정의된다. 상수가 정의되면 상수는 항상 존재합니다.
포인터가 아니기 때문에 NULL
과 비교하면 의미가 없습니다. 효과를 0과 효과적으로 비교하고 있습니다. 열거 형의 첫 번째 것이 아니기 때문에 0이 아니므로 절대로 NULL
이 아닙니다.
내용 은입니다. UIBarButtonSystemItemPageCurl
은 23
과 동의어이며 OS 버전에 관계없이 항상 23
이 존재합니다.
그래서 문제가된다 "UIKit는 인식 UIBarButtonSystemItemPageCurl
(일명, 23
) 뭔가?"initWithBarButtonSystemItem:target:action:
에 전달하고 무슨 일이 일어 나는지하는 것 그 밖으로을 찾을
한 가지 방법은. 잘하면, 그것은 nil
을 돌려 주거나 예외를 던질 것이다; 어느 쪽이든, 당신은 그것을 탐지하고 iOS 3 장비에서해야 할 일을 모두함으로써 회복 할 수 있습니다.
또 다른 방법은 ask the device for its systemVersion
이며 버전 번호를 이해하는 방식으로 @"4.0"
과 비교할 수 있습니다. Growl 프로젝트는 code for parsing and comparing version number strings입니다. OS X 용으로 작성되었지만 iOS에서는 거의 수정하지 않고 작동해야합니다.
먼저 try-it-and-see 방식을 사용합니다. 자동으로 실패하거나 (즉, iOS 3에서도 UIBarButtonItem이 항상 반환되고 3에 도달하는 항목은 작동하지 않습니다.) 운영체제 버전 비교에 의존해야합니다.
'if (& UIBarButtonSystemItemPageCurl! = NULL)'이 (가) 작동합니까? – rmaddy
아니요, 작동하지 않습니다. LLVM 컴파일 오류 : _ 주소 표현은 좌변표 또는 함수 지정자 여야합니다. 앞에있는 '&'(앰퍼샌드)와 어떤 차이가 있습니까? – AnsonL
의미가 있습니다. 내가 제안한 것은 (extern) 상수를 확인하는 방법이다. 그것은 어둠 속에서 총알 값으로 작동 할 수있는 기회였습니다. 솔직히, 나는 enum 값에 대한 런타임 체크가 없다고 생각한다. 'UIDevice systemVersion'을 확인하고'@ "3"'으로 시작하는지 확인해야 할 수도 있습니다. 나는 항상 그런 수표를 싫어하지만 여기있는 유일한 선택 일 수 있습니다. – rmaddy