teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コードをより詳しくしました。

2019/11/30 15:55

投稿

Shouka
Shouka

スコア34

title CHANGED
File without changes
body CHANGED
@@ -1,37 +1,42 @@
1
1
  [こちら](https://sasakura-company.com/2018/07/24/%E5%86%99%E7%9C%9F%E3%82%92%E5%88%A5%E3%83%92%E3%82%99%E3%83%A5%E3%83%BC%E3%81%AB%E6%B8%A1%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86-swift4-xcode9-collectionview-performsegue/)を参考に、画像を取得して次のビューで表示する、といったことをしようとしました。
2
2
  画像は`mediaItem.artwork`で取得したのを1つ目のビューで表示させ、また3遷移後のビューでも表示させたかったのですが、うまくいきませんでした。
3
3
 
4
+
4
- 3遷移後のコード
5
+ 1つ目のビューのコード
5
6
  ```Swift
7
+ var image: UIImage? // グローバルに
8
+ ~~~
9
+ // 曲の情報を楽器選択後のビューコントローラーに受け渡し
10
+ override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
6
- @IBOutlet weak var PhotoView: UIImageView!
11
+ let MimikopiView = MimikopiViewController()
7
- public var imagedayo: UIImage!
12
+ print("give image")
13
+ //print(image) // ちゃんとアートワーク入ってる!
8
- PhotoView.image = imagedayo
14
+ MimikopiView.ReceiveMusicImage = image
15
+ }
9
16
  ```
10
- ではエラーはないのですが、元の1つ目のビューのコード
17
+ ではちゃんと画像が入ってのですが
18
+
19
+ 3遷移後のコード
11
20
  ```Swift
12
- // 曲情報を表示する
13
- func updateSongInformationUI(mediaItem: MPMediaItem) {
14
- // アートワーク表示
15
- if let artwork = mediaItem.artwork {
21
+ class MimikopiViewController: UIViewController {
22
+
16
- let image = artwork.image(at: Photo.bounds.size)
23
+ @IBOutlet weak var MusicImage: UIImageView!
24
+ public var ReceiveMusicImage: UIImage!
25
+
26
+ @IBOutlet weak var InstrumentImage: UIImageView!
27
+
28
+
29
+ override func viewDidLoad() {
30
+ super.viewDidLoad()
31
+
32
+ print(ReceiveMusicImage) // ここでnilになってしまう
33
+ if ReceiveMusicImage != nil{
17
- Photo.image = image
34
+ MusicImage.image = ReceiveMusicImage
18
- } else {
35
+ }else{
19
- // アートワークがないとき灰色表示
20
- Photo.image = nil
21
- Photo.backgroundColor = UIColor.gray
36
+ MusicImage.backgroundColor = UIColor.gray
37
+ }
38
+
22
39
  }
23
40
  }
24
-
25
- // Segueの識別子確認
26
- if segue.identifier == "toEBass" {
27
-    // 遷移先ViewCntrollerの取得
28
- let EBassView = segue.destination as! EBass
29
- EBass.imagedayo = image // ここでエラー
30
- }
31
41
  ```
32
- `Use of unresolved identifier 'image'`とエラーがでてします。
33
- updateSongInformationUIのimageが呼び出せてないのはわかるのですが、どう書いたらい良いかがわかりません…。(質問1つ目)
34
-
35
- また、じゃあとりあえずグレー画像でも表示してみるかと思って、1つ目のビューの「ここでエラー」のところのコードを`EBass.imagedayo = UIColor.gray`に変えてみたら`Instance member 'imagedayo' cannot be used on type 'EBass'`とエラーが出ました。検索したところ、クラスメソッドではインスタンス変数は使えない…とのことだそうですが、じゃあどうしたら良いのかがわかりませんでした…。(質問2つ目)
36
-
37
- どなたか教えてくださると幸いです。
42
+ 受け取れな状況です。