0

私はiOS6で導入されたものから継承したコードを持っておりUIActivity、Xcode 4.5で問題なくコンパイルされ、iOS 6以前のバージョンで問題なく動作します(実行時にクラスの可用性を検出します)。ただし、このコードをSDKにクラスが含まれていないXcode 4.4でコンパイルすることは可能ですか?UIActivity

UIActivityを前方宣言すると、メソッドが呼び出され、コンパイラがクラスがすでに継承ツリーのルートにあることを警告deallocするため、メソッドはコンパイルされません。superたぶん、このクラスをローカルで定義したプロキシクラスから継承させ、実行時になんらかの方法でスウィズルして、コンパイル時に適切に定義されたかのようにインスタンス化する方法がありますか?これの目的は、Xcode 4.4でコードをコンパイルし、そのファントムクラスを使用してiOS6でバイナリを実行することです。

定義を使用して、サブクラスがXcode 4.4以前でまったくコンパイルされないようにすることができますが、それは、iOS6を実行しているデバイスで機能を使用できないことを意味します。

4

2 に答える 2

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
于 2012-12-06T14:03:39.550 に答える
0

ここでは、run-rimeでクラスを取得する方法について詳しく説明します。必要なものになることを願っています。確認してください。

使用するだけです:

objc_lookUpClass(myClass);//必要なクラスをチェックします。objc_getClass(myClass);//ITが必要なものです。

よくわからないので、構文を確認してください。しかし、かつて私はこれを使用し、ivarとメソッドを取得することができ、実行時にメソッドを追加することもできました。

どんな懸念でも私に戻ってください。:)

于 2012-12-06T12:57:52.657 に答える