2012-04-25 4 views
4

新しいモデルを追加しようとしています。新しいモデルには、新しいエンティティと、現在のエンティティから新しいエンティティへの関係があります。私は新しいモデルを作成し、それを最新のものに設定しました。すべてが正常に動作し、新しいエンティティにアクセスできますが、いくつかの 'バイナリデータ'エントリはnilです。iPhoneコアのデータ移行により、外部ストレージを選択するとバイナリデータが失われる

マッピングモデルを追加してから移行してみましたが、結果は同じです。格納された 'バイナリデータ'はUIImageです。小さなサムネイルの一部が移行されています。フルサイズのUIImageは移行されません。

私は、(サイズのために)自動的に外部に格納されるエンティティが移行されていない可能性があると考えています。

UPDATE

私は画像コレクションを保存する小さなプロジェクトをビルドします。私は新しいモデルを作成しようとしたが、すべてうまくいった。次に、私は新しいプロジェクトと古いものを比較しますが、唯一の違いは「外部ストレージを許可する」ことです。新しいプロジェクトでこのオプションを選択し、新しいモデルを作成して写真が欠落していました。

+0

どれ事前:

私はこのブログの記事でソースコードとの完全なソリューションを文書化してきましたか?私はここで同じ問題を抱えています。 –

+0

@NicolasS私はCanisのアップル開発者フォーラムで回答しました。彼は問題を解決し、彼が使用したコードも送ってくれます。問題は、彼が私に送るコードがどこに私のアプリに適合するのか分かりません。次のリンク[リンク](https://devforums.apple.com/message/652576#652576)をご覧ください。あなたが私のappp上で新しい機能をリリースしたいと私は完全に立ち往生しているので、あなたがそれを使用する方法を見つけたら私に知らせてください。 – zirinisp

答えて

12

(サイズのために)自動的に外部に格納されるエンティティが移行されていない可能性があります。

これはまさに何が起こるかです。アップルのバグです。特定のサイズを超えるバイナリデータは、Core DataによってDocumentsフォルダ内の外部サポートフォルダに保存されます。何らかの理由で、移行中にCore Dataがその外部ストレージフォルダを一掃します。サムネイル画像データは外部からSQLite DBに保存されていないので大丈夫ですが、より大きな外部バイナリファイルが削除されるだけです。

解決策は、自動移行を試みる前に、Core Dataモデルの永続的なストアコーディネータがコードをいくつか実行してコードを初期化するときです。新しいモデルが現在保存されているモデルと互換性があるかどうかを確認します。そうでない場合は、コアデータが古いモデルを新しいバージョンに移行しようとしていることがわかります。そうすることで、外部ストレージフォルダが消去されます。それを行う前に、外部ストレージフォルダを一時的な場所に移動するだけです。移行が完了したら、コアデータによって生成された新しい空の外部ストレージフォルダを置き換えます。

http://www.nickkuh.com/iphone/core-data-migration-woes-with-binary-data-and-external-storage-data-loss/2012/06/

+0

これは素晴らしい作業です。あなたの答えにソリューションの簡単な要約(原則のみ、おそらくソースコードへのリンク)を含めることができますか? – jrturton

+0

完了 - 編集を参照してください。 –

+1

この問題がiOS 7で解決され解決されているかどうかは知りませんか? – SAHM

関連する問題