ORM の種類のモデルを維持し、エンティティ (画像、いくつかのテキスト フィールドを持つ) を表す必要があるアプリがあります。クライアントは、これらの tyoe ( Entity ) のアイテムのいくつかをアプリのビルドに組み込むことを望んでいます。そのため、それらはダウンロード時に利用可能であり、ユーザーがより多くのアイテムをダウンロードできるようにする必要があります。Core Data を使用してモデルを作成することを考えました。私の質問は: 1: 良い方法ですか? 2 : このモデルを実行し、このエンティティを定義すると、エンティティ タイプの静的アイテムを Xcode に手動で入力できますか? それらはローカルで利用できるので、いくつかの UIView! の viewdidload メソッドでそれらをループしたくありません。これは、テーブルを定義した後に SQL データベースを使用するようなもので、その DB に行を入力できます。
2 に答える
Core Data 永続ストアにデフォルトの Entity オブジェクトを挿入するロジックを (コードで) 実装し、起動時にデータベースが空の場合にのみそのロジックを実行できます。このチェックを、次のようなことを行う Core Data プロジェクトの Xcode で生成されたアプリ デリゲートに追加できます。
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
// Beginning of code added to Xcode-generated app delegate
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];
NSArray *results = [_managedObjectContext executeFetchRequest:request error:NULL];
if ([results count] == 0) {
// Call method to insert default entities
}
// End of code added to Xcode-generated app delegate
return _managedObjectContext;
}
デフォルト エンティティを挿入するための最適な方法は、存在するエンティティの数、エンティティが変更される可能性などによって異なります。同様に、エンティティが多数ある場合、上記のクエリは理想的ではありません。あるかどうかを確認します。これはアプローチのアイデアを提供するだけであり、特定の量のデータに基づいて最適化する必要があります.
これを行う最も簡単な方法は、デフォルトのコンテンツを提供しない場合と同じようにアプリケーションを作成することです。次に、シミュレーターでアプリを実行し、コンテンツを追加します。ここでアプリを停止し、Mac でデータ ファイルを見つけてプロジェクトにコピーし、プロジェクト リソースに追加します。アプリのスタートアップにコードを追加して、バンドル ディレクトリからドキュメント ディレクトリにファイルをコピーします (ドキュメント ディレクトリがまだ存在しない場合)。