2013-07-21 13 views
5

Mam model danych rdzenia zdjęcia albumu. Encja zdjęć zawiera kolumnę dla ścieżki rzeczywistych plików zdjęć zapisanych na dysku. Jaka jest najlepsza praktyka usuwania zdjęcia i albumu? Czy muszę ręcznie usunąć plik na dysku, zanim go skasuje? Dla obiektu fotograficznego jest to łatwe. Ale w przypadku albumu zdjęcia mogły zostać usunięte przez regułę kasowania kaskadowego, teraz należy je zapętlać jeden po drugim, aby obsługiwać pliki.Najlepsza praktyka usuwania podstawowych elementów danych, w których ścieżka jest przechowywana jako tekst, a rzeczywisty plik jest zapisywany na dysku?

Jaka jest najlepsza praktyka w mojej sprawie?

(I postanowił nie używać "pozwalają zewnętrznej pamięci masowej" dla innych problemów)

Odpowiedz

6

mógłby zastąpić prepareForDeletion w Photo zarządzanego obiektu podklasy i usunąć plik ze zdjęciem tam:

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

Następnie usunięcie obiektu powoduje automatyczne usunięcie odpowiedniego pliku, i działa również, gdy obiekt zostanie usunięty z powodu pewnej kaskadowej reguły usuwania.

UPDATE: Jak zauważył Xiaochao Yang, nadrzędnymi didSave może być lepiej rozwiązanie, w szczególności w przypadku korzystania z możliwości cofania zarządzanego kontekstu obiektu. Porównaj różne odpowiedzi na "How to handle cleanup of external data when deleting Core Data objects".

+0

Awesome! Dzięki. Po prostu znalazłem metodę prepareForDeletion, ale nie byłem pewien, czy działa ona również w celu kaskadowania. –

+0

@XiaochaoYang: Nie ma za co! –

+0

Znalazłem didSave i isDeleted może być lepszym rozwiązaniem, to daje ci trochę możliwości cofania. Szczegóły tutaj: http://stackoverflow.com/questions/5073113/how-to-handle-cleanup-of-external-data-when-deleting-core-data-objects –

Powiązane problemy