cocoalumberjack を構成しようとしていますが、XCode にddLogLevel
セットを追加するとLOG_LEVEL_VERBOSE
、「宣言されていない識別子の使用」エラーがスローされます。何故ですか?回避する方法は?
4 に答える
この質問DerivedData
は、 Xcodeをクリアして再起動すると、この種のエラーが解決することを示しています。
ただし、プリコンパイル済みヘッダーには変数を含めないでください。変数はすべてのソース ファイルに含まれ、接頭辞ファイルは通常のヘッダー ファイルに比べてやや複雑になるためです。
Constants.h
以下を含むファイルを使用することをお勧めします。
extern int ddLogLevel;
そして#import
それをプレフィックスファイルに入れます。
次に、次のものを作成Constants.m
します。
int ddLogLevel =
#ifdef DEBUG
LOG_LEVEL_VERBOSE;
#else
LOG_LEVEL_ERROR;
#endif
このように のインスタンスは 1 つしかなくddLogLevel
、必要に応じて実行時に簡単に変更できます。
プレフィックス ファイルのベスト プラクティスに関するヒントについては、この質問を参照してください。
私にとってそれを解決したのは、Objective-C プロジェクトに Xcode 8.0 を使用しているときにに変更#import <CocoaLumberjack/CocoaLumberjack.h>
することでした。@import CocoaLumberjack;
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 インポートがチェック内にあることを確認する必要があります。