ios - Хранение двоичных данных "извне" в coredata приводит к появлению потерянных файлов
Я не уверен, является ли это ошибкой или нет, поэтому прошу совета...
(iOS 7.1.2 на xcode 5.1.1)
Мое приложение хранит много больших данных изображения в coredata. В двоичных изображениях их атрибут установлен в сущности на "Разрешить внешнее хранилище", поэтому я вижу файл (guid) в подпапке _EXTERNAL_DATA для моего приложения.
Во время жизни этого приложения файл будет регулярно меняться, поэтому я перезаписываю существующее изображение и сохраняю контекст.
Проблема в том, что я вижу осиротевшие копии моих файлов изображений (направляющих), появляющиеся по мере создания новых, но старые не удаляются.
Это может быть воспроизведено следующим образом...
Создайте служебное приложение с кнопкой "test", которая использует coredata, создавая простую сущность...
Создайте исходную сущность в viewDidLoad, сохранив ссылку на нее....
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
id delegate = [[UIApplication sharedApplication]delegate];
NSManagedObjectContext *managedObjectContext = [delegate managedObjectContext];
// Create initial external file
_testEntity = [NSEntityDescription insertNewObjectForEntityForName:@"TestEntity" inManagedObjectContext:managedObjectContext];
UIImage *planeImage = [UIImage imageNamed:@"plane.jpg"];
_testEntity.image = [NSData dataWithData:UIImagePNGRepresentation(planeImage)];
[delegate saveContext];
}
Затем в обработчике действий для кнопки в представлении просто измените изображение...
- (IBAction) onTestImageButton: (id) отправитель { int randNum = rand() % 4 + 1;
id delegate = [[UIApplication sharedApplication]delegate]; // Store image - again UIImage *planeImage = [UIImage imageNamed:[NSString stringWithFormat:@"plane %d.jpg", randNum]]; _testEntity.image = [NSData dataWithData:UIImagePNGRepresentation(planeImage)]; [delegate saveContext]; }
Здесь у меня есть четыре больших jpg самолета, каждый немного другого размера. (Если они одинакового размера, проблема не проявляется)
Запустите приложение и нажмите кнопку "Тест" несколько раз. Вскоре несколько версий файла появятся в _EXTERNAL_DATA
Я бы только ожидал, что будет одна версия. Изображения теперь являются осиротевшими, и если родительский объект удаляет этот объект с помощью правил каскадного удаления, файлы остаются, что занимает ценное место!
Это ошибка или я что-то не так делаю?
Спасибо