回答編集履歴

1

別回答を追記

2018/09/22 13:43

投稿

u39ueda
u39ueda

スコア950

test CHANGED
@@ -1,3 +1,137 @@
1
- songnameLabelがnilな為です。
1
+ ~~songnameLabelがnilな為です。
2
2
 
3
- storyboardでPlayerViewControllerと接続されてあるか確認してください。
3
+ storyboardでPlayerViewControllerと接続されてあるか確認してください。~~
4
+
5
+
6
+
7
+ 追記:
8
+
9
+ すみません。
10
+
11
+ prepare(for:sender:)が呼ばれた時点ではまだOutletが接続されていないせいですね。
12
+
13
+ あまりsegueは使わないので知りませんでした。
14
+
15
+
16
+
17
+ ではどうすればいいかですが、方法は2つあります。
18
+
19
+ どちらを使ってもいいですが、以下の理由で方法1をお勧めします。
20
+
21
+ - ViewControllerがPlayViewControllerの内部構造(保持するビュー)に依存する
22
+
23
+ - `_ = playvc.view`というコードに意味が見えない為うっかり削除されかねない
24
+
25
+
26
+
27
+ #### 方法1
28
+
29
+ prepare(for:segue)では次画面に値を渡すだけにします。
30
+
31
+
32
+
33
+ ```Swift
34
+
35
+ class ViewController {
36
+
37
+ override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
38
+
39
+ if segue.identifier == "goplay" {
40
+
41
+ let playvc = segue.destination as! PlayViewController
42
+
43
+ playvc.music = musiclibrary[path.row]
44
+
45
+ }
46
+
47
+ }
48
+
49
+ }
50
+
51
+ ```
52
+
53
+
54
+
55
+ 次画面のviewDidLoad()で受け渡された値をビューにセットします。
56
+
57
+
58
+
59
+ ```Swift
60
+
61
+ class PlayViewController {
62
+
63
+ var music: [String: String]?
64
+
65
+
66
+
67
+ override func viewDidLoad() {
68
+
69
+ super.viewDidLoad()
70
+
71
+ if let music = music {
72
+
73
+ print(music["songname"]!)
74
+
75
+ // 受け渡されたmusicをビューにセットする
76
+
77
+ self.songnameLabel.text = "a"
78
+
79
+
80
+
81
+ // self.artistNameLabel.text = music["artistname"]
82
+
83
+ // self.imageView.image = UIImage(named: music["image"]!)
84
+
85
+ }
86
+
87
+ }
88
+
89
+ }
90
+
91
+ ```
92
+
93
+
94
+
95
+ #### 方法2
96
+
97
+ Outletはviewが初めてアクセスされた時に自動で接続されます。
98
+
99
+ つまりviewにアクセスすればOutletを繋ぐことができます。
100
+
101
+
102
+
103
+ ```Swift
104
+
105
+ class ViewController {
106
+
107
+ override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
108
+
109
+ if segue.identifier == "goplay" {
110
+
111
+ let playvc = segue.destination as! PlayViewController
112
+
113
+ // これでビューが読み込まれるのでOutletにアクセスできる
114
+
115
+ _ = playvc.view
116
+
117
+
118
+
119
+ // print(musiclibrary[path.row]["songname"]!)
120
+
121
+ playvc.songnameLabel.text = "a"
122
+
123
+ // playvc.songnameLabel.text? = "a"
124
+
125
+
126
+
127
+ // playvc.artistNameLabel.text! = musiclibrary[path.row]["artistname"]!
128
+
129
+ // playvc.imageView.image! = UIImage(named: musiclibrary[path.row]["image"]!)!
130
+
131
+ }
132
+
133
+ }
134
+
135
+ }
136
+
137
+ ```