我不确定这是不是一个错误,所以我在征求意见......
(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]; }
在这里,我有四个大型飞机,每个飞机的大小略有不同。 (如果它们的大小相同,则问题不会表现出来)
运行该应用并按“测试”。按钮好几次。很快,该文件的几个版本出现在_EXTERNAL_DATA
中
我只希望有一个版本。图像现在是孤立的,如果父实体通过级联删除规则删除了这个,则会留下文件,这会占用宝贵的空间!
这是一个错误,还是我做错了什么?
由于