将图像与Core Data一起使用不是问题。关于如何做到这一点有很多例子:How should I store UIImages within my Core Data database?
我想知道如何使用RestKit下载图像并将它们正确映射到Core Data。有一个关于如何上传图像但不下载和检索的RestKit示例。
现在我的实体只有一个带有图像网址的属性,但我希望能够离线访问图像。我正在考虑做一些简单的映射,比如下载一个图像并将其重命名为它所属的对象的id,但在重新创建这个轮子之前,我想知道其他人是否知道最“正确”的方法来实现这一点。
答案 0 :(得分:1)
我使用JsonKit和ASIHTTPRequest,但同样的原则适用 - 我使用base64 encoding将图像数据存储为字符串。它是一种平台和语言无关的方法,非常适合JSON标准。
Cocoa with Love's Matt Gallagher写了一篇非常干净的category on NSData for base64 encoding and decoding here.
答案 1 :(得分:1)
我最后只是使用图片网址请求对象,在收到对象后,我抓取了网址的图片,将其设置为我对象的图片属性。简单
NSURL * imageURL; UIImage * selectedImage;
for (Employee *employee in _employees){
imageURL = [NSURL URLWithString:employee.imageURL];
selectedImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageURL]];
// Delete any existing image.
NSManagedObject *oldImage = employee.image;
if (oldImage != nil) {
[employee.managedObjectContext deleteObject:oldImage];
}
// Create an image object for the new image.
NSManagedObject *image = [NSEntityDescription insertNewObjectForEntityForName:@"Image" inManagedObjectContext:employee.managedObjectContext];
employee.image = image;
// Set the image for the image managed object.
[image setValue:selectedImage forKey:@"image"];
// Create a thumbnail version of the image for the recipe object.
CGSize size = selectedImage.size;
CGFloat ratio = 0;
if (size.width > size.height) {
ratio = 100.0 / size.width;
} else {
ratio = 100.0 / size.height;
}
CGRect rect = CGRectMake(0.0, 0.0, ratio * size.width, ratio * size.height);
UIGraphicsBeginImageContext(rect.size);
[selectedImage drawInRect:rect];
employee.thumbnailImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}