использовать статическую функцию из протокола в функции target-c - PullRequest
0 голосов
/ 28 октября 2011

Я хочу использовать статическую функцию из протокола в функции:

    @implementation IPadPanoramaViewController
    - (void)viewDidLoad
    {
     [self.view addSubview:[PanoramaContent getPanoramaContentByPanoramaItem:[[PanoramaListItem alloc] init]]; 
     [super viewDidLoad];
}
@end

        @protocol PanoramaItemProtocol

        + (UIView *) getPanoramaItemBySection;

        @end


        @implementation PanoramaContent
    + (UIView *) getPanoramaContentByPanoramaItem:(id<PanoramaItemProtocol>) itemKind {

                return [itemKind getPanoramaItemBySection]; //here is the problem "unrecognized selector sent to instance"
        }
    @end

Я хочу, чтобы "PanoramaListItem" не был NSObject

Ответы [ 2 ]

1 голос
/ 28 октября 2011

Проблема в том, что вы определили getPanoramaBySection как метод класса, когда вызываете его в экземпляре.В декларации протокола замените + на -.

0 голосов
/ 28 октября 2011

Во-первых, статические методы можно отправлять только в класс. Если вы не хотите создавать объект, параметр getPanoramaContentByPanoramaItem: должен иметь тип Class. Вы можете использовать что-то вроде следующего:

 + (UIView *) getPanoramaContentByPanoramaItem:(Class)itemKind {
     UIView *v = nil;
     if( [itemKind respondsToSelector:@selector(getPanoramaItemBySection)] ) {
         v = [itemKind getPanoramaItemBySection];
     }
     return v;
 }

и отправить сообщение:

[self.view addSubview:[PanoramaContent getPanoramaContentByPanoramaItem:[PanoramaListItem class]]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...