2012-07-09 35 views
1

我正在使用可可,我想解析一个xml文件。
但也有2个警告,在我的代码在这里
使用NSData解析xml

incompatible Objective-C types 'struct NSString *', expected 'struct NSURL *' when passing argument 1 of 'initWithContentsOfURL:' from distinct Objective-C typeclass 'XMLParser' does not implement the 'NSXMLParserDelegate' protocol

,这是我的代码:

int main(int argc, char *argv[]) 
{ 

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    NSData *data = [[NSData alloc] initWithContentsOfURL:@"/Users.xml"]; // here is the first warning 
    // create and init NSXMLParser object 
    NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithData:data]; 

    // create and init our delegate 
    XMLParser *parser = [[XMLParser alloc] initXMLParser]; 

    // set delegate 
    [nsXmlParser setDelegate:parser]; // here is the second warning 

    // parsing... 
    BOOL success = [nsXmlParser parse]; 

    // test the result 
    if (success) { 
     NSLog(@"No errors");// - user count : %i", [parser [users count]]); 
     // get array of users here 
     // NSMutableArray *users = [parser users]; 
    } else { 
     NSLog(@"Error parsing document!"); 
    } 

    [parser release]; 
    [nsXmlParser release]; 
    [pool drain]; 

    return NSApplicationMain(argc, (const char **) argv); 
} 

我怎样才能解决这个问题吗?当我运行,它告诉我,节目接收信号SIGABRT,它不工作

回答

0

那么,有一个NSURL类......你需要传递的其中之一,就像警告说。

而且不设置解析器解析器本身的代表。如果你不需要委托,那么不要设置一个委托。委托用于回调,因此您的应用程序可以在解析过程中操作事物。

+0

如果(成功){ 的NSLog(@ “没有错误”); // - 用户数:%I”,[解析[用户数]); // 拿到这里用户 的NSMutableArray *用户的阵列= [解析用户]; //我如何解析此解析器是XML解析器不是一个NSXML分析器?? – user1503496 2012-07-09 14:17:52

0

initWithContentsOfURL:需要NSURL作为参数不是文件名,所以你需要构建一个从文件名如

NSURL* url = [NSURL fileURLWithPath:@"/Users.xml"]; 

你不需要NSData的那么直接做

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL fileURLWithPath:@"/Users.xml"]]; 

当你设置委托您委派到必须实现的目标说,它实现了NSXMLParserDelegate协议 - 在Apple docs它设置委托本身,而不是XMLParser不做任何额外的事情,在其他例子中,委托实现它需要的方法。

SeismicXML example

的委托声明为 @interface ParseOperation() <NSXMLParserDelegate>,并实现了一些方法NSXMLParserDelegate

所以你的情况,你需要@interface XMLParser() <NSXMLParserDelegate>并实现你想要的方法。

+0

THX,我想到用,因为我想显示从XML数据到一个组合框的NSData可以在以后有用 – user1503496 2012-07-09 13:59:02

+0

和如果对不起错字 – user1503496 2012-07-09 14:02:30

+0

@ user1503496; // - 用户数:%I”,[解析[用户数]); //在这里获取用户数组NSMutableArray * users = [parser users]; //如何在这里解析解析器是XML解析器而不是NSXML解析器? – Mark 2012-07-09 14:05:19