2013-07-21 5 views
5

私はアルバムフォトコアデータモデルを持っています。写真エンティティには、ディスクに保存されている実際の写真ファイルのパスの列があります。写真とアルバムを削除するベストプラクティスは何ですか?コア日付でアイテムを削除する前に、ディスク上のファイルを手動で削除する必要がありますか?写真のオブジェクトは簡単です。しかし、アルバムの場合、写真はカスケード削除ルールによって削除されている可能性があり、ファイルを処理するために1つずつループする必要があります。パスがテキストとして保存され、実際のファイルがディスクに保存されるコアデータ項目を削除するためのベストプラクティスはありますか?

私の場合のベストプラクティスは何ですか?

(私は他の問題のために、「許可する外部記憶装置」を使用することなしに決めた)

答えて

6

あなたがそこに写真ファイルを削除写真管理オブジェクトサブクラスと でprepareForDeletionをオーバーライドすることができます:

- (void)prepareForDeletion 
{ 
    [super prepareForDeletion]; 
    [[NSFileManager defaultManager] removeItemAtPath:self.path error:nil]; 
} 

をその後、の写真オブジェクトを削除すると、対応するファイル が自動的に削除され、一連のカスケード削除ルールのためにオブジェクトが削除された場合にも機能します。

UPDATE: Xiaochaoヤンは、管理対象オブジェクトコンテキストのアンドゥ機能を使用する場合didSaveは特に、より良い 解決策かもしれませんオーバーライドし、気づいたよう。 "How to handle cleanup of external data when deleting Core Data objects"への様々な回答を比較してください。

+0

恐ろしい!ありがとう。単にprepareForDeletionを見つけましたが、それがカスケーディングのためにも機能するかどうかはわかりませんでした。 –

+0

@ XiaochaoYang:ようこそ! –

+0

私はdidSaveとisDeletedがより良い解決策かもしれないことが分かりました。これはあなたに少しの元に戻す能力を与えます。詳細はこちら:http://stackoverflow.com/questions/5073113/how-to-handle-cleanup-of-external-data-when-deleting-core-data-objects –

関連する問題