原始访问类别方法Objective C class

Accessing category method in original Objective C class

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

error: instance method '-hasSound' not found (return type defaults to 'id') [-Werror,-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[=24 中实现同样的事情=]. 类别和原始 class 在不同的文件中。我已经在原始 class 中导入了类别界面文件,但是没有用。

您没有显示足够的 #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 文件必须是目标的一部分。