0

我不确定这是否是一个错误,所以正在寻求建议......

(xcode 5.1.1 上的 iOS 7.1.2)

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

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

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

这可以复制如下...

创建一个带有“测试”按钮的实用程序应用程序,它利用 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)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]; }

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

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

在此处输入图像描述

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

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

谢谢

4

0 回答 0