🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1251閲覧

[Swift]UserDefaultsへの画像保存

Jonny_dayo

総合スコア48

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/10/28 03:49

編集2019/10/28 17:36

前提・実現したいこと

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

イメージ説明
画面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) } }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

投稿2019/10/28 03:51

fuzzball

総合スコア16733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Jonny_dayo

2019/10/28 03:55

早速のご回答ありがとうございます! iv.image = imgArray[ret]にてランダムで画像を表示した後に表示されている画像の名前を取得して、それを保存し反映させるということでしょうか…?
fuzzball

2019/10/28 04:12

>>画像の名前を取得して もっと根元の部分からの修正が必要です。 「UIImageの配列」ではなく、「ファイル名の配列」にするところから始めて下さい。
Jonny_dayo

2019/10/28 04:57

fuzzball様 頂いた回答を元に質問文を修正してみたのですが、こんな感じで認識相違ないでしょうか…? 変更でエラーが出てしまった箇所はコメントアウトしてみました。
fuzzball

2019/10/28 05:01 編集

相違あります。「UIImageの配列」のままです。
Jonny_dayo

2019/10/28 07:06

あ、ってことは最初の状態で imgArray = [img01,img02,img03,img04…] とせず、 imageArray.append(img01) imageArray.append(img02) と追加していけばいいってことですか!?
fuzzball

2019/10/28 07:09

違います。それは生成方法が違うだけで、結局UIImageの配列です。 ファイル名っていうのは "ぞう.jpeg" などのことです。 ようするにStringの配列という意味です。
Jonny_dayo

2019/10/28 07:55

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

2019/10/28 17:37

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問