[プログラミング初心者、swift歴3ヶ月]
・前提・実現したいこと
画面をスクリーンショットし、それをコアデータに保存。画面推移をした画面でコアデータに保存したスクショ画像を表示させる機能を実装したいです。
・発生している問題
スクショ画像の表示ができなくて困っています。調べても保存した文字列を表示させる方法が出るだけで、画像を表示させる方法がわからりません。保存まではできています。
以前回答して頂いた通りにやってみてもエラーがでて、そこから自分なりに改善してみた結果も'[(Picture)]' does not have a member named 'picture'というエラーがでています。
コアデータに保存した画像を表示させる方法を教えていただきたいです。
よろしくお願いいたします。
・ソースコード
ShowViewController.swift (スクショされた画像を表示する。問題がおきている方です。)
swift
1import UIKit 2import CoreData 3 4class ShowViewController: UIViewController { 5 6 7 var myPicture = [Picture]() 8 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 readData() 13 14 } 15 16 override func didReceiveMemoryWarning() { 17 super.didReceiveMemoryWarning() 18 } 19 20 func readData(){ 21 22 let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 23 let myContext: NSManagedObjectContext = appDel.managedObjectContext! 24 25 let myRequest: NSFetchRequest = NSFetchRequest(entityName: "Picture") 26 myRequest.returnsObjectsAsFaults = false 27 28 //var results: NSArray! = myContext.executeFetchRequest(myRequest, error: nil) 29 30 myPicture = myContext.executeFetchRequest(myRequest, error: nil)as! [Picture] 31 32 // UIImage インスタンスの生成 33 let image1:UIImage? = UIImage(data: myPicture.picture) **エラー部分'[(Picture)]' does not have a member named 'picture' 34 35 // UIImageView 初期化 36 let imageView = UIImageView(image:image1) 37 38 // 画像の中心を187.5, 333.5 の位置に設定、iPhone6 39 imageView.center = CGPointMake(187.5, 333.5) 40 41 // UIImageViewのインスタンスをビューに追加 42 self.view.addSubview(imageView) 43 44 } 45} 46
Viewcontroller.swift (写真が表示されていて、それをスクショする。)
swift
1import UIKit 2import CoreData 3 4class ViewController: UIViewController { 5 6 @IBOutlet weak var screenShotImageView: UIImageView! 7 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 // Do any additional setup after loading the view, typically from a nib. 12 } 13 14 override func didReceiveMemoryWarning() { 15 super.didReceiveMemoryWarning() 16 // Dispose of any resources that can be recreated. 17 } 18 19 func screenShot() { 20 // スクリーンショットの取得開始 21 UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 1.0) 22 23 // 描画 24 view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true) 25 26 // 描画が行われたスクリーンショットの取得 27 let screenShot = UIGraphicsGetImageFromCurrentImageContext() 28 29 // スクリーンショットの取得終了 30 UIGraphicsEndImageContext() 31 32 // 取得したスクリーンショットを表示 33 //screenShotImageView.image = screenShot 34 35 //取得したスクリーンショットをコアデータに入れる 36 var imageData = UIImagePNGRepresentation(screenShot) 37 38 let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 39 let myContext: NSManagedObjectContext = appDel.managedObjectContext! 40 41 let myEntity: NSEntityDescription! = NSEntityDescription.entityForName("Picture", inManagedObjectContext: myContext) 42 43 var newData = Picture(entity: myEntity, insertIntoManagedObjectContext: myContext) 44 newData.picture = imageData 45 46 } 47 48 49 @IBAction func screenShot(sender: AnyObject) { 50 screenShot() 51 } 52}
Picture.swift (コアデータ)
swift
1import UIKit 2import Foundation 3import CoreData 4 5class Picture: NSManagedObject { 6 7 @NSManaged var picture: NSData 8 9} 10
コアデータの内容
ENTITIES : Picture
Attributes : picture Type:Binary Data
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/10 07:07