4

ARC対応のObjective-Cプロジェクトにライブラリのヘッダーファイルをインクルードしました。

ライブラリがARCを有効にしてコンパイルされていないことは知っていますが、問題はライブラリのヘッダーファイル、特に次の行にあります。

template <typename Type_>
static inline Type_ &MSHookIvar(id self, const char *name) {
    Ivar ivar(class_getInstanceVariable(object_getClass(self), name));
    void *pointer(ivar == NULL ? NULL : reinterpret_cast<char *>(self) + ivar_getOffset(ivar));
    return *reinterpret_cast<Type_ *>(pointer);
}

このエラーが発生します:

Cast of an Objective-C pointer to 'char *' is disallowed with ARC

このエラーを修正することは可能ですか?

ヘッダーファイル全体はここにあります:http://puu.sh/sTrH

4

2 に答える 2

5

の初期化を次のように変更する必要がありますpointer

void *pointer(ivar == NULL ? NULL : reinterpret_cast<char *>((__bridge void *)self) + ivar_getOffset(ivar));
于 2012-05-04T17:14:30.963 に答える
-1

プロジェクトのターゲットに移動し、[ビルドフェーズ]タブを選択します。[ソースのコンパイル]セクションを開き、そのヘッダーファイルを見つけます。コンパイラフラグ「-fno-objc-arc」から引用符を引いたものを追加します。これにより、そのファイルが定期的にコンパイルされ、コードが非アーク環境で機能することを前提として問題が修正されるはずです。

于 2012-05-04T16:53:58.243 に答える