2013-07-21 14 views
5

Tôi có mô hình dữ liệu lõi ảnh của album. Thực thể ảnh có một cột cho đường dẫn của các tệp ảnh thực được lưu trên đĩa. Phương pháp hay nhất để xóa ảnh và album là gì? Tôi có phải xóa thủ công tệp trên đĩa trước khi xóa mục trong ngày lõi không? Thật dễ dàng cho một đối tượng ảnh. Nhưng đối với một album, các bức ảnh có thể đã bị xóa bởi quy tắc xóa tầng, bây giờ cần phải được lặp lại từng cái một để xử lý các tệp.Cách thực hành tốt nhất để xóa các mục dữ liệu cốt lõi nơi đường dẫn được lưu trữ dưới dạng văn bản và tệp thực được lưu trên đĩa?

Thực tiễn tốt nhất cho trường hợp của tôi là gì?

(tôi đã quyết định không sử dụng "cho phép lưu trữ bên ngoài" cho mối quan tâm khác)

Trả lời

6

Bạn có thể ghi đè lên prepareForDeletion trong Ảnh quản lý lớp đối tượng và xóa các tập tin ảnh có:

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

Sau đó xóa đối tượng Ảnh sẽ tự động xóa tệp tương ứng, và nó cũng hoạt động nếu đối tượng bị xóa do một số quy tắc xóa tầng.

UPDATE: Như Xiaochao Yang nhận thấy, trọng didSave có thể là giải pháp tốt hơn, đặc biệt nếu bạn sử dụng khả năng lùi lại một bối cảnh đối tượng quản lý. So sánh các câu trả lời khác nhau cho "How to handle cleanup of external data when deleting Core Data objects".

+0

Tuyệt vời! Cảm ơn. Chỉ cần tìm thấy PrepareForDeletion, nhưng không chắc chắn nếu nó cũng làm việc cho tầng. –

+0

@XiaochaoYang: Bạn được chào đón! –

+0

Tôi tìm thấy didSave và isDeleted có thể là một giải pháp tốt hơn, điều này mang lại cho bạn một chút khả năng hoàn tác. Chi tiết tại đây: http://stackoverflow.com/questions/5073113/how-to-handle-cleanup-of-external-data-when-deleting-core-data-objects –