2012-12-06 16 views
0

iOS 6에서 소개 된 UIActivity을 상속받은 코드가 Xcode 4.5로 벌금을 부과하고 iOS 6 및 이전 버전에서 제대로 작동합니다 (런타임에 클래스의 가용성을 감지 함). 그러나이 코드를 Xcode 4.4로 컴파일 할 수 있습니까? 이 아니며 SDK에 UIActivity 클래스가 있습니까?objc의 클래스에서 상속받을 수 있습니까? 컴파일 할 때 사용할 수 없습니까?

메서드가 super을 호출하고 컴파일러가 클래스가 이미 상속 트리의 루트에 있다고 경고하므로 UIActivity를 전달하면 컴파일되지 않습니다. 어쩌면이 클래스를 로컬에서 정의한 프록시 클래스에서 상속 받도록하는 방법이 있습니다. 그러면 런타임에 어떻게 든 컴파일 시간에 제대로 정의 된 것처럼 인스턴스화하고 인스턴스화합니다. 이 목적은 Xcode 4.4로 코드를 컴파일하고이 팬텀 클래스를 사용하여 iOS 6에서 실행되는 바이너리를 갖도록하는 것입니다.

는 내가 전혀 엑스 코드 4.4과 이전에 컴파일에서 내 서브 클래스를 방지하기 위해 정의를 사용할 수 있습니다 알고 있지만 그 기능은 여기에 아이폰 OS 6

+0

조건부 컴파일을 사용할 수 있습니다. –

+0

Xcode 4.4로 제한하는 이유는 무엇입니까? –

+0

Xcode 4.5는 iOS 4.3 이상의 장치에서만 배포를 지원합니다. 나는 아직도 * 오래된 * (내) 하드웨어를 지원하고 싶다. 나는 대기업들이 새로운 하드웨어를 사도록 강요하는 것을 싫어한다. 새로운 클래스를 작동시키는 방법이 있다면 그렇지 않으면 http://stackoverflow.com/questions/12619124/how-to-support-both-armv6-and-armv7s-for-release에 갈 것입니다. -build-in-xcode-4-5. –

답변

1
@interface UIActivityDummy : NSObject 
//Copy UIActivity methods to avoid compiler warnings 
@end 

@implementation UIActivityDummy 
@end 

@interface MyClass : UIActivityDummy 
@end 

@implementation MyClass 

+ (void) initialize { 
    Class activityClass = objc_getClass("UIActivity"); 
    if (activityClass) { 
     class_setSuperclass([MyClass class], activityClass); 
    } 
    NSLog(@"%@", [[MyClass class] superclass]); 
} 

@end 
+0

니스! 내 프록시 클래스에 대해 약간의 더미 개인 속성을 추가하여 작동하게 만들었지 만 (https://github.com/gradha/TUSafariActivity/commit/a07fff4326beabda77637755149455d8c3202e48 참조) 이외에도 더 이상 지원되지 않지만 작동하지 않습니다. –

0

를 실행하는 장치에서 사용할 수 없습니다 의미, 나는 단지 우리는 수업을 어떻게 진행할 수 있는지 자세히 설명합니다. 희망대로 바래요. 확인해보세요.

은 사용

objc_lookUpClass (myClass가를); //이 필요한 클래스를 확인합니다. objc_getClass (myClass); // IT가 필요한 것입니다.

잘 모르겠지만 구문을 확인하십시오. 하지만, 한 번 내가 이것을 사용하고 ivar 및 메서드를 얻을 수 있었고 또한 런타임에 메서드를 추가 할 수있었습니다.

내게 다시 연락하십시오. :)

관련 문제