NSXMLParserDelegate проблема компиляции - iPhone SDK 30. против 4.0 - PullRequest
6 голосов
/ 03 июня 2010

Мой заголовочный файл определен так:

#import <Foundation/Foundation.h>

@interface Warning: NSObject  { 

В моем .m файле я делаю:

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];

Это компилируется и отлично работает под 3.0.

Если я пытаюсь скомпилировать с 4.0, я получаю эту ошибку:

не реализует Протокол NSXMLParserDelegate

Если я добавлю:

@interface Warning: NSObject <NSXMLParserDelegate>  { 

Он отлично компилируется с 4.0, но когда я пытаюсь скомпилировать с 3.0, я получаю:

ошибка: не удается найти протокол объявление для 'NSXMLParserDelegate'

Основа основы найдена правильно. Добавление NSXMLParser.h не помогает.

Любая помощь будет оценена.

Спасибо

Ответы [ 2 ]

4 голосов
/ 04 июня 2010

Согласно справочной документации библиотеки, NSXMLParser не требует строгой реализации NSXMLParserDelegate:

- (void)setDelegate:(id)delegate
- (id)delegate

NSXMLParser проверяет доступность необходимых методов делегата на лету.

Если бы NSXMLParser требовал полной реализации NSXMLParserDelegate, средства доступа были бы:

- (void)setDelegate:(id<NSXMLParserDelegate>)delegate
- (id<NSXMLParserDelegate>)delegate

Полагаю, именно поэтому в платформе не определен протокол NSXMLParserDelegate.

Итак, этот интерфейс мне кажется правильным:

#import <Foundation/Foundation.h>

@interface Warning: NSObject  { 

Все, что вам нужно сделать, это реализовать методы делегата , которые вам нужны.

Редактировать:

Вы можете попробовать использовать макросы препроцессора для активации или деактивации декларации использования протокола:

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0
@interface Warning: NSObject <NSXMLParserDelegate>
#else
@interface Warning: NSObject
#endif
{
   // interface definition ...

Я не пробовал это с 4.0, но он работал на другом примере между 3.1 и 3.2

2 голосов
/ 02 июля 2010

Мне удалось это исправить с помощью:

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0
@protocol NSXMLParserDelegate
@end
#endif
@interface Warning: NSObject <NSXMLParserDelegate>

Просто убедитесь, что в вашей реализации реализованы соответствующие методы.

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