我是iOS中的新手。 这是UIImagePickerController示例中的代码
我想知道为什么使用NSManagedObjectContext,NSEntityDescription来管理数据。 为什么不直接设置值? 谢谢你的帮助!
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)selectedImage editingInfo:(NSDictionary *)editingInfo {
NSManagedObjectContext *context = event.managedObjectContext;
// If the event already has a photo, delete it.
if (event.photo) {
[context deleteObject:event.photo];
}
// Create a new photo object and set the image.
Photo *photo = [NSEntityDescription insertNewObjectForEntityForName:@"Photo" inManagedObjectContext:context];
photo.image = selectedImage;
// Associate the photo object with the event.
event.photo = photo;
// Create a thumbnail version of the image for the event object.
CGSize size = selectedImage.size;
CGFloat ratio = 0;
if (size.width > size.height) {
ratio = 44.0 / size.width;
}
else {
ratio = 44.0 / size.height;
}
CGRect rect = CGRectMake(0.0, 0.0, ratio * size.width, ratio * size.height);
UIGraphicsBeginImageContext(rect.size);
[selectedImage drawInRect:rect];
event.thumbnail = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Commit the change.
NSError *error = nil;
if (![event.managedObjectContext save:&error]) {
// Handle the error.
}
// Update the user interface appropriately.
[self updatePhotoInfo];
[self dismissModalViewControllerAnimated:YES];
}
答案 0 :(得分:0)
当您说“直接插入图像”时,我并不完全确定您的意思。您在代码中执行的操作是创建一个新的Photo对象,在数据库中插入一个新的Photo实体,然后将其photo属性设置为通过UIImagePickerViewController选择的图像,该图像将图像保存到数据库中的特定实体
换句话说,您可以直接设置它。如果你想知道它为什么没有使用查询添加到数据库中,那是因为Core Data是一个面向对象的数据库层,除了显而易见的面向对象之外,NSManagedObjectContext提供了大量有用的功能 - 即。后悔改变的能力。