ios - 在coredata中“外部”存储二进制数据会导致孤立文件

时间:2014-07-22 21:40:25

标签: ios core-data uiimage external orphaned-objects

我不确定这是不是一个错误,所以我在征求意见......

(xcode 5.1.1上的iOS 7.1.2)

我的应用程序在coredata中存储了许多大数据图像。二进制图像的属性在实体中设置为“允许外部存储”,因此我看到一个文件(guid)出现在我的应用程序的_EXTERNAL_DATA子文件夹中。

在此应用的生命周期内,文件会定期更改,因此我会覆盖现有图像并保存上下文。

问题是,我看到我的图像文件(guid)的孤立副本出现了,因为创建了新的图像文件,但旧的图像文件没有被删除。

这可以转载如下......

使用'测试'创建一个实用程序应用程序。使用coredata的按钮,创建一个简单的实体......

enter image description here

enter image description here

在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)sender {       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]; }

在这里,我有四个大型飞机,每个飞机的大小略有不同。 (如果它们的大小相同,则问题不会表现出来)

运行该应用并按“测试”。按钮好几次。很快,该文件的几个版本出现在_EXTERNAL_DATA

enter image description here

我只希望有一个版本。图像现在是孤立的,如果父实体通过级联删除规则删除了这个,则会留下文件,这会占用宝贵的空间!

这是一个错误,还是我做错了什么?

由于

0 个答案:

没有答案