objective c NSXMLParser委托类不会触发委托方法
我在网上使用简单的tutorial来解析xml和NSXMLParser。 委托对象执行init操作,但从不触发NSXMLParser委托方法。 什么即时通讯做错了?在Windows上使用GNUSetup即时通讯软件 。objective c NSXMLParser委托类不会触发委托方法
这里就是我所说的解析器:
-(BOOL) loadXmlPath :(NSString*)filePathXml:(NSString*) filePathWrite
{
if([fileMgr fileExistsAtPath:filePathXml] == YES)
{
NSLog(@"%@",filePathXml);
NSURL *xmlURL = [NSURL fileURLWithPath:filePathXml];
NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];
if(nsXmlParser)
{
NSLog(@"done setup parser");
}
else
{
NSLog(@"fail setup parser");
}
// create and init our delegate
XMLParser *parser = [[XMLParser alloc] initXMLParser];
[nsXmlParser setShouldProcessNamespaces:NO]; // We don't care about namespaces
[nsXmlParser setShouldReportNamespacePrefixes:NO]; //
[nsXmlParser setShouldResolveExternalEntities:NO]; // We just want data, no other stuff
// set delegate
[nsXmlParser setDelegate:parser];
// parsing...
BOOL success = [nsXmlParser parse];
// test the result
if (success) {
NSLog(@"parsing document!");
// get array of users here
} else {
if ([nsXmlParser parserError]) {
NSError *err = [nsXmlParser parserError];
NSString *serror = [err localizedDescription];
NSLog(@"Error parsing document!%@\n",serror);
}
NSLog(@"Error parsing document!");
}
}
return NO;
}
XmlParser.h
#import <Foundation/Foundation.h>
@interface XMLParser : NSObject
{
NSXMLParser *parser;
}
-(XMLParser *) initXMLParser;
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
@end
XmlParser.m
#import "XMLParser.h"
@implementation XMLParser
- (XMLParser *) initXMLParser {
self = [super init];
NSLog(@"Init xml parser");
return self;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
NSLog(@"Enter parser 1");
if ([elementName isEqualToString:@"name"]) {
NSLog(@"%@",elementName);
return;
}
if ([elementName isEqualToString:@"person"]) {
return;
}
if ([elementName isEqualToString:@"lastName"]) {
return;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
NSLog(@"Enter parser 2");
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
NSLog(@"Enter parser 3");
if (([elementName isEqualToString:@"addresses"]) ||
([elementName isEqualToString:@"address"])) return;
if ([elementName isEqualToString:@"person"]) {
return;
}
}
@end
它从来没有达到解析器方法。但是它的确到达了initXMLParser。 我在这里做错了什么? 也即时得到的:犯错localizedDescription] 这条消息:
NSXMLParserErrorDomain 3
这是什么意思?
在你XmlParser.h
你需要证明你实现解析器委托
此行
@interface XMLParser : NSObject
应该
@interface XMLParser : NSObject <NSXMLParserDelegate>
编辑:
你的init是也是NG,它应该是如下
- (XMLParser *) initXMLParser {
self = [super init];
NSLog(@"Init xml parser");
return self;
}
你忘记的[super init]
值分配给自
我添加了这个但仍然失败,达到: – user63898
我编辑了代码,你没有给'self'设置一个值 – Flexicoder
我编辑代码(看原始msg) 还增加了错误检查和im得到: NSXMLParserErrorDomain 3 ..这是什么意思? – user63898
XMLParser的*解析器= [[XMLParser的页头] initXMLParser]。 [nsXmlParser setShouldProcessNamespaces:NO]; //我们不关心名称空间 [nsXmlParser setShouldReportNamespacePrefixes:NO]; // [nsXmlParser setShouldResolveExternalEntities:NO]; //我们只是想要数据,没有其他东西 //设置代理 [nsXmlParser setDelegate:self]; //代替语法分析器把它放到自我 //解析... BOOL success = [nsXmlParser parse]; – Kasaname