我的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];
答案 0 :(得分:0)
核心数据有两种在Context上执行更改的方法。 [NSManagedObjectContext performBlock:]
和[NSManagedObjectContext performBlockAndWait:]
。
如果您真的想要同步保存,请在appDelegate中添加另一个名为saveContextAndWait的方法。然后在这个方法中,您可以完全执行保存中的操作,只需确保将[NSManagedObjectContext save:]方法包装在performBlockAndWait中:。
快乐编码