繁体   English   中英

代理错误

[英]Appdelegate error

我收到运行时错误作为类应用程序委托的重复接口定义,所以这段代码有什么问题。

#import <UIKit/UIKit.h>

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;

@end

在头文件状态的开头:

#if !defined APPDELEGATE_H
#define APPDELEGATE_H

并在结束状态:

#endif

此错误的根本原因可能是您在某些类头文件和.m文件中包含了AppDelegate.h。 在编译.m文件时,将包括相应的.h文件(可能还包括其他一些.h文件)。 在任何这些.h文件中,都包含AppDelegate.h。 另外,您将其包括在.m文件中。 从编译器的角度来看,这将导致接口的重复定义。 上面的解决方案并不是真正的解决方案。 严格来说,这是一种解决方法。 但这是相当标准的,Apple在所有模板中都使用了它。 这只是一种解决方法,因为它不能解决问题,但可以解决问题。

正确的解决方案是:在.h文件中,如果可以避免的话,不要包括其他.h文件。 在适当的地方使用@class statemenst。 当.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

我只是遇到了这个问题。

我所做的是将包含#import AppDelegate文件从另一个项目中拖放,该项目也包含完全命名的AppDelegate.h / .m类。 当我将文件拖放到项目中时,我从该项目中引用了它们,而不是复制它们。

这样,这些文件就冲突了,AppDelegate导入了这些文件,并且出现了编译错误,提示“类'AppDelegate的接口定义重复”。

我通过删除引用并按预期复制文件来解决了该问题。 这可能不是您的问题,因为您遇到了运行时错误,但只有注意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM