3

iOS アプリで使用するために UIView を拡張するクラスを持つフレームワークを作成しています。ストーリーボードを使用してビューを画面に配置するだけでは、リンカにクラスをアプリに含めるように強制するには不十分なので、

Unknown class MyClassName in Interface Builder file. 

アプリでは、リンクを強制する方法がいくつかありますが、.framework でアプリを特定のクラスにリンクするように強制することができるかどうかを知りたいです。

C で行うトリックを試しましたが、Objective-C では合法ではありません。ビューの .h で、次のように静的クラス グローバル変数を作成しようとしました

static Class myClassInit = [MyClass クラス];

そうすれば、アプリに私の .h が含まれている場合、このコードは使用法をコンパイル ユニットに入れ、うまくいけばリンクを強制します。残念ながら、これはコンパイル時に静的を知る必要があるため、コンパイルされません-私はこれを取得します:

初期化要素はコンパイル時の定数ではありません

ストーリーボードで使用して.hを含めるだけで、アプリを強制的にクラスにリンクさせるためにフレームワークプロジェクトにできることについて、他のアイデアはありますか?

たとえば、アプリにリンカー フラグを追加したり、アプリに[MyClass class]. アプリ メーカーに、クラスの通常の使用以外のことを強制しないソリューションが必要です。

たとえば、リンケージを強制するためのプリプロセッサ ディレクティブまたはその他の Objective-C の方法はありますか?

そして、これを知らなかった場合に備えて: アウトレットを持っていたり、ビューのプロパティを設定したりするだけでは、ビューをリンクするのに十分ではありません。

4

2 に答える 2

3

私はうまくいくものを見つけました

これをヘッダーの一番下の の後に置くと、@endリンケージが強制されます

#define UNIQUENAME(s) s##__COUNTER__
Class UNIQUENAME(MyClassForceLink)()
{
    return [MyClass class];
}

静的関数は使用できません (リンカーによって削除されます)。アプリにヘッダーを複数回含める場合は、重複して定義されたシンボルの競合がないように一意の名前が必要です。

于 2013-08-23T14:55:11.550 に答える