0

私は一日中インターネットを検索して解決策を探しましたが、どこにも行きませんでした.NSFetchRequestでprint(results)を使用してテストすると、コアデータに画像を保存しています。範囲'...

[<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 を NSData に変換できるようですが、Fetch では、viewController に表示するために NSData を UIImage に戻すことができません。

私の質問は、UIImage から NSData に簡単に変換できるかどうか、その逆も同じようにできるかどうかです。コードが画像を表示するのを止めているのは何ですか? コーディングソリューションは大歓迎です。

私はここで初心者なので、前もって助けてくれてありがとう。

4

1 に答える 1

1

フェッチ要求は配列を返します。必ず

  • 最初のオブジェクトを抽出する
  • にキャストNSData

したがって:

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

配送コードでは、オプションのラップを強制的に解除しないようにする必要があることに注意してください。
上記は、Entityエンティティを記述するために NSManagedObject をサブクラス化したことに適用されます。

于 2016-03-29T18:26:03.233 に答える