15

cocoalumberjack を構成しようとしていますが、XCode にddLogLevelセットを追加するとLOG_LEVEL_VERBOSE、「宣言されていない識別子の使用」エラーがスローされます。何故ですか?回避する方法は?

ここに画像の説明を入力

4

4 に答える 4

8

この質問DerivedDataは、 Xcodeをクリアして再起動すると、この種のエラーが解決することを示しています。

ただし、プリコンパイル済みヘッダーには変数を含めないでください。変数はすべてのソース ファイルに含まれ、接頭辞ファイルは通常のヘッダー ファイルに比べてやや複雑になるためです。

Constants.h以下を含むファイルを使用することをお勧めします。

extern int ddLogLevel;

そして#importそれをプレフィックスファイルに入れます。

次に、次のものを作成Constants.mします。

int ddLogLevel =
#ifdef DEBUG
                 LOG_LEVEL_VERBOSE;
#else
                 LOG_LEVEL_ERROR;
#endif

このように のインスタンスは 1 つしかなくddLogLevel、必要に応じて実行時に簡単に変更できます。

プレフィックス ファイルのベスト プラクティスに関するヒントについては、この質問を参照してください。

于 2014-08-04T06:47:45.720 に答える
6

私にとってそれを解決したのは、Objective-C プロジェクトに Xcode 8.0 を使用しているときにに変更#import <CocoaLumberjack/CocoaLumberjack.h>することでした。@import CocoaLumberjack;

于 2016-10-16T09:46:47.487 に答える
2

Droppyの投稿は正しいので、そうすることをお勧めしますが、質問に直接対処したいと思います. コードに欠陥があり、エラーが発生する可能性があります。

LOG_LEVEL_VERBOSEで定義されていDDLog.hます。ヘッダー ファイルは が定義されているDDLog.h場合にのみインポートされますが、この条件なしで使用されます。したがって、定義されていない場合は未定義になります。__OBJC__LOG_LEVEL_VERBOSE__OBJC__LOG_LEVEL_VERBOSE

なぜ__OBJC__定義されないのでしょうか?プレフィックス ヘッダーは、C、C++、Objective-C、および Objective-C++ ファイルの先頭に追加されます。は後者の 2 つに対してのみ定義されているため__OBJC__、プロジェクトに C または C++ ファイルがある場合、エラーが発生します。

これを知っていれば、ddLogLevel定義が#ifdef __OBJC__チェック内にある必要があることは明らかです。ただし、Droppy が言ったことを実行し、すべての Objective-C インポートがチェック内にあることを確認する必要があります。

于 2015-04-14T12:40:00.267 に答える