Appdelegate错误

时间:2013-02-08 10:01:38

标签: ios objective-c appdelegate

我的运行时错误是类app delegate的重复接口定义。这个代码有什么问题。

#import <UIKit/UIKit.h>

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;

@end

2 个答案:

答案 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的重复接口定义。

我通过删除引用并按预期复制文件来解决问题。这可能不是你的问题,因为你有一个运行时错误,但只是抬头。

相关问题