0

私は、Webからフラットファイルを解析し、フラットファイルから管理対象オブジェクトを作成し、後でそれらをUITableViewに表示することになっているiPhoneアプリをプログラミングしています。保存と表示に問題はありませんが、良いパーサーのコツをつかむことができません。

それが私が解析したいファイルです:フラットファイル

私の知る限り、このタスクにNSXMLParserを使用することはできません(明らかにタグがないため)。

だから私は最初にNSScannerをプログラムしようとしましたが、それは私に興味深いプロパティを取得するはずです->うまくいきませんでした

今私はこの方法を使用しています:

- (void) parseMemberDataWithURL: (NSString *)urlString
{
    self.memberTempCounter = 1;

    //Get data from web
    self.downloadedText = [NSString stringWithContentsOfURL: [NSURL URLWithString:    urlString] encoding:NSUTF8StringEncoding error:nil ];

    memberArray = [downloadedText componentsSeparatedByString:@";"];

    while (self.memberTempCounter<[memberArray count])
    {
        [[ExhibitorController sharedController] createExhibitorWithName:[memberArray objectAtIndex:self.memberTempCounter]
                                                                  street:[memberArray objectAtIndex:self.memberTempCounter+2]
                                                                    zip:[memberArray objectAtIndex:self.memberTempCounter+3]
                                                                   city:[memberArray objectAtIndex:self.memberTempCounter+4]
                                                                  email:[memberArray objectAtIndex:self.memberTempCounter+7]
                                                                  phone:[memberArray objectAtIndex:self.memberTempCounter+5]
                                                                website:[memberArray objectAtIndex:self.memberTempCounter+8]
                                                        produktbereiche:[[memberArray objectAtIndex:self.memberTempCounter+9] componentsSeparatedByString:@","]];
        self.memberTempCounter= self.memberTempCounter+13;
    } 
}

私はmemberTempCounterを使用してプロパティを識別しています。

問題は次のとおりです。

  • これは4回のうち3回のようにしか機能しません。4回のうち1回はアプリがクラッシュし、理由がわかりません...
  • この方法は、1962年のVWビートルのような性能を備えています。私のiPhone3Gでは、データのチャンク全体を解析するのに最大3分かかります

これを行うためのアイデアやより簡単な方法はありますか?

本当にありがたいです。前もって感謝します: -)

4

3 に答える 3

1

バックグラウンドですべての解析を実行し、情報が解析されるときに表示することもできます。

メモリの問題については、一時的な自動解放プールを実行し、ループ全体で50回程度の反復ごとに解放してみてください。

int count = 0;
NSAutoreleasePool * loopPool = [[NSAutoreleasePool alloc] init];
while(someInsanelyLargeCondition){

    // Do your stuff here
    // .............

    count++;
    if (count > 50) {
        count = 0;
        [loopPool release];
        loopPool = [[NSAutoreleasePool alloc] init];
    }
}
于 2010-09-03T19:46:22.483 に答える
0

再帰下降(LL1)パーサーは非常に単純で、メモリが少なく、速度については、文字を介してポインターを実行できるのとほぼ同じ速度で実行されます。データ構造の構築は、おそらく主要な時間のかかるものです。

于 2010-09-03T16:37:18.187 に答える
0

ようやくパフォーマンスの問題を解決することができました。

別のクラスにメソッドがあり、さまざまな出展者のタグをアドバタイズします。したがって、最初にタグがデータベースにすでに保存されているかどうかを確認するか、タグを作成します。データベース内のタグのセットが増えるにつれ、検索プロセスにかかる時間が長くなり、これにより解析時間が長くなりました。

この問題を抱えている他の人:「効率的に検索または作成を実装する」セクションにあるアップルのパフォーマンスコアデータプログラミングガイドをご覧ください。

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html

于 2010-09-07T08:21:08.750 に答える