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

введите описание изображения здесь

Я бы только ожидал, что будет одна версия. Изображения теперь являются осиротевшими, и если родительский объект удаляет этот объект с помощью правил каскадного удаления, файлы остаются, что занимает ценное место!

Это ошибка или я что-то не так делаю?

Спасибо

0 ответов

Другие вопросы по тегам