TurbineXMLParser.h
#import <Foundation/Foundation.h>
@interface TurbineXMLParser : NSObject <NSXMLParserDelegate> {
...
TurbineXMLParser.m
#import "TurbineXMLParser.h"
我刚刚在我之前在单个文件中测试的当前项目中添加了一个新类。当我尝试构建项目时,我收到错误:错误:无法找到'NSXMLParserDelegate'的协议声明
我做了一些搜索并尝试添加以下内容......
TurbineXMLParser.h
#import <Foundation/Foundation.h>
@protocol NSXMLParserDelegate;
@interface TurbineXMLParser : NSObject <NSXMLParserDelegate> {
...
但仍然收到警告:警告:找不到协议'NSXMLParserDelegate'的定义
任何帮助将不胜感激
.
.
.
从@interface删除<NSXMLParserDelegate>
确实有效,但我很好奇为什么,我混淆了&amp;糊涂?我的印象是委托对象必须采用NSXMLParserDelegate协议,即在超类之后添加<NSXMLParserDelegate>
。
我有两个实例,其工作方式不同,第一个是单个命令行文件中的项目,如果我不添加<NSXMLParserDelegate>
,则警告:
class 'TestXMLParser' does not implement the 'NSXMLParserDelegate' protocol
当我尝试使用<NSXMLParserDelegate>
构建项目时,第二个实例是我设置多个* .h和* .m文件(其中一个类是MyXMLParser.h,MyXMLParser.m)的地方我得到了这个错误:
error: cannot find protocol declaration for 'NSXMLParserDelegate'
删除<NSXMLParserDelegate>
,一切正常,没有错误,没有警告......
加里
答案 0 :(得分:6)
前向声明NSXMLParserDelegate不太可能有帮助,如果你符合它,它需要实际导入。
如果您尚未将Foundation框架链接到项目中,则会出现原始错误。
在XCode中获取您的目标信息。在“常规”选项卡中,确保Foundation.framework位于链接库列表中。
答案 1 :(得分:5)
您无需将对象定义为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
答案 2 :(得分:4)
虽然NSXMLParser是从iOS2引入的,但代表直到iOS4才被引入。 只需从类中删除协议声明,这对于我在编译3.2时起作用。
答案 3 :(得分:2)
你需要说它是SDK4.0中的NSXMLParserDelegate。但是当我添加到接口定义时,它不再在3.0下编译,只是4.0。
在3.0下,它说无法找到NSXMLParserDelegate的协议def。我已经包括:
#import <Foundation/NSXMLParser.h>