【问题标题】:Appdelegate errorAppdelegate 错误
【发布时间】:2013-01-24 01:37:18
【问题描述】:

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

#import <UIKit/UIKit.h>

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;

@end

【问题讨论】:

标签: ios objective-c appdelegate


【解决方案1】:

在头文件状态的开头:

#if !defined APPDELEGATE_H
#define APPDELEGATE_H

在结束状态:

#endif

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

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

【讨论】:

  • 能否请您通过代码告诉它(一些示例)。因为我是 ios 新手。
  • 这不是 iOS 问题,而是与 C/Objective-C 相关。但是,我将它添加到您的代码中。
【解决方案2】:

我刚刚遇到了这个问题。

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

通过这样做,这些文件与要导入的 AppDelegate 发生冲突,我收到一个编译错误,提示“类 `AppDelegate 的接口定义重复。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多