Невозможно загрузить / получить изображение из Core Data

Я весь день искал в Интернете решение, но никуда не попал ... Я сохраняю изображение в основные данные, которые при тестировании с использованием печати (результатов) с NSFetchRequest, предполагает, что они хранятся в основных данных, показывая следующее в 'отладка площадь'...

[<toootesting.Entity: 0x7fb0816a69f0> (entity: Entity; id: 0xd000000000040000 <x-coredata://2D52E511-B03F-4629-ADF1-DEBD80A63EC0/Entity/p1> ; data: { photo = <89504e47 0d0a1a0a 0000000d 49484452 0000021c 000001e4 08020000 00fab561 c2000000 01735247 4200aece 1ce90000 0009>;

Изображение сохраняется с использованием следующего кода ...

 @IBAction func buttonOne(sender: AnyObject) {

    let img = UIImage(named: "Fencing")

    self.imageViewOne.image = img
    let imgData = UIImagePNGRepresentation(img!)

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext

    var newPhotos = NSEntityDescription.insertNewObjectForEntityForName("Entity", inManagedObjectContext: context)

    newPhotos.setValue(imgData, forKey: "photo")

    do {
        try context.save()
        print("image saved")

    } catch {
        print("error - saving NSData Image")
    }
}

Однако, когда я пытаюсь загрузить сохраненное изображение CoreData на второй imageView, запрос на выборку выдает ошибку .... «Невозможно преобразовать значение типа [AnyObject] в ожидаемый тип аргумента NSData».

Код ...

@IBAction func loadButton(sender: AnyObject) {

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext

    let request = NSFetchRequest(entityName: "Entity")
    request.returnsObjectsAsFaults = false

    do {
        let results = try context.executeFetchRequest(request)

        print(results)

        self.imageViewTwo?.image = UIImage(data: results)

    } catch {
        print("error - Loading!!!")
    }
}

Кажется, я могу преобразовать UIImage в первом действии в NSData, но при Fetch не смог преобразовать NSData обратно в UIImage, чтобы показать его на viewController.

Мой вопрос в том, могу ли я легко конвертировать из UIImage в NSData, могу ли я сделать наоборот таким же образом? Что мешает коду показывать изображение? Было бы очень признательно за решение для кодирования.

Заранее большое спасибо за вашу помощь, так как я здесь новичок.


person devim1    schedule 29.03.2016    source источник


Ответы (1)


Запрос на выборку возвращает массив. Вы должны

  • извлечь первый объект
  • преобразовать в NSData

Таким образом:

let results = try context.executeFetchRequest(request) as! [Entity]
let imageData = results.first!.photo

Обратите внимание, что в коде доставки вам следует избегать принудительного развертывания опций.
Вышесказанное относится к тому, что вы создали подкласс NSManagedObject для описания сущности Entity.

person Mundi    schedule 29.03.2016
comment
Привет, только что попробовал, но пусть imageData = results.first! вызвал Thread 1: EXC_Bad_Instruction (Code + EXC_1386 .....) - person devim1; 29.03.2016
comment
Значит, вы не нашли никаких записей - возможно, они не были сохранены. - person Mundi; 29.03.2016
comment
И, конечно же, вы должны выполнить приведение к своей Entity и извлечь данные из атрибута. - person Mundi; 29.03.2016
comment
Привет @Mundi - записи сохранены. Отладчик показывает 4 значения в NSData, но при достижении imageData возникает (ErrorType) - person devim1; 29.03.2016