1

アプリのカスタム ファイル タイプ (XML として保存されている) を処理するために NSPersistentDocument と Core Data に依存する OS X アプリがあります。

Core Data モデルを更新すると (単純な変更を行い、軽量の移行に依存しています) 、新しいモデルを利用しているアプリでファイルを開くだけで、ディスク上のファイルが変更されることに気付きました。元のファイルのバックアップ バージョンもディスクに表示されます (ファイル名に「~」が追加されます)。これが発生すると、以前の (リリースされた) バージョンのアプリでファイルを開くことができなくなります。

明確にするために:私は単にファイルを開いています。ファイルをディスクに保存していません。Finder で見ると、ファイルを開くとすぐに「~」が表示されます。

これは非常に危険な行為のようです。私は非常に用心しなければならず、私のユーザーベースが現在使用しているファイルを決して開かないようにしなければなりません。

これは OS X のデフォルトの動作ですか? NSPersistentDocument または私の Core Data モデルを構成して、ファイルを開くとストアが内部的にアプリに変更されますが、明示的に保存しない限り、変更がディスクに反映されないようにする方法はありますか?

4

1 に答える 1

0

Core Data は、古いファイルを新しいプログラムで開いている場合は、移行を進める必要があると想定しているようです。私自身の経験から、ファイルを開くと自動的に移行され、以前のバージョンのプログラムで開くことができなくなるのがデフォルトの動作です。これは、新しいストアがファイルを開くことができるように変更する必要があるハッシュ番号に関係していると思います。これにより、ドキュメントの永続的な変更が行われます。いいえ、ファイルを開くことはできないと思いますが、変更をディスクに反映することはできません。おそらく、移行を開始する前にコピーを作成できるメソッドをオーバーライドできます。

Apple の Developer Library には、作成される一時ファイルが記載されています。

移行が正常に進行すると、storeURL にある既存のストアの名前が変更され、ファイル拡張子の前に「~」サフィックスが付けられ、移行されたストアが storeURL に保存されます。

http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreDataVersioning/Articles/vmInitiating.html#//apple_ref/doc/uid/TP40004399-CH7-SW1

于 2012-12-04T06:28:16.500 に答える