在显示下一个屏幕之前,Core Data保存未完成

时间:2014-08-05 19:11:55

标签: ios objective-c core-data

我的iOS应用有两个显示问题的屏幕:

在第一个屏幕上,用户拍摄照片。此照片调整大小(使用UIImage-ResizeMagick)到58像素高的缩略图。所以一个非常小的图像。

然后将此图像转换为NSData并保存到核心数据记录中。然后我保存上下文并显示下一个屏幕(实际上,我弹回到根控制器。)

此第二个屏幕应显示已添加和拍摄的项目列表。不幸的是,大部分时间(但不是所有时间)它都不显示最后一项。该项最终保存在数据库中,并在下次显示第二个屏幕时显示,但似乎核心数据保存不够快......在数据可用于拉出之前显示屏幕数据库。

如上所述,有时保存 足够快,并且该项目立即显示在第二个屏幕上,因此它似乎确实是一个时间问题。

等待'等待的正确方法是什么?在显示第二个屏幕之前要更新数据库吗?

UIImage *theImage = [info objectForKey:UIImagePickerControllerOriginalImage];

// RESIZE IT
UIImage *thumbNailImage = [theImage resizedImageByHeight:58];
theImage = nil;

// save image to tag
NSData *imageData = UIImagePNGRepresentation(thumbNailImage);
self.appDelegate.currentTag.photo_data = imageData;
[self.appDelegate saveContext];

// pop back to Home page
[self.navigationController popToRootViewControllerAnimated:NO];

1 个答案:

答案 0 :(得分:0)

核心数据有两种在Context上执行更改的方法。 [NSManagedObjectContext performBlock:][NSManagedObjectContext performBlockAndWait:]

如果您真的想要同步保存,请在appDelegate中添加另一个名为saveContextAndWait的方法。然后在这个方法中,您可以完全执行保存中的操作,只需确保将[NSManagedObjectContext save:]方法包装在performBlockAndWait中:。

快乐编码