0

私のプロジェクトはデバッグ モードで正常にコンパイルおよび実行されますが、リリース x86_64 コンパイルに切り替えると、NSRect を使用して Bounds を設定しようとするとコンパイラ エラーが発生します。(エラーは「setBounds の引数 1 の型に互換性がありません」と表示されます。)

NSGeometry.h の「if NS_BUILD_32_LIKE_64」言語が true になり、必要な typedef が使用されるように、Cocoa (Foundation) インポートの上に NS_BUILD_32_LIKE_64 マクロ定義を追加することを提案している投稿がたくさんあります。そこで、問題のあるクラスの h ファイルにマクロ定義を追加しました。

#define NS_BUILD_32_LIKE_64 1
#import <Cocoa/Cocoa.h>

それでも同じコンパイルエラーが発生します。

また、NSRect から CGRect に明示的に変換しようとしたため、この . . .

// rectIncomingSource is an NSRect
calayer.bounds = rectIncomingSource;

. . . 私はこれを書きました:

calayer.bounds = CGRectMake(rectIncomingSource.origin.x, rectIncomingSource.origin.y, rectIncomingSource.size.width, rectIncomingSource.size.height);

同じエラー。

そして、境界を設定することが唯一の問題になるのはなぜでしょうか? Apple docs によると、NSInteger と NSUInteger が主な変換の問題であり、私はそれらをいたるところで使用していますが、コンパイラはそれらについて文句を言いません。では、なぜ境界で窒息するのでしょうか?

私はおそらくここで本当に単純な何かを見逃しています — ウィザードに謝罪します. 視覚障害者のための何か助けはありますか?

4

1 に答える 1

1

ターゲット情報ウィンドウは、これを理解する手がかりを与えてくれました:

特定のクラスの h ファイルに NS_BUILD_32_LIKE_64 定義を入れていました。これは、通常、プロジェクトの「その他のソース」に存在する pch 拡張子を持つプレフィックス ヘッダー ファイルにあるはずです。

#ifdef __OBJC__
    #define NS_BUILD_32_LIKE_64 1 // this line added
    #import <Cocoa/Cocoa.h>
#endif

そうですね、これは明らかだったと思います。しかし、おそらく他のプリプロセッサの初心者はこの説明が役立つと思うので、質問を削除しません.

そして、境界を設定することが唯一の問題であるはずだった理由をまだ理解していません。多分コアアニメーションと何か関係がありますか?

于 2011-06-23T17:03:28.787 に答える