Ошибка при создании проекта с NSXMLParserDelegate - PullRequest
3 голосов
/ 24 марта 2010

TurbineXMLParser.h

#import <Foundation/Foundation.h>

@interface TurbineXMLParser : NSObject <NSXMLParserDelegate> {
...

TurbineXMLParser.m

#import "TurbineXMLParser.h"

Я только что добавил новый класс в свой текущий проект, который я ранее тестировал в одном файле. Когда я пытаюсь построить проект, я получаю сообщение об ошибке: error: не удается найти объявление протокола для 'NSXMLParserDelegate'

Я немного искал и попытался добавить следующее ...

TurbineXMLParser.h

#import <Foundation/Foundation.h>

@protocol NSXMLParserDelegate;

@interface TurbineXMLParser : NSObject <NSXMLParserDelegate> {
...

но все равно выдается предупреждение: предупреждение: определение протокола 'NSXMLParserDelegate' не найдено

любая помощь будет высоко ценится

.
.
.

EDIT_002:

Удаление <NSXMLParserDelegate> из @interface сработало, но мне любопытно, почему я запутался и запутался? У меня сложилось впечатление, что объект делегата должен принять протокол NSXMLParserDelegate, то есть добавить <NSXMLParserDelegate> после суперкласса.

У меня есть два случая, когда это работает по-разному, во-первых, это проект в одном файле командной строки, где, если я не добавлю <NSXMLParserDelegate>, предупреждает, что:

class 'TestXMLParser' does not implement the 'NSXMLParserDelegate' protocol

Во втором случае я настраиваю несколько файлов * .h и * .m (одним из классов является MyXMLParser.h, MyXMLParser.m), когда я пытаюсь построить проект с <NSXMLParserDelegate>. Я получаю эту ошибку:

error: cannot find protocol declaration for 'NSXMLParserDelegate'

Удалить <NSXMLParserDelegate> и все работает нормально, без ошибок, без предупреждения ...

1046 * Гэри *

Ответы [ 4 ]

6 голосов
/ 06 апреля 2010

Объявление NSXMLParserDelegate в прямом направлении вряд ли поможет, его нужно импортировать, если вы соответствуете ему.

Исходная ошибка - это то, что вы получите, если не подключите фреймворк Foundation к своему проекту.

Get-Info вашей цели в XCode. На вкладке Общие убедитесь, что Foundation.framework находится в списке связанных библиотек.

5 голосов
/ 24 марта 2010

Вам не нужно определять ваш объект как NSXMLParserDelegate

Просто убедитесь, что вы делаете это:

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];

И реализовать методы в этом объекте.

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
4 голосов
/ 19 сентября 2010

Хотя NSXMLParser был представлен с iOS2, делегат не был представлен до iOS4. Просто удалите объявление протокола из вашего класса, которое сработало для меня при компиляции с 3.2.

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/NSXMLParserDelegate_Protocol/Reference/Reference.html

2 голосов
/ 31 мая 2010

Вы должны сказать, что это NSXMLParserDelegate в SDK4.0. Но когда я добавляю к определению интерфейса, он больше не компилируется под 3.0, просто 4.0.

В версии 3.0 говорится, что не может найти определение протокола для NSXMLParserDelegate. Я включил:

#import <Foundation/NSXMLParser.h>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...