質問編集履歴

1

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

2019/11/30 15:55

投稿

Shouka
Shouka

スコア34

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,36 @@
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
 
3
3
  画像は`mediaItem.artwork`で取得したのを1つ目のビューで表示させ、また3遷移後のビューでも表示させたかったのですが、うまくいきませんでした。
4
+
5
+
6
+
7
+
8
+
9
+ 元の1つ目のビューのコード
10
+
11
+ ```Swift
12
+
13
+ var image: UIImage? // グローバルに
14
+
15
+ ~~~
16
+
17
+ // 曲の情報を楽器選択後のビューコントローラーに受け渡し
18
+
19
+ override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
20
+
21
+ let MimikopiView = MimikopiViewController()
22
+
23
+ print("give image")
24
+
25
+ //print(image) // ちゃんとアートワーク入ってる!
26
+
27
+ MimikopiView.ReceiveMusicImage = image
28
+
29
+ }
30
+
31
+ ```
32
+
33
+ ではちゃんと画像が入っているのですが
4
34
 
5
35
 
6
36
 
@@ -8,66 +38,46 @@
8
38
 
9
39
  ```Swift
10
40
 
11
- @IBOutlet weak var PhotoView: UIImageView!
41
+ class MimikopiViewController: UIViewController {
12
42
 
13
- public var imagedayo: UIImage!
14
43
 
15
- PhotoView.image = imagedayo
16
44
 
17
- ```
45
+ @IBOutlet weak var MusicImage: UIImageView!
18
46
 
19
- ではエラーはないのですが、元の1つ目のビューのコード
47
+ public var ReceiveMusicImage: UIImage!
20
48
 
21
- ```Swift
49
+
22
50
 
23
- // 曲情報を表示する
51
+ @IBOutlet weak var InstrumentImage: UIImageView!
24
52
 
25
- func updateSongInformationUI(mediaItem: MPMediaItem) {
26
53
 
27
- // アートワーク表示
28
54
 
29
- if let artwork = mediaItem.artwork {
55
+
30
56
 
31
- let image = artwork.image(at: Photo.bounds.size)
57
+ override func viewDidLoad() {
32
58
 
33
- Photo.image = image
59
+ super.viewDidLoad()
34
60
 
35
- } else {
61
+
36
62
 
37
- // アートワークがいとき灰色表示
63
+ print(ReceiveMusicImage) // ここでnilにってしまう
38
64
 
39
- Photo.image = nil
65
+ if ReceiveMusicImage != nil{
40
66
 
67
+ MusicImage.image = ReceiveMusicImage
68
+
69
+ }else{
70
+
41
- Photo.backgroundColor = UIColor.gray
71
+ MusicImage.backgroundColor = UIColor.gray
72
+
73
+ }
74
+
75
+
42
76
 
43
77
  }
44
78
 
45
79
  }
46
80
 
47
-
48
-
49
- // Segueの識別子確認
50
-
51
- if segue.identifier == "toEBass" {
52
-
53
-    // 遷移先ViewCntrollerの取得
54
-
55
- let EBassView = segue.destination as! EBass
56
-
57
- EBass.imagedayo = image // ここでエラー
58
-
59
- }
60
-
61
81
  ```
62
82
 
63
- `Use of unresolved identifier 'image'`とエラーがてしまいます。
64
-
65
- updateSongInformationUIのimageが呼び出せてないのはわかるのですが、どう書いたらい良いかがわかりません…。(質問1つ目)
66
-
67
-
68
-
69
- また、じゃあとりあえずグレー画像でも表示してみるかと思って、1つ目のビューの「ここでエラー」のところのコードを`EBass.imagedayo = UIColor.gray`に変えてみたら`Instance member 'imagedayo' cannot be used on type 'EBass'`とエラーが出ました。検索したところ、クラスメソッドではインスタンス変数は使えない…とのことだそうですが、じゃあどうしたら良いのかがわかりませんでした…。(質問2つ目)
70
-
71
-
72
-
73
- どなたか教えてくださると幸いです。
83
+ 受け取れない状況です。