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

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

この質問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 インポートがチェック内にあることを確認する必要があります。