2017-11-24 12 views
0

내 CoreData 모델에 이미지 특성이있는 엔터티가 있습니다. 필자는 파일 시스템에 이미지를 저장하고 CoreData 속성 (예 : path)에 파일에 대한 참조 만 유지함으로써이 엔티티의 이미지를 항상 관리했습니다.CoreData - 하위 컨텍스트에서 파일 참조 관리

그러나 최근에는 편집 처리를 위해 하위 관리 컨텍스트를 사용하도록 변경했습니다 (사용자가 편집 취소를 선택해야하는 경우 변경 사항을 쉽게 삭제할 수 있도록). 이것은 모두 훌륭하지만 좋았지 만 사용자가 이미지를 변경하면 더 이상 이전 파일을 삭제할 수 없으며 (파일 시스템에 고아가 된 파일을 원하지 않음) 특히 이미지 변경을 추적하는 문제가 있습니다. 사용자가 변경 사항을 취소하면 이전 파일이 손실되기 때문에 새 파일로 바꾸십시오.

  1. 내 비즈니스 계층의 이미지 변화를 추적하고 상황에 맞는 경우에만 새로운 이미지를 문맥이 저장되면 오래된 이미지를 제거하거나 반대로 삭제 : 제가보기에는

    나는 두 가지 옵션이 있습니다 폐기/취소됨.

  2. 내 이미지 속성을 2 진 데이터 유형 ('외부 저장 공간 허용'을 선택)으로 변경하고 CoreData가 데이터를 관리하도록합니다 ... 어떤 경우 든 제대로 작동해야합니다.

어떤 지침이 더 좋고 무엇보다 중요한 것은 무엇인가? 또는 다른 대체 솔루션/옵션 ...

고마워요!

답변

1

첫 번째 방법이 더 좋을 것입니다. 저장 내용을 삭제할 수 있다면 그렇게하는 것이 좋습니다. 그리고 이미지가 일반적으로 작지 않다면 일반적으로 이미지를 외부에 유지하는 것이 좋습니다.

오래된 이미지를 삭제하는 좋은 방법은 관리되는 개체의 willSave() 방법 일 것입니다. changedValues을보고 이전 이미지 이름을 찾으십시오. 현재 값과 다른 경우 이전 값을 삭제하십시오.

변경 사항 롤백을 처리하려면 두 가지 가능성이 있습니다.

  • 롤백하려는 새 인스턴스를보고 해당 이미지 파일을 제거하여 변경 사항을 롤백하는 코드입니다.
  • 변경 사항을 저장할 때 항상 새로운 이미지를 NSTemporaryDirectory()에 넣고 willSave()을 사용하여 이미지를 영구 위치로 이동하십시오. 그런 다음 롤백시 아무 것도 할 필요가 없습니다. iOS가 임시 디렉토리를 지우도록 처리 할 수 ​​있습니다.
+0

(현재 크기를 줄이고 CoreData에 이진 필드로 저장하는 더 나은 이미지 압축 전략을 채택 할 계획인지) 아직 100 % 안 될 것입니다 ...하지만 나에게 좋은 팁과 아이디어는 이것을 다시 방문 할 수 있습니다. 감사합니다. –