4

我有 UIView 的子类 MyView。我在 UIView 上也有一个名为 UIView+simpleCategory 的类别。

该类别声明了一个方法 doSomething

@interface UIView (simpleCategory)

- (void) doSomething;

@end

我在从 UIView 子类 MyView 调用 doSomething 方法时遇到问题。我收到“选择器无法识别”错误。我想知道我需要做什么才能让子类识别其超类的类别方法。

在我的 UIView 子类的实例上调用 UIView 类别方法时会出现问题:

MyView *view = [[MyView alloc] init];
[view doSomething];        // throws selector not found error here

我想知道我是否在某处缺少#import,但我想了解类别和子类之间的关系。

解决方案 ::

显然我的实现很好。我只需要将类别添加到应用程序目标。我通过单击项目导航器中的类别来完成此操作。然后我单击实用程序视图(从窗口右侧滑出的视图)并选中文件检查器菜单中的“目标成员身份”复选框。这就是所有需要做的事情。感谢大家的回复。

4

2 回答 2

5

您的项目正在查找声明 UIView 类别的头文件 - 否则您会收到编译时警告。

但是在运行时,它没有找到类别方法。检查你的 UIView 类别实现文件,看看它进入了哪些目标。我打赌它不包含在您的主要目标中。

于 2012-09-24T00:43:43.503 回答
2

好吧,这就是我为测试它所做的,它奏效了。

类别:

@interface UIView (simpleCategory)

-(void)doSomething;

@end

@implementation UIView (simpleCategory)

-(void)doSomething {
    NSLog(@"Doing something");
}

我创建了一个 UIView 子类 MyView,除了导入类别之外我没有添加任何代码:

#import <UIKit/UIKit.h>
#import "UIView+simpleCategory.h"

@interface MyView : UIView

@end

然后在我的视图控制器 viewDidLoad 方法中:

MyView *view = [[MyView alloc] init];
[view doSomething];
于 2012-09-24T00:22:57.593 回答