使用NSXMLParserDelegate构建项目时出错

fuz*_*oat 3 iphone cocoa-touch objective-c

TurbineXMLParser.h

#import <Foundation/Foundation.h>

@interface TurbineXMLParser : NSObject <NSXMLParserDelegate> {
...
Run Code Online (Sandbox Code Playgroud)

TurbineXMLParser.m

#import "TurbineXMLParser.h"
Run Code Online (Sandbox Code Playgroud)

我刚刚在当前项目中添加了一个新类,我之前在单个文件中进行了测试.当我尝试构建项目时,我收到错误:错误:找不到'NSXMLParserDelegate'的协议声明

我做了一些搜索并尝试添加以下内容......

TurbineXMLParser.h

#import <Foundation/Foundation.h>

@protocol NSXMLParserDelegate;

@interface TurbineXMLParser : NSObject <NSXMLParserDelegate> {
...
Run Code Online (Sandbox Code Playgroud)

但仍然收到警告:警告:未找到协议'NSXMLParserDelegate'的定义

任何帮助将非常感激

.
.
.
Run Code Online (Sandbox Code Playgroud)

EDIT_002:

<NSXMLParserDelegate>从@interface 删除确实有效,但我很好奇为什么,我混淆和混乱?我的印象是委托对象必须采用NSXMLParserDelegate协议,即<NSXMLParserDelegate>在超类之后添加.

我有两个实例,其工作方式不同,第一个是单个命令行文件中的项目,如果我不添加,<NSXMLParserDelegate>则警告:

class 'TestXMLParser' does not implement the 'NSXMLParserDelegate' protocol
Run Code Online (Sandbox Code Playgroud)

第二个实例是我在设置多个*.h和*.m文件(其中一个类是MyXMLParser.h,MyXMLParser.m)时,我尝试构建项目时<NSXMLParserDelegate>遇到此错误:

error: cannot find protocol declaration for 'NSXMLParserDelegate'
Run Code Online (Sandbox Code Playgroud)

删除<NSXMLParserDelegate>,一切正常,没有错误,没有警告......

加里

Jef*_*ris 6

前向声明NSXMLParserDelegate不太可能有帮助,如果你符合它,它需要实际导入.

如果您尚未将Foundation框架链接到项目中,则会出现原始错误.

在XCode中获取您的目标信息.在"常规"选项卡中,确保Foundation.framework位于链接库列表中.


Fel*_*zin 5

您不需要将对象定义为NSXMLParserDelegate

只要确保你这样做:

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[parser setDelegate:self];
Run Code Online (Sandbox Code Playgroud)

并实现该对象中的方法.

- (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
Run Code Online (Sandbox Code Playgroud)