2016-03-29 2 views
0

Я искал интернет весь день для решения, никуда не получая. Я сохраняю изображение для основных данных, которое при тестировании с использованием печати (результатов) с помощью 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 изображения на 2-й 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 в 1-м действии на NSData, но Fetch, не может преобразовать NSData обратно UIImage для того, чтобы показать его на ViewController.

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

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

ответ

1

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

  • экстракте первый объект
  • приведение к NSData

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

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

Обратите внимание, что в транспортировке код, который вы должны избегать, чтобы принудительно разворачивать УСТРОЙСТВА.
Приведенное выше правило применяется к объекту NSManagedObject для описания объекта Entity.

+0

Привет - просто попробовал это - но 'пусть imageData = results.first!' вызванный Thread 1: EXC_Bad_Instruction (Code + EXC_1386 .....) – devim1

+0

Итак, вы не нашли никаких записей - возможно, они не были сохранены. – Mundi

+0

И, конечно же, вы должны отдать свой ** Сущность ** и извлечь данные из атрибута. – Mundi