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

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

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

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

Xcode

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

Swift

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

Q&A

解決済

3回答

1990閲覧

Swiftを使用し、複数の画像の中から1枚の画像をランダムに表示させるアプリを作成したいのですが、画像が表示されません。

DynMat

総合スコア12

Cocoa

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

Xcode

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

Swift

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

0グッド

1クリップ

投稿2018/03/12 12:41

前提・実現したいこと

Cocoaを使用し、画像をランダムに表示させるアプリを作成したいです。

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

画像が表示されない(ウィンドウだけ表示される。コンパイルは通る。)

エラーメッセージ

該当のソースコード

swift

1import Cocoa 2 3class ViewController: NSViewController { 4 var img01 :NSImage = NSImage(named:NSImage.Name(rawValue: "cat.png"))! 5 var img02 :NSImage = NSImage(named:NSImage.Name(rawValue: "dog.jpg"))! 6 var img03 :NSImage = NSImage(named:NSImage.Name(rawValue:"bird.jpg"))! 7 8 var imgArray:[NSImage] = [] 9 10 @IBOutlet weak var ImageView: NSImageView! 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 // Do any additional setup after loading the view, typically from a nib. 15 } 16 17 18 override var representedObject: Any? { 19 didSet { 20 // Update the view, if already loaded. 21 } 22 } 23 24 @IBAction func rand(sender: AnyObject) { 25 imgArray = [img01,img02,img03] 26 let ret = Int(arc4random_uniform(3)) 27 ImageView.frame = CGRect(x:20,y:25,width:100,height:150) 28 self.ImageView.image = imgArray[ret] 29 self.view.addSubview(ImageView) 30 } 31}

試したこと

画像が表示されない理由を考えましたが、わかりませんでした。Xcodeを使用して書いているのですが、Xcode初心者のため初歩的なことで間違えている可能性があります。

補足情報(FW/ツールのバージョンなど)

swift 4.0.3

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

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

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

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

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

guest

回答3

0

ベストアンサー

私も初心者なので間違っていたらごめんなさい。
super.viewDidLoad()の下に、これ↓を入れたら表示されますか?

imgArray = [img01,img02,img03] let ret = Int(arc4random_uniform(3)) ImageView.frame = CGRect(x:20,y:25,width:100,height:150) self.ImageView.image = imgArray[ret] self.view.addSubview(ImageView)

投稿2018/03/13 00:38

編集2018/03/13 00:40
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

DynMat

2018/03/13 04:15

回答ありがとうございます。super.viewDidLoadにそのコードを入れるとエラーが表示されてしまいます。
fuzzball

2018/03/13 04:25

エラーが出るときは、エラー内容を書いて下さい。
DynMat

2018/03/13 05:12

super.viewDidLoad( imgArray = [img01,img02,img03] → Argument passed to call that takes no arguments    let ret = Int(arc4random_uniform(3)) → Expected ')' in expression list ImageView.frame = CGRect(x:20,y:25,width:100,height:150) self.ImageView.image = imgArray[ret] self.view.addSubview(ImageView) ) → Expected expression 矢印先がその行で出されたエラーです。
fuzzball

2018/03/13 05:16

omokさんは、『super.viewDidLoad()の「下に」』と書いてあるのに、なぜ()の中に書いているのでしょうか?
DynMat

2018/03/13 05:28

文章を読み落としていました。その通りでした。ありがとうございます。ランダムに出せました。 omokさんありがとうございます。fuzzballさん、指摘ありがとうございました。
fromageblanc

2018/03/13 05:47

viewDidLoad()の外でも大丈夫なはずですよ。
guest

0

@IBAction func rand(sender: AnyObject){}が、ストーリーボード上のボタンオブジェクトと繋がってないと思われます。

投稿2018/03/12 14:03

fromageblanc

総合スコア2724

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

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

DynMat

2018/03/12 14:57

回答ありがとうございます。@IBAction func rand(sender: AnyObject){}とImage Cellは繋がっていませんでした。しかし、繋げた後も表示されませんでした。Image CellのImage ViewのImageの欄はこの場合何も選択しなくて良いのでしょうか?今の所は何も選択していません。
fromageblanc

2018/03/12 15:26

私が試したぶんには稼働しましたよ。何か凡ミスしてるのでは
fromageblanc

2018/03/13 01:00

ほんとに繋がってます?printなどで確認してください。imageViewも繋ぎ忘れていればrand()内でnilで落ちるはずです。
DynMat

2018/03/13 04:04

ImageCellをクリックし、Show the Connections InspectorのSendActionsを見るとaction-ViewController,randWithSenderと出ており繋がっているように思えます。
DynMat

2018/03/13 04:17

cat.png, dog.jpg,bird.jpgはファイルの中にちゃんと入っています。
fromageblanc

2018/03/13 04:22

画像ファイルはなければ落ちます。 randというメソッド名ですがrandWithSenderとつながってるというのは大丈夫ですか
DynMat

2018/03/13 05:07

@IBAction func rand(sender: AnyObject) {}をオブジェクトと繋げるとViewController,randWithSenderと表示されます。繋げ方は間違っていないと思うのですがどうでしょうか?
DynMat

2018/03/13 05:16

@IBAction func rand(sender: AnyObject) {}の最初の行からImage CellにDrag&Dropした後にする作業はありますか?
DynMat

2018/03/13 05:32

fromageblancさん、丁寧に教えていただきありがとうございました。fromageblancさんのおかげでコードとオブジェクトを繋げていないというミスに気がつきました。
guest

0

UIKitでやるじゃダメでしょうか・・・?
やり方間違ってたり、根本的解決にならなかったらすみません。

それと、arc4random_uniform(3)だと、3が出た時、配列要素が無いってエラー起きると思います。
配列要素三つなら、0〜2なので。

swift

1import UIKit 2 3class ViewController: UIViewController { 4 var img01: UIImage = UIImage(named: "cat")! 5 var img02: UIImage = UIImage(named: "dog")! 6 var img03: UIImage = UIImage(named: "bird")! 7 8 var imgArray:[UIImage] = [] 9 10 @IBOutlet weak var ImageView: UIImageView! 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 // Do any additional setup after loading the view, typically from a nib. 15 } 16 17 18 override var representedObject: Any? { 19 didSet { 20 // Update the view, if already loaded. 21 } 22 } 23 24 @IBAction func rand(sender: AnyObject) { 25 imgArray = [img01, img02, img03] 26 let ret = Int(arc4random_uniform(imgArray.count)) 27 ImageView.frame = CGRect(x: 20, y: 25, width: 100, height: 150) 28 self.ImageView.image = imgArray[ret] 29 self.view.addSubview(ImageView) 30 } 31}

投稿2018/03/13 05:21

編集2018/03/13 06:02
miyabi_takatsuk

総合スコア9528

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

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

fromageblanc

2018/03/13 05:33

arc4random_uniform(3)は、0〜2、つまり3種類の数を生成するので今回の場合out of indexは起こらないです。
miyabi_takatsuk

2018/03/13 05:34

fromageblancさん> そうなのですね! 知識不足すみませんでした。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問