2011-12-05 11 views
0

私は多くのhttpソースからデータを収集する必要があるアプリケーションを構築しています。いくつかの場合、これらのソースの数は700になり、合計で35 MBになります。iOSのコアデータデータベースで頻繁な更新とリクエストに対処するベストプラクティス?

私が必要とするデータを毎回ダウンロードするのを避け、膨大な金額の課金を避けるために、最初のパスの後に結果をSQLite Core Dataデータベースに保存してから、必要に応じてローカルで要求を実行します。

私はダウンロードしたデータを保存する際にクラッシュを避けるための最良の方法を探していません。最大7つのHTTP同時要求を持つ操作キューを使用してデータをダウンロードし、同じ管理対象オブジェクトコンテキストに2つのスレッドから同時にアクセスしている間にクラッシュする可能性があり、データベースに格納する物理ディスクアクセスについて話しているので、物事は複雑になるかもしれません。

このような種類のデータを保存し、その中で高速検索を実行することをお勧めします。マルチスレッドの問題のためにアプリケーションが常にクラッシュすることはありません。

ありがとうございます。

答えて

1

同じ2つのスレッドに同じNSManagedObjectContextにアクセスする必要はありません。各スレッドは独自のNSManagedObjectContextを持つ必要があり、必要に応じてmergeChangesFromContextDidSaveNotification:を使用してコンテキストをマージする必要があります。マルチスレッドとコアデータは扱いにくいので、すべてのTを渡り、自分のものをすべて点にする必要がありますが、可能なはずです。 iOS5は、ロックなどでNSManagedObjectContextのマルチスレッドのサポートを強化しましたが、まだ詳しくは触れていませんが、iOS5をターゲットにしている場合は、クラス参照のManaging Concurrencyセクションを参照してください。複数のMOCを持つこと。

また、私は携帯電話ネットワーク上では、同時に最大2つの同時HTTPリクエストを持つようにデバイスを制限すると考えています。

+0

ありがとうございました。 2つの同時HTTPリクエスト?あなたはこれにリンクしていますか?最大4つの同時並行保持操作を持つ操作キューがあるとどうなりますか? – csotiriou

+0

私はそれが実際にはこれに応じて制限を持つモバイルネットワークだと思います。 「ほとんどのモバイルネットワーク(3G)では、特定のIPアドレスから同時に2つ以上のHTTP接続が許可されません。つまり、デバイスから、3Gネットワ​​ークで同時に2つ以上のHTTP接続を開くことはできません。ほとんどの場合、1つ以上の接続を開くことはできません。この制限は、従来の家庭用ブロードバンド(Wifi)ではかなり高い(6つ)。ここに見つかりました。 http://blog.mugunthkumar.com/products/ios-framework-introducing-mknetworkkit/妥当性についてはわかりません。 –

+0

最大2つあり、スケジュールが4つあるかどうかについては、ネットワーキングライブラリが十分にスマートであれば、余分な要求が処理されるまでキューに保持されます。 –

関連する問題