2

我正在使用和集成RaptureXML的包装器和.AFRaptureXMLRequestOperationAFNetworkingRaptureXML

下面的代码工作正常。一切都很好,下载、解析和显示UITableView.

当我在后台进行下载和解析时,我UITableViewMain Thread异步更新.

唯一的问题是 UITableView 的 Contents 仅在 XML 的所有元素都被解析并插入到适当的 时才会显示NSMutableArrays,这有时需要一段时间。

我的问题

有没有办法在下载和解析内容以及填充数据时动态显示内容,例如使用Twitter 文件的示例?UITableViewNSMutableArraysJASON

有代码:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

       [self downloadParsePlayListXML];

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
    });
});

- (void)downloadParsePlayListXML {

NSString *url = @"http://example.net/playlist/xmlfiles/playlist.xml";
AFRaptureXMLRequestOperation *operation = [AFRaptureXMLRequestOperation XMLParserRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]] success:^(NSURLRequest *request, NSHTTPURLResponse *response, RXMLElement *XMLElement) {

    [XMLElement iterateWithRootXPath:@"//program" usingBlock: ^(RXMLElement *program) {

        [self.programs addObject:[program attribute:@"name"]];
        [self.speakers addObject:[program child:@"speaker"].text];


    }];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, RXMLElement *XMLElement) {
    // Handle Error
}];

[operation start]; 

}

非常感谢您的帮助!

4

1 回答 1

2

直到今天晚些时候我才能对此进行测试,但我会尝试一下。注意:我不熟悉 RaptureXML。

首先,请参阅几天前有关解析 XML 的这篇文章。 https://stackoverflow.com/a/16047964/1710611

然后,在解析过程中,每次它到达一个元素的末尾时,您都会将它添加到您的数组中(作为UITableView数据源)并刷新表。

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if ([elementName isEqualToString:@"YOURTAG"]) {
        // finished getting the data in <YOURTAG>

        // do something now that you've got your data retrieved
        if (self.currentProperty) {
            [YOURDATASOURCEARRAY addObject:self.currentProperty];
            [tableView reloadData];
        }
    }  
}

或者,您也可以尝试替换[tableView reloadData]为:

[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:YOURINDEXPATHARRAY withRowAnimation:YOURANIMATION];
[tableView endUpdates];
于 2013-04-19T15:17:53.307 回答