1

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

我想将一些方法放入单独的 .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 工作得很好。现在怎么可能??

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


现在,有趣的是,即使我使用 New File -> ObjC - Category Template 创建类别,也会出现同样的构建错误。它基本上创建以下两个文件:

在头文件中:

#import "myViewController.h"

@interface myViewController (myCategories)  //<-- "Cannot find interface declaration for 'myViewController'"



@end

并使用 .m 文件

#import "myViewController+myCategories.h"

@implementation myViewController (myCategories)


@end

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

4

2 回答 2

0

myCustomClasses.m应该可能 includemyCustomClasses.h和 not myViewController.h,所以编译器会看到类别声明。由于myCustomClasses.h已经包含myViewController.h,编译器应该有所有必要的声明。

于 2012-06-08T13:31:08.407 回答
0

我终于让它工作了!

随着构建错误的发生,我将 Category-.h 文件导入到primery Class的 .h 文件中:

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

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

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

谢谢大家帮忙!!

于 2012-06-10T12:48:57.510 回答