多个ViewController继承导致Apple Mach-O链接器错误

时间:2014-02-12 07:27:48

标签: ios objective-c xcode inheritance

我正在设置一个名为“BHAccountBaseViewController”的基本视图控制器和另外两个从基本控制器继承一些基本功能的视图。

  1. “BHAccountBaseViewController”继承自“UIViewController”
  2. “BHAccountViewController”(实现UITextFieldDelegate)并继承自“BHAccountBaseViewController”
  3. 最后我有一个最近创建的类,我只调用“BHCreateProfileViewController”,我只是简单地将#import指令包含到“BHAccountBaseViewController”继承此类Xcode由于APPLE MACH-O LINKER ERROR而无法编译!
  4. clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

    思考?这些是我的三个头文件

    BHAccountBaseViewController

    #import <UIKit/UIKit.h>
    #import "BHFileManager.h"
    
    @interface BHAccountBaseViewController : UIViewController
    @end
    

    BHAccountViewController

    #import "BHAccountBaseViewController.h"
    @interface BHAccountViewController : BHAccountBaseViewController<UITextFieldDelegate>
    @end
    

    BHCreateProfileViewController

    #import "BHAccountBaseViewController.m"
    @interface BHCreateProfileViewController : UIViewController <UITextFieldDelegate>
    @property (strong, nonatomic) id user;
    @end
    

    如果我在最后一个文件上注释掉导入链接器错误就行了!但是我希望能够继承我的基础... ...想法?

    非常感谢帮助!

3 个答案:

答案 0 :(得分:1)

在上面给出的BHCreateProfileViewController的实现中,我发现代码看起来在第一行出错了。如何修复它如下:

#import "BHAccountBaseViewController.m"

#import "BHAccountBaseViewController.h"

我想知道为什么BHCreateProfileViewController继承自UIViewController而不是BHAccountBaseViewController。你能解释一下吗?

答案 1 :(得分:1)

这可能是由于保留周期死锁问题。你必须使用前向类声明,即你可以尝试@Class而不是#import。请参考以下内容:

Objective-C: Forward Class Declaration

@class vs. #import

这些可能有所帮助。

答案 2 :(得分:0)

在编译时,您的编译器实际上会查找您的接口文件而不是实现文件。即使.m文件不可用,编译器也不会打扰。因此,在导入时,您应该导入.h而不是.m。