Метод Objective-C доступен для подклассов? - PullRequest
2 голосов
/ 03 августа 2010

У меня есть следующая категория:

@interface UIViewController (Additions)

- (void)exampleMethod;

@end

-----

#import "UIViewController+Additions.h"

@implementation UIViewController (Additions)

- (void)exampleMethod {
    NSLog(@"Example.");
}

@end

У меня также есть следующий абстрактный класс:

@interface DFAbstractViewController : UIViewController

@end

-----

#import "DFAbstractViewController.h"
#import "UIViewController+Additions.h"

@implementation DFAbstractViewController

@end

А вот конкретный класс:

#import "DFAbstractViewController.h"

@interface DFConcreteViewController : DFAbstractViewController

@end

-----

#import "DFConcreteViewController.h"

@implementation DFConcreteViewController

- (void)viewDidLoad {
    [self exampleMethod];
}

@end

Хорошо. Поэтому я понимаю, что конкретный класс DFConcreteViewController может использовать методы, импортированные из категории в своем суперклассе DFAbstractViewController. Это правильно, потому что вызов метода работает как положено.

Проблема в том, что Xcode выдает мне следующее предупреждение: 'DFConcreteViewController' may not respond to '-exampleMethod'.

Я не понимаю, как этот метод и его доступность для DFConcreteViewController не совсем понятны компилятору? Возможно, я неправильно понял что-то о категориях?

1 Ответ

11 голосов
/ 03 августа 2010

правый. Я понял. Это была элементарная ошибка, и я чувствую себя довольно глупо. Если вы хотите, чтобы методы вашей категории были видны подклассам, обязательно импортируйте свою категорию в заголовок :

#import "UIViewController+Additions.h"

@interface DFAbstractViewController : UIViewController

@end
...