ヘッダー ファイルの状態の先頭で:
#if !defined APPDELEGATE_H
#define APPDELEGATE_H
そして最終状態で:
#endif
おそらく、このエラーの根本的な原因は、AppDelegate.h をいくつかのクラスのヘッダー ファイルと .m ファイルに含めたことです。.m ファイルのコンパイル中に、対応する .h ファイルがインクルードされます (おそらく他の .h ファイルもインクルードされます)。これらの .h ファイルのいずれにも、AppDelegate.h が含まれています。さらに、それを .m ファイルに含めます。これにより、コンパイラの観点からインターフェイスの重複定義が発生します。上記の解決策は、実際には解決策ではありません。厳密に言えば回避策です。しかし、それは非常に標準的であり、Apple はすべてのテンプレートでそれを使用しています。問題を解決するのではなく対処するため、これは単なる回避策です。
適切な解決策は次のとおりです。回避できる場合は、.h ファイルに他の .h ファイルを含めないでください。@class
適切な場合は statementmenstを使用してください。.h ファイルが他のインクルードされた .h ファイルのいずれかに既にインクルードされている場合、.m ファイルに .h ファイルのインクルードを繰り返さないでください。「これは面倒だな……」と思うかもしれません。そして、あなたは正しいです:)したがって#if !defined XY_H / #define XY_H / #endif
、これは単なる回避策であると信じていますが、一般的なパターンを使用することをお勧めします。
#if !defined APPDELEGATE_H
#define APPDELEGATE_H
#import <UIKit/UIKit.h>
@class ViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@end
#endif