質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.34%

[Swift]UserDefaultsへの画像保存

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,121

score 44

前提・実現したいこと

配列で保存した画像をランダムで表示し、表示された画像のみを保存して別のビューで表示したいです。

イメージ説明
画面A:Viewを開いた時に表示された画像のみを保存して、
イメージ説明
画面B:別のViewに遷移した際にTableViewに表示したいです。

画面A

    var imageArray: [UIImage] = [
        UIImage(named: "ぞう.jpeg")!, UIImage(named: "うさぎ.jpeg")!,
        UIImage(named: "あるぱか.jpeg")!, UIImage(named: "ぶた.jpeg")!,
        UIImage(named: "はむ.jpeg")!, UIImage(named: "ひよこ.jpeg")!,
        UIImage(named: "いぬ.jpeg")!, UIImage(named: "くま.jpeg")!,
        UIImage(named: "はち.jpeg")!, UIImage(named: "ねこ.jpeg")!,
        UIImage(named: "ぱんだ.jpeg")!, UIImage(named: "ぺんぎん.jpeg")!,
    ]
    let udf = UserDefaults.standard

    override func viewDidLoad() {
        super.viewDidLoad()

        imageset()

        }

        private func imageset(){

            let iv = UIImageView(frame: CGRect(x: 20, y: 90, width: 60, height: 60))
            //imgArray = [img01,img02,img03,img04,img05,img06,img07,img08,img09,img10,img11,img12]
            let ret = Int(arc4random_uniform(12))
            //iv.image = imgArray[ret]
            iv.backgroundColor = UIColor.systemBlue
            iv.layer.cornerRadius = iv.frame.height * 0.5 //1辺の長さ * 0.5にする
            iv.clipsToBounds = true
            self.view.addSubview(iv)

        }
    @IBAction func save(_ sender: Any) {

        var imagedata: [String] = udf.array(forKey: "tweet") as? [String] ?? []
        imagedata.append(iv.image)
        udf.set(imagedata, forKey: "tweet")
        //Use of unresolved identifier 'iv'が出る
        self.dismiss(animated: true, completion: nil)

    }
}

画面B

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func viewDidAppear(_ animated: Bool) {

        imgArray = UserDefaults.standard.array(forKey: "myImage") as! [UIImage]
        tableview.reloadData()

    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")
        cell.selectionStyle = .none
        cell.textLabel?.numberOfLines = 3
        cell.textLabel?.text = tweetArray[indexPath.row]
        //画像の横からテキストを始めたい。どうやるんだ?
        let iv = UIImageView(frame: CGRect(x: 15, y: 10, width: 60, height: 60))
        iv.backgroundColor = UIColor.systemBlue
        iv.image = imgArray[indexPath.row]
        //Userdefaultsで保存した画像を呼び出したい
        iv.layer.cornerRadius = iv.frame.height * 0.5
        iv.clipsToBounds = true
        cell.contentView.addSubview(iv)
        return cell
    }
}

エラー箇所

    @IBAction func save(_ sender: Any) {

        var imagedata: [String] = udf.array(forKey: "tweet") as? [String] ?? []
        imagedata.append(iv.image)
        udf.set(imagedata, forKey: "tweet")
        //Use of unresolved identifier 'iv'が出る
        self.dismiss(animated: true, completion: nil)

    }

ツールのバージョン

Xcode : Version 11.0
Swift : Apple Swift version 5.1

最終的なコード

    var imgArray:[UIImage] = []
    var img: [String] = ["ぞう","うさぎ","あるぱか","ぶた","はむ","ひよこ","いぬ","くま","はち","ねこ","ぱんだ","ぺんぎん"]
    var img01 :UIImage = UIImage(named:"ぞう")!
    var img02 :UIImage = UIImage(named:"うさぎ")!
    var img03 :UIImage = UIImage(named:"あるぱか")!
    var img04 :UIImage = UIImage(named:"ぶた")!
    var img05 :UIImage = UIImage(named:"はむ")!
    var img06 :UIImage = UIImage(named:"ひよこ")!
    var img07 :UIImage = UIImage(named:"いぬ")!
    var img08 :UIImage = UIImage(named:"くま")!
    var img09 :UIImage = UIImage(named:"はち")!
    var img10 :UIImage = UIImage(named:"ねこ")!
    var img11 :UIImage = UIImage(named:"ぱんだ")!
    var img12 :UIImage = UIImage(named:"ぺんぎん")!
    let udf = UserDefaults.standard
    var imageName = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        imageset()
    }
        private func imageset(){

            let iv = UIImageView(frame: CGRect(x: 20, y: 90, width: 60, height: 60))
            let ret = Int(arc4random_uniform(12))
            imageName = img[ret]
            iv.image = UIImage(named: imageName)
            iv.backgroundColor = UIColor.systemBlue
            iv.layer.cornerRadius = iv.frame.height
            iv.clipsToBounds = true
            self.view.addSubview(iv)

    }
    @IBAction func save(_ sender: Any) {

        var imagedata: [String] = udf.array(forKey: "imageName") as? [String] ?? []
        imagedata.append(imageName)
        udf.set(imagedata, forKey: "imageName")
        self.dismiss(animated: true, completion: nil)

    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

お手軽なところで、画像のファイル名で受け渡しして下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/28 16:09

    違います。それは生成方法が違うだけで、結局UIImageの配列です。

    ファイル名っていうのは "ぞう.jpeg" などのことです。
    ようするにStringの配列という意味です。

    キャンセル

  • 2019/10/28 16:55

    var imgArray:[UIImage] = []
    var img: [String] = ["ぞう","うさぎ","あるぱか","ぶた","はむ","ひよこ","いぬ","くま","はち","ねこ","ぱんだ","ぺんぎん"]
    imgArray.append(UIImage(named: "\(img).jpeg")!)
    これだとまだUIImageの配列ですよね…?
    本当にお手数かけて申し訳ございません…

    キャンセル

  • 2019/10/29 02:37

    解決しました!!!!
    仰ってた意味も理解できました!お手数おかけしましたありがとうございます!!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る