13

iPhone アプリを作成していますが、Core Data が SQLite データベースよりも読み取り専用データに適しているかどうか疑問に思っています。SQLite DB の方が適しているように感じますが、そうですか? Core Data ストレージを事前に入力することはできますか?

基本的に、それぞれに多数のエンティティ (最大 3000) を持つ 3 つのテーブルが必要です。次に、TableViews にデータを一覧表示したり、検索したり、他の目的でロードしたりします。

この場合、Core Data を使用する必要がありますか?

4

5 に答える 5

13

読み取り専用データをテーブル ビューに表示する場合、NSFetchedResultsController のおかげで、SQLite よりも Core Data を使用するほうがはるかに有利です。この便利なクラスにより、データベース要素をテーブル ビューに表示することが非常に簡単になり、バッチ フェッチを処理できます。バッチ フェッチにより、画面に必要な情報のみをその場でロードできるため、最小のデータ セットを除くすべてのロード時間とメモリ使用量が劇的に改善されます。

この理由と、ユーザーのアプリケーション データに格納されている書き込み可能なデータベースとデータ モデルを共有できるという事実に加えて、アプリケーションのバンドルで出荷する読み取り専用の情報に Core Data を使用します。絶対に iPhone OS 2.x デバイスをターゲットにする必要がない限り、Core Data を使用することをお勧めします。

于 2009-10-28T17:44:23.270 に答える
10

plist を使用して Core Data ストアをプリロードする簡単な方法を次に示します。

辞書の配列を含むプロパティ リストを作成します。各ディクショナリのキーを管理対象オブジェクトのキーに対応させます。

代替テキスト

次に、アプリの初回起動時にこのメソッドを呼び出します。

- (void)loadDataFromPropertyList {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"someFile" ofType:@"plist"];
    NSArray *items = [NSArray arrayWithContentsOfFile:path];

    NSManagedObjectContext *ctx = self.managedObjectContext;

    for (NSDictionary *dict in items) {
        NSManagedObject *m = [NSEntityDescription insertNewObjectForEntityForName:@"TheNameOfYourEntity" inManagedObjectContext:ctx];
        [m setValuesForKeysWithDictionary:dict];
    }

    NSError *err = nil;
    [ctx save:&err];

    if (err != nil) {
        NSLog(@"error saving managed object context: %@", err);
    }
}

loadDataFromPropertyListの実装に次のコードを含めることで、アプリの初回起動時に呼び出しますapplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
if (![defaults objectForKey:@"firstRun"])
{
    [defaults setObject:[NSDate date] forKey:@"firstRun"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [self loadDataFromPropertyList];
}
于 2010-07-26T03:52:48.223 に答える
2

事前に入力されたSQLiteデータベース、またはすべてのデータを含む大きなplist(この場合には不向きに聞こえますが)などと同じように、事前に入力されたCoreDataストアをアプリに確実に出荷できます。 。

Core Dataは、すべてネイティブのCocoaであり、DBからネイティブオブジェクトへのすべての読み込みを処理し、容赦なく最適化されているなどの点で優れています。しかし、リビジョンの処理、変更の保存、元に戻す、やり直しのサポートなど、気にしないことを行うためのコードもたくさんあります。したがって、どちらの方法でも明らかに正しい答えはありません。

多くは、CoreDataと代替の両方の快適さのレベルに依存します。データを取得するためにSQLiteAPI (または多くのCocoaラッパーの1つ)を使用して満足していますか?もしそうなら、それはもっと簡単かもしれません。Core DataにORMを実行させることが大きなメリットになる場合は、そのようにしてください。一方、Core Dataを使用した複雑なクエリは、述語APIを使用します。これは、SQLiteでベアSQLを使用するよりも複雑になる可能性があります。そういうこと。

于 2009-10-28T16:45:30.270 に答える
2

関係性によっては、読み取り専用データを plist から読み取ったほうがよい場合があります。Plist は読み込み/保存が簡単で (NSDictionaries に変換されます)、おそらく編集も簡単です。

于 2009-10-28T16:45:41.067 に答える
-8

Core Data は (他のオプションの中でも) SQLite を使用しているため、質問には多少の欠陥があります。

于 2009-10-28T16:38:19.500 に答える