在ObjC中声明子类失败

时间:2012-06-08 13:13:53

标签: objective-c

这是我正在尝试做的事情:

我想将一些方法放到单独的.h和.m文件中,以便更好地概述我的代码。

所以基本上我有myViewController我希望使用方法myReactionOnAnimationDidEnd: 作为类别扩展

所以我在"myCustomClasses.h"中声明了以下内容:用我想要的方法扩展它:

#import "myViewController.h"
@interface myViewController (myReactionOnAnimationDidEnd)
- (void)myReactionOnAnimationDidEnd:(NSNotification *)aNotification;
@end

"myCustomClasses.m"中的实施是:

#import "myCustomClasses.h"
#import "myViewController.h"

@implementation myViewController (myReactionOnAnimationDidEnd)    
- (void)myReactionOnAnimationDidEnd:(NSNotification *)aNotification {

    self.myLabel1.text = @"Test"; 
}
@end

编译器抛出构建失败错误“无法找到'myViewController'的接口声明”

所以这是我的问题:

  1. 第一个奇怪的是,如果我对UIViewController而不是myViewController执行完全相同的操作,一切正常。但由于myViewController是UIViewController的子类,为什么它也不适用于myViewController(@interface iSnahViewController:UIViewController)?

  2. 另一个奇怪的事情是,如果我完全跳过@declaration,“myCustomClasses.m”中的@implementation运行正常。现在怎么可能?

  3. 谢谢你们! 任何帮助非常感谢!! 汉斯


    现在,有趣的是,即使我使用新文件创建类别,也会出现同样的建筑错误 - > ObjC - 类别模板。它基本上创建了以下两个文件:

    头文件中的

    #import "myViewController.h"
    
    @interface myViewController (myCategories)  //<-- "Cannot find interface declaration for 'myViewController'"
    
    
    
    @end
    

    并使用.m文件

    #import "myViewController+myCategories.h"
    
    @implementation myViewController (myCategories)
    
    
    @end
    

    这已足以从上面提出错误。

2 个答案:

答案 0 :(得分:0)

myCustomClasses.m可能应该包含myCustomClasses.h而不是myViewController.h,因此编译器会看到类别声明。由于myCustomClasses.h已包含myViewController.h,因此编译器应具有所有必要的声明。

答案 1 :(得分:0)

我终于开始工作了!

当发生建筑错误时,我将Category-.h文件导入到primery Class的.h文件中:

#import "myViewController+myCategories.h" //<-- in the  "myViewController.h" 

导致上面的建筑错误。这似乎是错的!所以不要这样做。

我仍然不完全理解“myViewController”类如何在没有导入.h文件的情况下了解它的类别,但是因为这似乎是一种工作方式,我想分享和你在一起。

感谢大家的帮助!!