如何使用Core Data和RestKit映射和存储图像?

时间:2011-12-16 15:35:52

标签: iphone core-data restkit nsimage

将图像与Core Data一起使用不是问题。关于如何做到这一点有很多例子:How should I store UIImages within my Core Data database?

我想知道如何使用RestKit下载图像并将它们正确映射到Core Data。有一个关于如何上传图像但不下载和检索的RestKit示例。

现在我的实体只有一个带有图像网址的属性,但我希望能够离线访问图像。我正在考虑做一些简单的映射,比如下载一个图像并将其重命名为它所属的对象的id,但在重新创建这个轮子之前,我想知道其他人是否知道最“正确”的方法来实现这一点。

2 个答案:

答案 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();
    }