我不确定这是否是一个错误,所以正在寻求建议......
(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
我只希望有一个版本。图像现在是孤立的,如果父实体通过级联删除规则删除该图像,则会留下文件,这会占用宝贵的空间!
这是一个错误,还是我做错了什么?
谢谢