2016-03-29 11 views
0

私は一日中解決策を探しています。 イメージをコアデータに保存していますが、NSFetchRequestで印刷(結果)をテストしたところ、コアデータからイメージをロード/取得できません

@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") 
    } 
} 
01 ...画像は、次のコードを使用して保存されている

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

...「デバッグ領域」に次のように示すことによって、コアデータに格納されます。

私は第二ImageViewの上に保存されたCoreDataの画像をロードしようとすると、フェッチ要求がエラーを思い付くしかし、....「予想される引数の型のNSDataに[ANYOBJECT]型の値を変換できません」

コードされます...

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

私がのViewControllerでそれを示すために戻ってUIImageへのNSDataを変換することができない、のNSDataへの第一のアクションでUIImageを変換しますが、上取得することができそうです。

私はUIImageからNSDataに簡単に変換できるのでしょうか?私は同じ方法で逆もできますか?何がコードの画像表示を停止していますか?コーディングの解決策は非常に高く評価されます。

私はここで新しいスタートを切っているので、事前にお手伝いいただきありがとうございます。

答えて

1

フェッチ要求は配列を返します。出荷コード内で使用すると、強制的にアンラップするoptionalsを避けるべきであると

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

注:あなたは

  • 第一の目的にこのようNSData

から

  • キャストを抽出する必要があります。
    上記は、Entityエンティティを表すNSManagedObjectをサブクラス化したものです。

  • +0

    こんにちは - これを試しましたが、 'imageData = results.first!'原因スレッド1:EXC_Bad_Instruction(コード+ EXC_1386 .....) – devim1

    +0

    これでレコードが見つかりませんでした。おそらく保存されていなかったでしょう。 – Mundi

    +0

    もちろん、** Entity **にキャストし、属性からデータを抽出する必要があります。 – Mundi

    関連する問題