エンド ユーザーがアプリを使用するときに情報が表示されるように、既にデータベースにデータがある状態でアプリを開始する必要があります。
私の問題: データをアプリ データベースにロードするにはどうすればよいですか?
xcode (エディターで xcdatamodeld を選択した場合) には「インポート...」オプションがありますが、必要なファイルの種類がわかりません。
ヘルプ!
データが既に .sqlite 形式である場合 (以下の注を参照)、そのファイルをプロジェクトにコピーします (ファイルを Xcode プロジェクト ディレクトリに移動し、Xcode から [ファイル] -> [ファイルを「プロジェクト名」に追加] を選択し、コンピューターのディレクトリにあるファイル。
メインの AppDelegate.m ファイルの persistentStoreCoordinator 関数 (プロジェクトで sqlite/Core Data を設定する方法については、このチュートリアルを参照してください) の下に、ファイルが存在しない場合、メイン バンドル リソースからアプリ リソース ディレクトリにコピーするコードを記述します。 :
NSURL *dbUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
stringByAppendingPathComponent: @"yourDBName.sqlite"]];
if (![[NSFileManager defaultManager] fileExistsAtPath:[dbUrl path]]) {
NSURL *bundleURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"yourDBName" ofType:@"sqlite"]];
NSError* err = nil;
if (![[NSFileManager defaultManager] copyItemAtURL:bundleURL toURL:dbUrl error:&err]) {
NSLog(@"Could not copy main bundle data");
}
else { NSLog(@"Main bundle data successfully copied"); }
}
メイン バンドルからプリロードされた .sqlite データベースが Xcode プロジェクト内から適切に作成されていることが重要です (iOS アプリは特別にフォーマットされた .sqlite ファイルのみを認識します)。
これが読み込まれると、コア データ管理オブジェクト コンテキストの永続ストア コーディネーターがこの .sqlite ファイルに設定され、その構造がコア データ モデルの構造と一致する限り、アプリのデータベースとして認識されます。
アプリを出荷するときに、データベースをバンドルに追加します。最初の起動時に、データベースがローカル ファイル システムに存在するかどうかを確認します。そうでない場合 (そして初めて起動するわけではない場合)、データベースをバンドルからローカル ファイル システムにコピーし、それを開いて、そこから使用します。読み取り専用に設定されているバンドルから使用しないでください。
SQLite データベースまたはその他の種類のファイルを使用していると仮定しています。次の手順を使用して、ファイルをバンドルに追加できます: XCode でリソース フォルダーにファイルを追加するにはどうすればよいですか?