2016-03-29 7 views
0

Ich habe das Internet den ganzen Tag nach einer Lösung gesucht, nirgendwo hin .. Ich speichere ein Bild zu Kerndaten, die beim Testen mit print (Ergebnisse) mit NSFetchRequest schlägt wird die folgende in 'Debug-Bereich', indem zeigt ...Bild kann nicht aus Kerndaten geladen/abgerufen werden

[<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>;

im Core Data gespeichert

das Bild gespeichert wird mit dem folgenden Code ...

@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") 
    } 
} 

Allerdings, wenn ich versuche, das gespeicherte Bild Coredata auf ein zweites Imageview Laden der Abrufanforderung kommt mit einem Fehler nach oben .... „Kann Wert vom Typ nicht konvertieren [ANYOBJECT] zu erwarten Argument Typ NSData“

Der Code ist

...
@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!!!") 
    } 
} 

es scheint, ich UIImage in der ersten Aktion NSData konvertieren kann, aber auf Abruf, nicht in der Lage NSData zurück zu UIImage zu konvertieren, um sie auf Viewcontroller zu zeigen.

Meine Frage ist, ob ich einfach von UIImage zu NSData konvertieren kann, sollte ich in der Lage sein, umgekehrt auf die gleiche Weise zu tun? Was verhindert, dass der Code das Bild anzeigt? Eine Kodierungslösung würde sehr geschätzt werden.

Vielen Dank für Ihre Hilfe im Voraus, da ich ein neuer Starter bin hier.

Antwort

1

Die Abrufanforderung gibt ein Array zurück. Sie müssen

  • Extrakt das erste Objekt
  • cast NSData

So:

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

Beachten Sie, dass Sie sollten in der Schifffahrt Code vermeiden optionals zwangs auszupacken.
Das obige gilt, dass Sie NSmanagedObject subclassed, um die Entity Einheit zu beschreiben.

+0

Hi - gerade versucht, dass - aber 'ImageData = results.first!' verursacht Thread 1: EXC_Bad_Instruction (Code + EXC_1386 .....) – devim1

+0

So haben Sie keine Datensätze gefunden - vielleicht wurden sie nicht gespeichert. – Mundi

+0

Und natürlich müssen Sie in Ihre ** Entity ** umwandeln und die Daten aus dem Attribut extrahieren. – Mundi

Verwandte Themen