2

XML ファイル経由でデータを取得するアプリケーションがあります。解析部分では、データはデバイス上のローカルの sqlite3 データベースに書き込まれ/挿入されます。そのため、データが同期されている場合、ロード画面が表示され (バックグラウンドで実行されます)、データが同期されていることがユーザーに通知されます。

これは、次のコードで非常にうまく機能しています。

ローディング画面部分:

[self.view performSelectorInBackground:@selector(addSubview:) withObject:self.updateView];
[self.view performSelectorInBackground:@selector(bringSubviewToFront:) withObject:self.updateView];

for (NSURL *url in urlArray)
{
    // Set up a UILabel so the user can see which data is syncronized
    [self.updateLabel performSelectorInBackground:@selector(setText:) withObject:[NSString stringWithFormat:@"%@",url]];

    // Parsing part
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];

    // Setting the database-manager as delegate
    [xmlParser setDelegate:self.datencontroller];
    [xmlParser parse];
    [xmlParser release];
    [url release];
}

[self.updateView removeFromSuperview];

今、私は次の問題を抱えています:明らかに解析が動作中のアプリをブロックしています。ユーザーが同期を中断できるようにキャンセル メソッドを実装したいので、問題が発生しました。

解析部分が完了するまで、アクションは通知されません。そのため、ボタンの押下がアプリによって認識されない場合、キャンセル メソッドを呼び出すボタンを実装してもまったく意味がありません。

バックグラウンドで実行するなど、いくつかの方法を試しましたが、データ マネージャーが 1 つのデータベースにデータを格納しているという問題が発生しました。したがって、2 つの異なる方法から同時にアクセスしてデータを挿入する方法はありません。

誰でもこれで私を助けることができますか?前もって感謝します。

4

3 に答える 3

1

バックグラウンド スレッドから UI を更新しないでください。常にメイン スレッドで UI 更新セレクターを実行します。

于 2010-08-07T04:53:14.487 に答える
0

Sqlite3 データベースは複数のスレッドからアクセスできます。スレッドごとに異なるデータベース ハンドルを開く必要があるだけです。

于 2010-08-06T17:40:39.173 に答える
0

NSXMLParser を停止するにはどうすればよいですか?

このソリューションは、いくつかのガイダンスを提供する可能性があります

于 2010-08-07T04:49:08.240 に答える