1

この迷惑な警告が表示されます

Apple Mach-O リンカーの警告
仮定義のマージで位置合わせが失われました _searchFlag

このようにconstant.hファイルで検索フラグを宣言しました

BOOL 検索フラグ

過去 2 日間、この問題で立ち往生しており、Google から考えられるすべての解決策を試しましたが、どれも機能していないようです。

私のアプリは、設定を追加した armv6 と v7 の両方の arch をサポートしていますが、この dosent が問題のようです。この bool フラグだけが 2 日間頭を悩ませています。

これについて私を助けてくださいありがとう

4

2 に答える 2

2

私の推測では、このヘッダー ファイルを複数のソース ファイルにインクルードしていると思われます。_searchFlagここに貼り付けたように、ヘッダーのインクルードごとに 1 つずつ、という複数のシンボルが生成されます。

ここでの通常のパターンは、複数のソース ファイルからアクセスできるBOOLという型のグローバル変数を宣言しようとしていると仮定すると、キーワード を使用してヘッダーで宣言し、1 つのソース ファイルでのみ定義することです。searchFlagextern

ヘッダー ファイル (たとえば、「Foo.h」と呼びます):

extern BOOL searchFlag;

1 つのソース ファイル (「Foo.m」など):

BOOL searchFlag;

多くのソース/ヘッダー ファイル:

#import "Foo.h";

を持たないことでextern、ヘッダーをインクルード/インポートするすべてのソースファイルで技術的に再宣言しています。

于 2012-01-18T00:50:56.160 に答える
1

ヘッダーのグローバルは、ObjC では不適切です。グローバルの使用について判断を下すことはありませんが (グローバルが必要になる場合があるため)、別の方法でグローバルを宣言します。

私が考えることができる最もクリーンで簡単な方法 (および私の好みの方法) は、グローバルのアクセサーをクラス メソッドとして実装し、ソース ファイルで変数自体を静的変数として宣言する新しいクラスを作成することです。

myglobal.h

@interface MyGlobal : Object
{
}

+ (BOOL)searchFlag;
+ (void)setSearchFlag:(BOOL)aFlag;

@end


myglobal.m

#import "myglobal.h"

// Static variables
static BOOL _searchFlag = NO;

@implementation MyGlobal

+ (BOOL)searchFlag
{
    return _searchFlag;
}

+ (void)setSearchFlag:(BOOL)aFlag
{
    _searchFlag = aFlag;
}

@end

[MyGlobal searchFlag]この方法を使用すると、グローバルにアクセスするのはまたはと同じくらい簡単[MyGlobal setSearchFlag: YES]です。

于 2012-01-18T01:03:30.057 に答える