Реализация категории, показывающая возможную проблему - PullRequest
0 голосов
/ 18 июня 2011

У меня есть класс Class, который имеет частную категорию (@interface Class (Private)).У категории есть метод с именем "-run".

Но, когда XCode показывает, что [classInstance run];msgstr "может не отвечать на -run".Я не уверен, почему это так.Метод работает нормально и объявлен в том же файле .m, что и реальный класс.Прямо над фактической реализацией класса.

Есть идеи, что я делаю не так?

Вот весь мой файл .m.Я знаю, что сейчас он расширяет NSArray, но я сделал так, чтобы показать пример без какой-либо другой зависимости .h.

#import <Foundation/Foundation.h>
@implementation NSArray (Private)

-(void)runMethod {}

@end

@implementation NSArray

- (void)letsPlay {
    [self runMethod]; // says -runMethod might be missing
}

@end

1 Ответ

2 голосов
/ 18 июня 2011

Пока компилятор видит объявление метода run до вызова метода, вы не увидите эту ошибку.

Обычно закрытые категории создаются следующим образом:

#import "M.h"
@interface M(PrivateGunk)
.... declarations here ...
@end

@implementation M
@end

@implementation M(PrivateGunk)
.... impl here ...
@end

Несмотря на то, что многие из нас перешли к добавлению закрытых элементов в расширение класса в верхней части файла, что также позволяет использовать @properties, ivars и т. Д. ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...