我有一个类,我已经为其创建了类别。现在我想访问原始类中的类别方法,但我收到错误:
错误:找不到实例方法'-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 中实现相同的目标。 类别和原始类在单独的文件中。我在原始类中导入了类别接口文件但是没有用。
答案 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 文件必须是目标的一部分。