0

わかりましたので、xcdatamodel を変更して、3 つの新しい「テーブル」すべてにデフォルト値 1 の新しい属性を含めました。私は Core Data にはかなり慣れていませんが、SQL および SQLite データベースには非常に慣れています。私はiphoneシミュレーターをきれいにし、軽量の移行を行うaddPersistentStoreWithType:NSSQLiteStoreTypeの「特別な」オプションを使用してビルドし、それが機能するようにします。この新しい属性を含めるように Predicates を変更できますが、問題ありません。

コンパイル/実行時にアプリにコピーされるプロジェクトのリソースである既存の .sqlite ファイルがあることに注意してください。この sqlite ファイルは、iphone シミュレーターでは変更されません。

ここで、既存のデータ行を取得し、並べ替えと表示のためにこれらの値の一部を 2 または 3 に変更する必要があります。軽量の移行によって新しい sqlite ファイルが得られ、それを適切な場所にコピーして戻すことができ、Navicat を使用してこれらの値を変更し、xcode リソース内の sqlite ファイルを上書きし、特別なオプション ビットを削除してうまくいくことを望んでいました。 . ただし、新しいSQLファイルを取得することはできません。代わりに、他の「魔法」を行います。

Core Data は属性を取得して Z を追加するだけのように見えるので、ZATTRIBUTENAME 列を追加して新しい xcdatamodel ファイルを使用しようとしましたが、「ストアを開くために使用されたモデルは、ストアを作成するために使用されたモデルと互換性がありません」というエラーが表示されます。 .

Apple がこれらのファイルを SQL エディターで編集しないように言っているのは気にしませんでした。だから「そんなはずない」なんて言わないでください。コア データ スキームと sql で何が起こっているかを理解するのは難しくありません。問題は、新しい属性で編集する新しい sqlite ファイルを取得できないことです。

要するに、コピーして編集できる新しい xcdatamodel によって生成された新しい sqlite ファイルを取得する方法を理解しようとしているだけだと思います。私はこれを数日間調査してきましたが、運がほとんどありませんでした。

よろしくお願いいたします。

4

1 に答える 1

0

まず、「そんなことはしてはいけない」というご指摘をお許しください。;-)

次に、アプリケーションに含める新しい「シード」ファイルを生成するだけでよいようです。明らかに、このファイルは変更されていません。あなたの説明によると、それはコアデータファイルではありません。

移行後の新しいコア データ ファイルについては、はい、それは新しいデータ モデルを持つ新しいファイルであり、古いファイルはなくなりました。もちろん、そのファイルを開いていじることも、コード内のコア データを使用して行うこともできます。

これが私が行う方法です: プロジェクトで、新しいシード ファイルを生成するためだけにいくつかのコードを記述し (コア データにするか、単に sqlite API を使用することができます)、コードを無効にするか削除します。新しいバージョン。このファイルをバンドルにコピーして、シード ファイルとして提供できるようになりました。

于 2012-07-25T20:47:35.823 に答える