Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法使用NSXmlParser获取数据_Ios_Iphone_Nsxmlparser - Fatal编程技术网

Ios 无法使用NSXmlParser获取数据

Ios 无法使用NSXmlParser获取数据,ios,iphone,nsxmlparser,Ios,Iphone,Nsxmlparser,我正在使用NSXmlParser从XML获取数据。在解析器委托方法中,我有: - (void)resetPassCallback: (NSData*) data{ NSLog(@"start parsing the data"); NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithData:data]; [nsXmlParser setDelegate:self]; B

我正在使用
NSXmlParser
XML
获取数据。在解析器委托方法中,我有:

- (void)resetPassCallback: (NSData*) data{
        NSLog(@"start parsing the data");
        NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithData:data];
        [nsXmlParser setDelegate:self]; 
        BOOL success = [nsXmlParser parse];
        if (success) {
             NSLog(@"No errors %@", xmlArray);
        } else {
             NSLog(@"Error parsing document!");
        }
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qualifiedName attributes: (NSDictionary *)attributeDict
{
      element = elementName;
      if([elementName isEqualToString:@"User"])
      {
      XmlDict = [[NSMutableDictionary alloc]init];
      userId =[[NSMutableString alloc]init];
      screenName =[[NSMutableString alloc]init];
      xmlArray = [[NSMutableArray alloc]init];
}
}

虽然我能够解析数据,但我没有得到完整的数据。在控制台中,日志显示:

foundCharacters ::::: 200 :::: 
foundCharacters ::::: f1f47453-04d7-20c8-a9e1-406fdc89a2da :::: 
foundCharacters ::::: test :::: 
foundCharacters ::::: 62e2092a-eb6e-44ad-7a7b-3deb976569c1 :::: 
foundCharacters ::::: Thomas :::: 
xmlArray contents : (
"62e2092a-eb6e-44ad-7a7b-3deb976569c1",
Thomas
)

如您所见,为什么我没有在
xmlArray
中获得“test”和其他值

我希望,每次调用
NSXMLParser
委托时都会重新初始化数组

您需要在
NSXMLParser委托之前初始化数组
打电话来


使用
xmlArray=[[NSMutableArray alloc]init]输入

- (void)resetPassCallback: (NSData*) data{
    NSLog(@"start parsing the data");
    xmlArray = [[NSMutableArray alloc]init];
    NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithData:data];
    [nsXmlParser setDelegate:self]; 
    BOOL success = [nsXmlParser parse];
    if (success) {
         NSLog(@"No errors %@", xmlArray);
    } else {
         NSLog(@"Error parsing document!");
    }
}
不在

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qualifiedName attributes: (NSDictionary *)attributeDict
{

}

为什么要使用可变数组。试试这个

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

        if(!currentElementValue) 
                currentElementValue = [[NSMutableString alloc] initWithString:string];
        else
                [currentElementValue appendString:string];

        NSLog(@"Processing Value: %@", currentElementValue);

}

发布完整的代码您是否正在修改任何其他解析器委托方法中的
xmlArray
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qualifiedName attributes: (NSDictionary *)attributeDict
{

}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

        if(!currentElementValue) 
                currentElementValue = [[NSMutableString alloc] initWithString:string];
        else
                [currentElementValue appendString:string];

        NSLog(@"Processing Value: %@", currentElementValue);

}