访问原始Objective C类中的类别方法

时间:2018-02-19 13:34:47

标签: objective-c objective-c-category

我有一个类,我已经为其创建了类别。现在我想访问原始类中的类别方法,但我收到错误:

  

错误:找不到实例方法'-hasSound'(返回类型   默认为'id')[ - 错误,-Wobjc-method-access]

// Animal.h 
@interface Animal: NSObject 
- (void)sound;
@end

// Animal.m
#import "Animal+Additions.h"
@implementation Animal
- (void)sound {
 [self hasSound];
}
@end

// Animal+Additions.h
@interface Animal (Additions) 
- (BOOL)hasSound;
@end

// Animal+Additions.h
@implementation Animal (Additions)
- (BOOL) hasSound {
   return YES;
}
@end

我一直在 Swift 做同样的事情,但不确定如何在 Objective C 中实现相同的目标。 类别和原始类在单独的文件中。我在原始类中导入了类别接口文件但是没有用。

1 个答案:

答案 0 :(得分:2)

您没有展示足够的#import陈述,因此我必须假设它们不存在。你需要它们。

另一个可能的问题是,至少根据您的评论,您似乎有两个 Animal + Additions.h 文件但没有 Animal + Additions.m 文件。

这个完整的代码在四个文件中为我编译:

//  Animal.h

#import <Foundation/Foundation.h>
@interface Animal: NSObject
- (void)sound;
@end

//  Animal.m

#import "Animal.h"
#import "Animal+Additions.h"
@implementation Animal
- (void)sound {
    [self hasSound];
}
@end

// Animal+Additions.h

#import "Animal.h"
@interface Animal (Additions)
- (BOOL)hasSound;
@end

//  Animal+Additions.m

#import "Animal+Additions.h"
@implementation Animal (Additions)
- (BOOL) hasSound {
    return YES;
}
@end

请注意所有#import语句,并注意 Animal.m 文件必须是目标的一部分。