0

XML ファイルから大量のデータをロードしています。このデータはアプリケーションを「フリーズ」させています。データのロード中に進行状況バーを表示したいと思います。

進行状況バーに表示されるパーセンテージを変更できるように、操作の大部分が完了したことをどのように知ることができますか? ありがとう。【回答済み】

編集: 主な問題は、解析するデータが大量にあるために、読み込み中にアプリケーションがフリーズすることです。バックグラウンド スレッドを使用してデータを読み込んで解析することを提案する人もいます。それは実行可能ですか?

4

2 に答える 2

2

一度に4kでファイルをメモリに読み込みますか?ロードされたバイトとファイルサイズのプロセスを表示しますか?

さらに、行の総数とパーサーが現在使用している行を把握します。

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html#//apple_ref/occ/instm/NSXMLParser/lineNumber

NSXMLParserを使用していると仮定します

「フリーズ」は、メインスレッドでロード/解析を行うことから発生します。GCDがdispatch_async()を実行し、完了時にメインスレッドに更新を送信して、進行状況を更新できる場合。

于 2012-05-15T15:49:11.230 に答える
0

NSXML パーサーを使用している場合は、

NSUInteger count = [[rootElement nodesForXPath:@"//Video" error:&error] count];
//this will give you the number of elements
//then after parsing each element, calculate the percentage of elements parsed. 

//i.e. num_of_elements_parsed/total_no_elements*100;
//based on this value, use a del;egate method to update your NSProgressIndicator 
// in this method increment the  num_of_elements_parsed counter
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

    if ([elementName isEqualToString:@"resident"]) {

        self.count += 1; 

    }
}
于 2012-05-15T16:25:35.763 に答える