2

私が使用しているのは、 andを統合RaptureXMLするラッパーです。AFRaptureXMLRequestOperationAFNetworkingRaptureXML

以下のコードは正常に動作しています。コンテンツのダウンロード、解析、および表示はすべて正常に行われていUITableViewます。

バックグラウンドでダウンロードと解析を行っている間に、非同期UITableViewで を更新します。Main Thread

唯一の問題は、XML のすべての要素が解析され、適切なNSMutableArraysに挿入された後にのみ UITableView のコンテンツが表示されることです。これには時間がかかる場合があります。

私の質問:

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 に答える