2

これが機能することを読みましたが、取得できません。コア データを事前に入力したい。プロジェクトを実行して、sqlite ファイルを作成しました。これをデスクトップにコピーし、コマンド ライン sqlite3 を使用して事前設定しました。クエリを実行して、正しく入力されていることを確認しました。だから今、私はそれを私のプロジェクトに再追加します。しかし、私が何をしても、データは取得されません。

一度だけ動作するようになりました。シミュレーターで実行した後、プロジェクトのドキュメント フォルダーから sqlite ファイルを再コピーしました。次に、この新しい sqlite ファイルにデータを入力しました。プロジェクトに戻し、コンテンツを表示しました。

問題は Z_METADATA テーブルだと思います。このテーブルには Z_UUID 属性があります。シミュレーターの UUID と sqlite の Z_UUID 属性が同じだったときだけ機能したと思います。

~/Library/Developer/Xcode/DerivedData に移動し、DerivedData フォルダーの内容を削除しました。そのため、シミュレーターを実行すると、シミュレーターの UUID が異なります。これを行ったところ、sqlite ファイルの内容が表示されなくなりました。これが、Z_METADATA テーブルが問題だと思う理由です。Z_METADATA の UUID とシミュレーターの UUID が同じではないため、何らかの理由で使用できませんか?

私が見つけたこの方法で Core Data を事前設定することに関する記事はすべて 2009 年頃の古いものなので、当時はこれが問題ではなかったと思います。それで、sqliteファイルをコピーし、コマンドラインを使用して事前に入力してから、プロジェクトに再度追加するこの方法を使用できますか? コア データを事前設定する現在の方法を誰かが持っていますか?

したがって、エラーは、 myNSFetchedResultsControllerが 0 個のオブジェクトを返していることです。上記の1回ですべてのデータを返すようになりました。

4

1 に答える 1

1

Core Data Programming Guideによると、

Core Data は SQLite をストアの種類としてサポートしていますが、ストアの形式 (他のネイティブの Core Data ストアと同様) は非公開です。ネイティブ SQLite API を使用して SQLite データベースを作成し、Core Data で直接使用することはできません (ネイティブ SQLite API を使用して既存の Core Data SQLite ストアを操作することもできません)。既存の SQLite データベースがある場合は、それを Core Data ストアにインポートする必要があります (「効率的なデータのインポート」を参照)。

誰かが Core Data sqlite フォーマットをリバース エンジニアリングしたと確信していますが、Apple はドキュメントを提供しておらず、主要な OS リリース間で変更される可能性があります。

Core Data を使用してインポートを行うコマンドライン アプリを作成します。

于 2012-07-21T01:49:40.530 に答える