簡體   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