Скажем, у нас есть родительский класс
ParentViewController.h
@interface ParentViewController
....
@end
ParentViewController.m
@interface ParentViewController()
- (NSArray *)selectedItems;
@end
@implementation ParentViewController
.....
@end
А затем мы создадим его подкласс
ChildViewController.h
@interface ChildViewController : ParentViewController
....
@end
ChildClassViewController.m
@implementation ChildViewController
- (void)doSomething
{
// XCode Warning Flag on this line
NSUInteger count = [self selectedItems];
.....
}
XCode установит флаг предупреждения в строке с комментариями и сообщит, что «метод экземпляра -selectedItems» не найден (тип возвращаемого значения по умолчанию равен «id ').
Да, я знаю, что в ObjC нет такого понятия, как закрытые методы, но использование пустой категории дает такую возможность. Но как-то она не наследуется подклассами.
Я обычно исправляю это, перемещая метод из ParentViewController.m в ParentViewController.h. Это кажется странным, я теряю способность делать метод частным только потому, что мне нужно его подкласс.
Теперьмой вопрос:
Почему родительский подкласс не может найти те методы, которые объявлены в его категории в файле .m?
есть способ удалитьФлаг предупреждения, но не теряющий возможности сохранять метод закрытым.
Надеюсь, кто-то с большим опытом сможет помочь объяснить эту досадную проблему.