我无法将照片保存到核心数据中。我正在尝试将其保存为实体中设置为“可转换”的属性。我已经看到关于 SO 的各种讨论,并且共识似乎是在 iOS5 及更高版本中,我不需要使用编码器,因为 UIImage 现在符合 NSCoding。尝试保存 Core Data 时出现错误。请看下面我用来保存照片的代码......
- (void) imagePickerControllerUIImagePickerController *)picker didFinishPickingMediaWithInfoNSDictionary *)info {
NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
UIImage *originalImage, *editedImage, *imageToSave;
// Handle a still image capture
if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo) {
editedImage = (UIImage *) [info objectForKey:UIImagePickerControllerEditedImage];
originalImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage];
if (editedImage) {
imageToSave = editedImage;
} else {
imageToSave = originalImage;
}
// Convert image to Data for entry into Core Data
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(imageToSave)];
// Add image to Core Data
myEntity.attribute = imageData;
NSError *error = nil;
if (![managedObjectContext save:&error]) {
NSLog(@"Error when saving core data");
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
[[picker parentViewController] dismissModalViewControllerAnimated: YES];
[picker release];
}
Best Answer-推荐答案 strong>
我同意约瑟夫的回答。但是,如果您的图像是(礼貌 - Marcus S. Zarra's answer here),请查看 Apple 对存储图像的建议:
- 小于 100K;作为二进制属性存储在主表中
- 小于1M;作为二进制属性存储在辅助表中以避免过度获取
- 大于1M;存储在磁盘上并将其文件路径存储在 Core Data 表中。
从您的代码中,我看到您正在尝试将从相机拍摄的图像保存到核心数据。我们知道现在从手机/iPad 相机拍摄的图像大约为 2.5 Mbs。因此,您很可能会遇到性能问题。因此,我建议您将图像存储在文档目录中,并将其路径保存为 NSString 在您的实体中。这将是一种更有效的方式。
关于iphone - 将 UIImage 保存到 Core Data 时出错,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/10028440/
|