Использование NSCollectionView с CoreData и NSImageView

Я пытаюсь настроить NSCollectionView, который привязан к сущности, и я пытаюсь загрузить изображение в NSImageView из этой сущности. Я сохранил изображение как объект NSData.
Я провел небольшое исследование и обнаружил, что должен установить ValueTransformer, но не смог получить эту работу.

Вот мой код для процесса сохранения моего атрибута изображения pdfImage:

pdf = NSData(contentsOfFile: path)

            // pdf to image
            let pdfImageRep = NSPDFImageRep(data: pdf)
            let factor: CGFloat = 300/72

            pdfImageRep?.currentPage = 1
            let image = NSImage(size: self.frame.size, flipped: false,
                drawingHandler: {
                    dstRect in

                    (pdfImageRep?.drawInRect(dstRect))!
                    return true
            })

            let scaledImageRep = image.representations.first
            scaledImageRep?.pixelsWide = Int((pdfImageRep?.size.width)! * factor)
            scaledImageRep?.pixelsHigh = Int((pdfImageRep?.size.height)! * factor)

            let pngImageRep = NSBitmapImageRep(data: image.TIFFRepresentation!)
            let imageData = pngImageRep?.representationUsingType(NSBitmapImageFileType.NSJPEGFileType, properties: [:])

            pdfImage = imageData

Я сохраняю pdfImage позже в коде.

Как я уже сказал, я пытался использовать NSKeyedUnarchiveFromData в качестве ValueTransformer, но это не сработало.

Я делаю это неправильно или есть более простой способ? И может ли кто-нибудь помочь мне с этой проблемой?

Большое спасибо!

1 ответ

Решение

Я храню NSImage в Core Data. Тип в модели данных является трансформируемым.

anImage = [[NSImage alloc] initWithContentsOfURL:aFileURL];
if (anImage) {
    anImageObject = [NSEntityDescription insertNewObjectForEntityForName:@"Image" inManagedObjectContext:[self managedObjectContext]];
    [anImageObject setImage:anImage];
}

Я связываю значение NSImageView со свойством изображения без преобразователя значения.

пс. если вы храните данные изображения (или другие большие двоичные объекты) в Базовых данных, поместите изображение в отдельную сущность или сохраните пути. Смотрите раздел BLOB-объектов в Руководстве по программированию основных данных.

Другие вопросы по тегам