2012-07-09 64 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