2

約10000行程度の比較的大きなデータセットの日付に基づいて、単純な検索、並べ替え、制限を行う必要があるアプリケーションを構築しています。

データは読み取り専用であり、アプリケーションにバンドルする必要があり、移行せずに更新時に上書きされる可能性があります。

以前、これにバイナリplistを使用することに成功しましたが、データを検索して並べ替える必要はありませんでした。データを完全にメモリにロードするのに十分な小ささでした。

coreDataのプリロードは、特にデータが読み取り専用である可能性が高いため、そのような雑用のように思われます。方法を説明しているブログをいくつか読んだことがありますが、それらはすべて非常にハッキーなようです。

私の質問は:

coreDataをプリロードする良い方法はありますか、plistからデータを検索して並べ替える方法はありますか、それとも他の方法がありますか?

編集:coreDataが何であるかを誤解しているようです。私はソースでこの行を見つけました:

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"TestFour.sqlite"];

そして、私はそれを次のように置き換えました:

NSURL *storeURL = [[NSBundle mainBundle] URLForResource:@"TestFour" withExtension:@"sqlite"];

SQLiteデータベースファイルをアプリケーションバンドルに移動するだけです。これにより、ボーナスとして、読み取り専用になり、新しいアプリケーションリリースで簡単に更新できるようになります。

研究にご協力いただきありがとうございます。

4

5 に答える 5

3

アプリケーション内で特定のデータを検索して並べ替える場合は、SQLiteまたはCoreDataをプリロードされたデータセットとともに使用することをお勧めします。後者の場合は、これを見てください。

于 2012-12-25T16:57:24.307 に答える
2

その特定のホイールを再発明しないことをお勧めします。Core Dataは、そのサイズのデータ​​セットに最適です。UITableview、NSFetchedResultsController、およびNSFetchRequestは、この問題に対して作成されます。

私がいくつかのプロジェクトで使用したパターンは、レガシー形式を読み取り、それをCoreDataストアに保存する補助MacOSツールを作成することです。

iOSプロジェクトに、リソースとしてCoreDataストアを含めます。iOSアプリでCoreDataスタックを起動すると、ユーザーファイルスペースではなく、メインバンドルで.sqliteファイルが検索されます。ファンシーになりたい場合は、データストアの更新バージョンをダウンロードしようとするバックグラウンドスレッドを使用できます。ユーザーファイルスペースに新しいバージョンがある場合は、事前にパッケージ化されたバージョンの代わりにそれを使用します。

Norbertが引用しているRayWenderlichチュートリアルは、文書化されていない動作に依存しています。.sqliteファイルへの直接書き込みは特にサポートされていません。

補助データローダー(Mac)とビューアー(iOS)は、同じ.xcdatamodelと、(該当する場合)NSManagedObjectサブクラスの.h/.mファイルを共有します。データの読み取りに使用するのと同じコードベースを使用してデータを保存します。このアプローチを使用して、10万行のプロジェクトをいくつか作成しましたが、非常にうまく機能します。

于 2012-12-25T21:10:22.487 に答える
1

SQLiteをアプリに統合することをお勧めします。データが読み取り専用であっても。何かをフェッチするために、すべてのデータをメモリにロードする必要はありません。ソートされたデータを取得する必要がある場合は、適切なSQLクエリを使用してください。更新するには、データを再度ダウンロードして、適切なクエリで挿入します。

iOS用のSQLiteチュートリアルに関する次の質問を参照してくださいgood-tutorial-for-sqlite3-with-objective-c-iphone

于 2012-12-25T16:12:21.513 に答える
1

iOSアプリ用のCoreDataストアをプリロードすることについてはほとんどハックがありません。

同じモデルを共有し、設定された場所にデータを書き込むヘルパーアプリケーションを作成するだけで、このファイルを取得してアプリバンドルに含めることができます。

例として-csvファイルを取得してCoreDataストアにロードし、このファイルの場所を報告するデスクトップアプリを使用してサンプルプロジェクトを作成しました。次に、このファイルをAppBundleに含めて使用する方法を示します。

于 2012-12-25T21:21:57.097 に答える
0

オブジェクトを保存することをお勧めします(Webサーバー側はあまり多くありません)。ソリューションとしてAWSを使用することをお勧めします。S3は大きなオブジェクトを保存するのに適しており、CloudFrontを使用して世界中のサーバーに配布できますが、小さなオブジェクトとよりスケーラブルで高速なソリューションには、DynamoDBまたはSimpleDBを使用します。非常に包括的なドキュメントとサンプルコードがあり、記述と使用が簡単です。

于 2012-12-25T17:02:56.680 に答える