Как сопоставлять и хранить изображения с помощью Core Data и RestKit?

Использование изображений с Core Data не проблема. Существует множество примеров того, как это сделать, например: Как мне хранить UIImages в моей базе данных Core Data?

Я хочу знать, как использовать RestKit для загрузки изображений и правильного сопоставления их с основными данными. Существует пример RestKit о том, как загрузить изображение, но не загружать и извлекать.

Сейчас у моих объектов просто есть атрибут с URL-адресом изображения, но я хочу иметь доступ к изображениям в автономном режиме. Я думал сделать какое-то простое сопоставление, например загрузить изображение и переименовать его в идентификатор объекта, которому оно принадлежит, но прежде чем воссоздать это колесо, мне было интересно, знает ли кто-нибудь еще самый «правильный» способ добиться этого.


person Steve Moser    schedule 16.12.2011    source источник
comment
вы планируете развертывание 10.7 и iOS 5?   -  person user170317    schedule 17.12.2011
comment
iOS5 для этого проекта, но было бы полезно и для 4.0   -  person Steve Moser    schedule 18.12.2011


Ответы (2)


Я использую JsonKit и ASIHTTPRequest, но применяется тот же принцип — я использую кодировку base64 для хранения данных изображения. как строка. Это независимый от платформы и языка подход, который хорошо согласуется со стандартом JSON.

Какао с любовью Мэтт Галлахер написал очень чистую категорию на NSData для кодирование и декодирование base64 здесь.

person Jacob Jennings    schedule 20.12.2011

В итоге я просто запросил объект с URL-адресом изображения, и после получения объекта я захватил изображение для URL-адреса, установив его в свойство изображения моего объекта. Простой

NSURL *URL-изображения; UIImage * выбранное изображение;

    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();
    }
person Steve Moser    schedule 30.01.2012
comment
Похоже, вы теперь запрашиваете образ синхронно и без использования Restkit. Правильно? Есть ли способ запросить изображение с помощью RestKit? Это помогло бы мне, потому что аутентификация обрабатывается ресткитом. - person jpalten; 22.07.2012
comment
Это правильно. Я не знаю, как запросить двоичный ресурс с помощью RestKit, но я бы проверил это: groups.google.com/forum/?fromgroups#!topic/restkit/q6wP_hQPEfM - person Steve Moser; 23.07.2012
comment
Я сделал подклассы для RKRequest и RKResponse, которые будут запрашивать файл (или изображение) и записывать ответ на диск вместо памяти. Работает как шарм. - person jpalten; 25.07.2012