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

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

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

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

Xcode

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

Swift

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

Q&A

0回答

330閲覧

(swift5)csvファイルからpng画像を表示させる方法について行き詰まっています

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2022/06/26 14:11

編集2022/06/26 14:15

前提

私はXcodeをいじり始めて2ヶ月ばかりの初心者です。書籍やネット上の情報を参照しながら制作を進めております。

実現したいこと

約1000問収録のクイズアプリを作成中です。その中に、png形式の画像を利用した問題の章を含めるつもりでおります。

発生している問題・エラーメッセージ

Assets.xcassetsに該当のpng画像をセットし、その画像のタイトルをcsvファイルの0番目に入力しました。それでcsvファイルから該当の画像データを表示させられるかと思ったのですが、以下「問題点1・2・3」のように上手くいきません。

該当のソースコード

Swift

1import UIKit 2 3class ZuzouViewController: UIViewController { 4 @IBOutlet weak var zuzouNumberLabel: UILabel! 5 //↓ここでzuzouImageViewの変数を宣言し、StoryBoardのUIImageViewとも紐付けしてあります 6 @IBOutlet weak var zuzouImageView: UIImageView! 7 @IBOutlet weak var zuzouButton1: UIButton! 8 @IBOutlet weak var zuzouButton2: UIButton! 9 @IBOutlet weak var zuzouButton3: UIButton! 10 @IBOutlet weak var zuzouButton4: UIButton! 11 @IBOutlet weak var judgeImageView: UIImageView! 12 13 var csvArray: [String] = [] 14 var zuzouArray: [String] = [] 15 var zuzouCount = 0 16 var correctCount = 0 17 var selectZuzou = 0 18 19 override func viewDidLoad() { 20 super.viewDidLoad() 21 22 csvArray = loadCSV(fileName: "Zuzou\(selectZuzou)") 23 24 zuzouArray = csvArray[zuzouCount].components(separatedBy: ",") 25 26 zuzouNumberLabel.text = "図像地図\(selectZuzou):第\(zuzouCount + 1)問" 27 let Path = Bundle.main.path(forResource: zuzouArray[0]as AnyObject as? String, ofType: nil) 28 //(問題点1)↓ここで「定数のzuzouImageViewは存在しない」といった趣旨の黄色メッセージが出ることがあります。letをvarに変えると、「letにしろ」と言われます。 29 let zuzouImageView: UIImage = UIImage(contentsOfFile: Path!)! 30 31 //(問題点2)↓ここでzuzouImageViewについて、Value of type 'UIImage' has no member 'image'というエラーが出ます 32 zuzouImageView.image = (zuzouArray[0]) 33 zuzouButton1.titleLabel?.numberOfLines = 0 34 zuzouButton1.setTitle(zuzouArray[2], for: .normal) 35 zuzouButton2.titleLabel?.numberOfLines = 0 36 zuzouButton2.setTitle(zuzouArray[3], for: .normal) 37 zuzouButton3.titleLabel?.numberOfLines = 0 38 zuzouButton3.setTitle(zuzouArray[4], for: .normal) 39 zuzouButton4.titleLabel?.numberOfLines = 0 40 zuzouButton4.setTitle(zuzouArray[5], for: .normal) 41 // Do any additional setup after loading the view. 42 } 43 44 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 45 let ZuzouResultVC = segue.destination as! ZuzouResultViewController 46 ZuzouResultVC.correct = correctCount 47 ZuzouResultVC.zuzouNumber = selectZuzou 48 } 49 50 @IBAction func btnAction(sender:UIButton) { 51 if sender.tag == Int(zuzouArray[1]) { 52 print("正解") 53 correctCount += 1 54 judgeImageView.image = UIImage(named: "correct") 55 } else { 56 print("不正解") 57 judgeImageView.image = UIImage(named: "incorrect") 58 } 59 print("スコア:\(correctCount)") 60 judgeImageView.isHidden = false 61 zuzouButton1.isEnabled = false 62 zuzouButton2.isEnabled = false 63 zuzouButton3.isEnabled = false 64 zuzouButton4.isEnabled = false 65 DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { 66 self.judgeImageView.isHidden = true 67 self.zuzouButton1.isEnabled = true 68 self.zuzouButton2.isEnabled = true 69 self.zuzouButton3.isEnabled = true 70 self.zuzouButton4.isEnabled = true 71 self.nextZuzou() 72 } 73 74 } 75 76 func nextZuzou() { 77 zuzouCount += 1 78 if zuzouCount < csvArray.count { 79 zuzouArray = csvArray[zuzouCount].components(separatedBy: ",") 80 zuzouNumberLabel.text = "図像地図\(selectZuzou):第\(zuzouCount + 1)問" 81 //(問題点3)↓ここでCannot assign value of type 'String' to type 'UIImage?'というエラーメッセージが出ます。おそらく型のことを言っていて、画像表示はString型じゃないよと言われているのだと思いますが、どういう型変換をすれば良いのかわかりません。また問題点1・2と違い、個々のzuzouImageViewは、予測変換で出てきて色も黒色ではなく緑色になります。 82 zuzouImageView.image = zuzouArray[0] 83 zuzouButton1.setTitle(zuzouArray[2], for: .normal) 84 zuzouButton2.setTitle(zuzouArray[3], for: .normal) 85 zuzouButton3.setTitle(zuzouArray[4], for: .normal) 86 zuzouButton4.setTitle(zuzouArray[5], for: .normal) 87 88 } else { 89 performSegue(withIdentifier: "toZuzouResultVC", sender: nil) 90 } 91 } 92 93 func loadCSV(fileName: String) -> [String] { 94 let csvBundle = Bundle.main.path(forResource: fileName, ofType: "csv")! 95 do { 96 let csvData = try String(contentsOfFile: csvBundle, encoding: String.Encoding.utf8) 97 let lineChange = csvData.replacingOccurrences(of: "\r", with: "\n") 98 csvArray = lineChange.components(separatedBy: "\n") 99 csvArray.removeLast() 100 } catch { 101 print("エラー") 102 } 103 return csvArray 104 }``` 105 106### 試したこと 107 108何をどう試せばよいのかわからず、こちらのサイトに登録し、お伺いさせていただきました。よろしくお願いします。画像の表示はStringではなく何型だったか調べてはみたのですが、それすらわかりませんでした。 109 110### 補足情報(FW/ツールのバージョンなど) 111 112Xcode13.3です。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/06/26 14:13

投稿した瞬間にタイトルが打ちかけだったことに気がつきました。正しくは「csvファイルから画像を表示させる方法について行き詰まっています」です。今更ですが申し訳ございませんでした。
退会済みユーザー

退会済みユーザー

2022/06/26 14:16

さらに、これを書いた瞬間に、後から編集可能であったことが判明し、修正いたしました。
hoshi-takanori

2022/06/26 14:35

たぶん UIImage(named:) を使えば良いと思いますが、ちなみに csv の中身はどんな感じですか?
退会済みユーザー

退会済みユーザー

2022/06/27 12:55

ありがとうございます。csvの中身は 兵馬俑.png,1,選択肢1,選択肢2,選択肢3,選択肢4 という感じです。
hoshi-takanori

2022/06/27 14:14

なるほど。まず、日本語ファイル名は問題を起こす可能性があるので、できれば英数字にするのが好ましいですね。 そして、Assets.xcassets を使うなら拡張子は不要です。Image(named: "兵馬俑" ) というか、Image(named: zuzouArray[0]) でアクセスできるはず。
退会済みユーザー

退会済みユーザー

2022/06/27 14:22

ありがとうございます。最初はbingmayong.pngだったのですが、上手くいかないので兵馬俑.pngに変更していました。また元に戻した上で、Assets.xcassetsから明日やってみて、結果をご報告させて頂きます。
退会済みユーザー

退会済みユーザー

2022/06/28 14:16

csvファイルの兵馬俑.pngをbingmayongに変更し、問題点1と2の周辺を //(問題点1)↓ここで「定数のzuzouImageViewは存在しない」といった趣旨の黄色メッセージが出ることがあります。letをvarに変えると、「letにしろ」と言われます。 let zuzouImageView: UIImage = UIImage(contentsOfFile: Path!)! //(問題点2)↓ここでzuzouImageViewについて、Value of type 'UIImage' has no member 'image'というエラーが出ます zuzouImageView = UIImage(named: zuzouArray[0]) と変更しましたが、やっぱり上手くいきませんlet zuzouImageViewの行が邪魔しているような気もするのですが、これでいいのでしょうかね? 39行目のエラーメッセージでは「36行目のletをvarにしろ」というので、自動fixをすると、今度は36行目にエラーメッセージが出て「何勝手にletをvarに変えてんだよ、戻せよ」みたいなことを言われます。両方に従っていると無限ループが始まります。
hoshi-takanori

2022/06/29 06:26

zuzouImageView.image = UIImage(named: zuzouArray[0]) でいいはず。
退会済みユーザー

退会済みユーザー

2022/06/29 14:48

ありがとうございます。 zuzouImageView = UIImage(named: zuzouArray[0]) にして、「問題点1」のところを削除したら上手く行きました。 おまけに、兵馬俑のスペルまで間違っていたことに気がつきました。 ところで、この質問はどうやって解決済みにすればよいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問