【问题标题】:Errors when making circular reference imports进行循环引用导入时出错
【发布时间】:2011-11-05 11:26:35
【问题描述】:

我的程序运行良好,但我改变了一些东西,现在它有超过 48 个错误。

我想我知道问题所在,但我不知道如何解决它。我为我的所有UIViewControllers 创建了一个名为mViewBase 的类。

我决定在我所有视图的底部都有一个导航栏,用于访问其他名为 cakes2 的视图控制器。所以 cakes2.h 导入 mViewBasemViewBase 导入 cakes2.h

您必须能够在 Objective-C 中做到这一点。有人知道我能做什么吗?

我的 mViewBase.h 文件:

#import <UIKit/UIKit.h>
#import "Cakes2.h"

@interface mViewBase : UIViewController {
    UIView *mBackground;
    UIView *mBackArrow;
    UITextView *mTitle;
    //    Cakes2 *mCakes;
}

-(void) aSetTitle: (NSString *) NewTitle;
-(IBAction) aBack: (id) tender;
-(IBAction) aHome: (id) sender;
-(IBAction) aCakes: (id) sender;
-(IBAction) aCall: (id) sender;
-(IBAction) aDirections: (id) sender;
@end

我的 Cakes2.h 文件:

#import <UIKit/UIKit.h>
#import "Gallery.h"
#import "WebView.h"
#import "mViewBase.h" // Circular reference! But I need it

@interface Cakes2 : mViewBase <UITableViewDelegate, UITableViewDataSource> {
    //    Gallery *mGallery;
    IBOutlet UITableView *mMenu;
    // WebView *mWebView;
}
-(IBAction) aOpenWeb;
@end

【问题讨论】:

  • 你确定是这个问题吗?根据一些探索,我刚刚在objective-c中完成了“#import指令确保每次编译只导入(包含)一次文件”。

标签: objective-c import compiler-errors


【解决方案1】:

您可以在其中一个头文件中使用前向声明来避免导入另一个头文件的需要。例如,在 mViewBase.h 中,你可以说:

@class Cakes2;

现在编译器知道“Cakes2”指的是一个类,你不需要导入整个 Cakes2.h 文件。

【讨论】:

  • 尝试在.h 文件中包含尽可能少的文件,更喜欢@class 前向声明。头文件旨在公开类的公共接口。
  • 你好,我把@class放在头文件中,把导入放在m文件中:)谢谢你,Ted
【解决方案2】:

我认为您或许应该考虑使用UITabBarController。它专门用于从屏幕底部的栏中管理多个视图控制器。

【讨论】:

  • 您好,谢谢您的评论,我正在考虑,但我的项目快完成了,不想撕掉代码。
猜你喜欢
  • 1970-01-01
  • 2012-06-17
  • 2015-12-07
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
相关资源
最近更新 更多