我的运行时错误是类app delegate的重复接口定义。这个代码有什么问题。
#import <UIKit/UIKit.h>
@class ViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController;
@end
答案 0 :(得分:0)
在头文件状态开始时:
#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
答案 1 :(得分:0)
我刚遇到这个问题。
我所做的是从另一个项目中拖放具有#import AppDelegate
的文件,该项目还包含确切命名的AppDelegate.h / .m类。当我将文件放入我的项目时,我从该项目中引用它们而不是复制它们。
通过这样做,这些文件与AppDelegate要导入的冲突相冲突,并且我收到了一个编译错误,指出'类AppDelegate的重复接口定义。
我通过删除引用并按预期复制文件来解决问题。这可能不是你的问题,因为你有一个运行时错误,但只是抬头。