2016-07-13 3 views
3

나는 엑스 코드 8.2beta를 다운로드하고 프로젝트에 경고를 해결하기 위해 한 나는 header file에 다음 를 추가했다 : 단지에서 사용할 수 CAAnimationDelete 아이폰 OS (10)헤더 파일에 프로토콜의 가용성을 감지 - 목표 - C

에만 문제가 프로토콜을 추가하여 프로젝트가 iOS versions 전 10에서 컴파일되지 않았다, 그래서 나는 다음과 같은 체크 추가했습니다 :

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_3 
@interface CheckTest : UIView <CAAnimationDelegate> 
#else 
@interface CheckTest : UIView 
#endif 

이 올바른 방법인가를?

+1

잘 보입니다. 그러나 iOS 9.4가 출시 된 경우를 대비해서'== IPHONE_10' 또는 이와 유사한 것을 사용하고 싶을 것입니다. (있을 수는 없지만 알 것입니다.) 당신은 위임 메소드 구현을 비슷한 방법으로 보호해야 할 것입니다 ... – Droppy

+0

@Droppy 예, 그것에 대해 생각하지 않았습니다! 고마워 :) :) 당신이 대답을 게시 할 수 있도록 내가 그것을 받아 들일 수 있도록 – Signo

답변

1

가드 매크로 사용이 올바르지 만 사소한 변경 사항이 하나 있습니다. 당신은 당신이 아이폰 OS 10 + 용으로 컴파일 할 경우 확인하려면, 그래서 매크로에 그것에 대한 시험 :

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 
@interface CheckTest : UIView <CAAnimationDelegate> 
#else 
@interface CheckTest : UIView 
#endif 

같은 가드 매크로를 사용하여 CAAnimationDelegate 메소드 구현을 보호하는 것을 잊지 마십시오. 당신이 많은 클래스에서이 일을하는 경우

, 다음은 미리 컴파일 된 헤더에서이 작업을 수행하는 것이 더 편리 할 수 ​​있습니다

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10 
#define VIEWS_USE_CAANIMATIONDELEGATE 1 
#else 
#define VIEWS_USE_CAANIMATIONDELEGATE 0 
#endif 

과에 가드 매크로를 변경합니다

#if VIEWS_USE_CAANIMATIONDELEGATE 
@interface CheckTest : UIView <CAAnimationDelegate> 
#else 
@interface CheckTest : UIView 
#endif 
+0

고마워요! 단지 하나의 오타가 있었는데, 나는'Availability.h'에서 iOS 10의 코드가'__IPHONE_10_0'이라고 발견했습니다. – Signo

+0

@Signo Thanks; 업데이트되었습니다. – Droppy

+0

레코드의 경우 :이 접근 방식은 이전 iOS 버전으로 컴파일 할 때 일반적으로 중단됩니다. '__IPHONE_10_0'이 분명히 iOS 10과 함께 정의되기 때문입니다. 그러나 놀랍게도 해당 매크로는 이미 CABase.h에있었습니다. 일반적으로 매크로 ('100000')의 값을 대신 하드 코딩합니다. –