0

私のアプリはオンラインXMLファイルを解析します。xml内の各アイテムから特定のキーワードのLINKをスキャンし、それらをNSStringに返す機能を追加しようとしています。次を使用して解析するときにこれを行うように設定しました。

 NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString:articleUrl] encoding:NSUTF8StringEncoding error:nil];
            NSMutableArray *substrings = [NSMutableArray new];
            NSScanner *scanner = [NSScanner scannerWithString:string];
            [scanner scanUpToString:@"Thought:" intoString:nil]; 
            while(![scanner isAtEnd]) {
                NSString *substring = nil;
                [scanner scanString:@"Thought:" intoString:nil]; 
                if([scanner scanUpToString:@"</body>" intoString:&substring]) {

                    [substrings addObject:substring];
                }
                [scanner scanUpToString:@"Thought:" intoString:nil]; 
            }
            [substrings release];

問題は、XMLに多くの項目があり、これには時間がかかり、このタスクが完了するまでTableViewセルが表示されないことです。うまくいくより速い方法はありますか?

4

1 に答える 1

1

より速くすることは非常に相対的です。(ファイルサイズ、検索するものの数、使用されるアルゴリズムなど...) 他のいくつかのアプローチを試すことができます。NSXMLParser は別のものです。NSRegularExpression は別のものです。最初にすべてのリンクを取得してから解析する方が効率的かもしれません。しかし、繰り返しますが、これは非常に一般的なステートメントです。

解析中に UI の応答性を維持するには、NSOperation のサブクラスを作成し、その操作をバックグラウンドで使用します。完了時に (またはデータ構造に追加された各項目に対して) NSOperation サブクラスがメイン スレッドで通知を送信するようにします。アプリのデリゲート (または適切なコントローラー) を通知のオブザーバーにします。完了の個別の通知を作成し、それを利用して進行状況インジケーターの停止を提供できます。

これにより、応答性の高い UI、コールバック、および更新用のフックが提供されます。

于 2013-01-05T02:47:27.730 に答える