Вызов метода Objective-C в вопросе категории - PullRequest
1 голос
/ 08 сентября 2011

Я расширил один из моих классов категорией для анализа конкретного файла XML.В классе ListBuilder.m я определил метод с именем newsloop, который просто циклически перебирает список элементов после создания списка.

-(void)newsloop; объявлен в закрытой категории, объявленной внутри ListBuilder.m.

В моей категории, ListBuilder+XMLParser.m, я вызываю новостную ленту после создания списка:

-(void) parserDidEndDocument: (NSXMLParser *)parser {
    if ( [self.newslist count] >= 2 )
        [self newsloop];    // warning flagged here
    else
        // to some other default stuff
}

Xcode (4, если это имеет значение) показывает предупреждение Method '-newsloop' not found (return type defaults to 'id').

Зачем вызывать предупреждение, поскольку, если я прав, категории имеют доступ ко всем методам, определенным в классе, который они расширяют.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Компилятору все еще нужно знать, что метод (или селектор) newsloop существует.При компиляции файла категории этот метод нигде не был объявлен, поэтому он выдаст предупреждение.

Если вы хотите сохранить этот метод закрытым, вам следует создать файл ListBuilder + Private.h, в котором вы объявляете любой общий ресурсчастные методы, и включите их в ListBuilder.m и в свою категорию ListBuilder + XMLParser.

Технически пользователи вашего кода могут сами включать заголовок и также вызывать метод, но в любом случае есть другие способы сделать этов Objective-C нет такой вещи как частные / публичные методы.Кроме того, включение заголовка с «Private» и вызов методов - это их проблема, а не ваша.

1 голос
/ 08 сентября 2011

Категория не знает, что метод newsloop существует в классе, потому что он не объявлен в заголовочном файле;только в частной категории.Вот почему вы получаете предупреждение.Вы должны объявить метод в заголовочном файле или в протоколе, который реализует класс.

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