在头文件状态的开头:
#if !defined APPDELEGATE_H
#define APPDELEGATE_H
并在结束状态:
#endif
此错误最可能的根本原因是您在某些类头文件和 .m 文件中包含了 AppDelegate.h。在编译 .m 文件时,会包含相应的 .h 文件(可能还包含其他一些 .h 文件)。在任何这些 .h 文件中都包含 AppDelegate.h。另外,您将其包含在 .m 文件中。从编译器的角度来看,这将导致接口的重复定义。上面的解决方案并不是真正的解决方案。严格来说,这是一种解决方法。但它是相当标准的,苹果在他们的所有模板中都使用它。这只是一种解决方法,因为它不能解决问题,而是处理它。
正确的解决方案是:如果可以避免,在 .h 文件中不要包含其他 .h 文件。在适当的地方使用@class
声明。当 .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