2016-03-29 1 views
0

J'ai cherché sur Internet toute la journée pour trouver une solution, ne pas obtenir n'importe où .. Je sauvegarde une image aux données de base qui, lorsqu'elle est testée en utilisant print (résultats) avec NSFetchRequest, suggère est stocké dans la base de données en montrant ce qui suit dans 'zone de débogage' ...Impossible de charger/récupérer l'image à partir des données de base

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

l'image est enregistrée en utilisant le code suivant ...

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

Cependant, lorsque je tente Chargement de l'image CoreData enregistrée sur une 2ème imageView la demande de récupération vient avec une erreur .... « Impossible de convertir la valeur de type [ANYOBJECT] type d'argument attendu NSData »

Le code est ...

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

il semble que je peux convertir UIImage dans la 1ère action à NSData, mais Fetch, incapable de convertir NSData revenir à UIImage afin de le montrer sur viewController.

Ma question est de savoir si je peux convertir UIImage en NSData facilement, est-ce que je devrais pouvoir faire vice versa de la même manière? Qu'est-ce qui empêche le code de montrer l'image? Une solution de codage serait très appréciée.

Merci beaucoup pour votre aide à l'avance, car je suis une nouvelle starter ici.

Répondre

1

La requête d'extraction renvoie un tableau. Vous devez

  • extrait le premier objet
  • coulé à NSData

Ainsi:

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

Notez que dans le code d'expédition, vous devriez éviter de forcer-déballant optionals.
Ce qui précède vaut que vous avez sous-classé NSManagedObject pour décrire l'entité Entity.

+0

Salut - juste essayé cela - mais 'let imageData = results.first!' causé Discussion 1: EXC_Bad_Instruction (code + EXC_1386 .....) – devim1

+0

Vous ne trouverez pas de dossiers - peut-être qu'ils ne sont pas sauvés. – Mundi

+0

Et bien sûr, vous devez lancer votre ** Entité ** et extraire les données de l'attribut. – Mundi