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

質問編集履歴

2

情報の追加

2017/08/01 07:35

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -202,4 +202,47 @@
202
202
  ```ここに言語を入力
203
203
  2017-08-01 15:23:03.412 WeatherApp[9709:864615] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<WeatherApp.ViewController 0x7fecff505a80> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key weatherImage.'
204
204
  ```
205
- とエラーが出て落ちてしまいました。
205
+ とエラーが出て落ちてしまいました。
206
+ WeatherDataManagerも書き換え、
207
+ ```ここに言語を入力
208
+ import Foundation
209
+
210
+ // 必要なフレームワークをインポートする
211
+ import Alamofire
212
+ import SwiftyJSON
213
+
214
+ // AlamofireによるAPI通信を管理するクラスを定 義する
215
+ class WeatherDataManager: NSObject {
216
+
217
+
218
+ // レスポンスデータをパースするモデルクラス イ ンスタンスを格納するプロパティ
219
+ var weatherData: WeatherDataModel?
220
+ // リクエストするURL
221
+ let url = "http://api.openweathermap.org/data/2.5/forecast?units=metric&q=Tokyo&APPID=2ec06eb3d8b93310aa2773a10f1dafe4"
222
+
223
+ // APIリクエストを実行する
224
+ func dataRequest() {
225
+ // AlamofireによるAPI通信
226
+ Alamofire.request(url).responseJSON { response in
227
+ switch response.result {
228
+ case .success(let value):
229
+ // 通信成功時 処理
230
+ // レスポンスデータをJSON型に変換する
231
+ // これ SwiftyJSON ルール
232
+ let json = JSON(value)
233
+
234
+ // JSONデータを引数に渡してモデルクラス インスタンスを生成
235
+ self.weatherData = WeatherDataModel(data: json)
236
+ case .failure(let error): break // 通信失敗時 処理 // 今回 ログ出力だけ
237
+ print(error)
238
+
239
+ }
240
+ }
241
+ }
242
+ // 気温 ラベルに取得した気温を表示させる
243
+ tempLabel.text = dataManager.weatherData?.temp.description
244
+ }
245
+
246
+ ```
247
+ としましたが、tempLabelがないと言われ(その通りなのですが。
248
+ しかし、CheckViewControllerに定義したものを WeatherDataManagerの方に持ってくる方法がわからなかった)ました。

1

情報の追加

2017/08/01 07:35

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -153,4 +153,53 @@
153
153
  }
154
154
  }
155
155
  ```
156
- と書きました。
156
+ と書きました。
157
+ fuzzballさんのコメントを受け、CheckViewControllerを以下のように書き換えました。
158
+ ```ここに言語を入力
159
+ import Foundation
160
+ import UIKit
161
+
162
+
163
+ class CheckViewController: UIViewController {
164
+ @IBOutlet weak var weatherImage: UIImageView!
165
+
166
+ @IBOutlet weak var tempLabel: UILabel!
167
+ // APIリクエストや、レスポンスデータを利用するため クラス インスタンス
168
+ let dataManager = WeatherDataManager()
169
+
170
+ override func viewDidLoad() {
171
+ super.viewDidLoad()
172
+ // Do any additional setup after loading the view, typically from a nib.
173
+ // ここでAPIリクエストを行う
174
+ if dataManager.weatherData?.weather == "Clouds" {
175
+ // 「Clouds」だったら「曇り」 画像を表示する
176
+ weatherImage.image = UIImage(named: "cloud")
177
+ } else if dataManager.weatherData?.weather == "Clear" {
178
+ // 「Clear」だったら「晴れ」 画像を表示する
179
+ weatherImage.image = UIImage(named: "sunny")
180
+ } else if dataManager.weatherData?.weather == "Rain" {
181
+ // 「Rain」だったら「雨」 画像を表示する
182
+ weatherImage.image = UIImage(named: "rain")
183
+ }
184
+
185
+ self.dataManager.dataRequest()
186
+
187
+ print("here")
188
+ print(dataManager.weatherData)
189
+ // 気温 ラベルに取得した気温を表示させる
190
+ tempLabel.text = dataManager.weatherData?.temp.description
191
+
192
+ }
193
+
194
+ override func didReceiveMemoryWarning() {
195
+ super.didReceiveMemoryWarning()
196
+ // Dispose of any resources that can be recreated.
197
+ }
198
+
199
+ }
200
+ ```
201
+ このように書き換え実行すると
202
+ ```ここに言語を入力
203
+ 2017-08-01 15:23:03.412 WeatherApp[9709:864615] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<WeatherApp.ViewController 0x7fecff505a80> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key weatherImage.'
204
+ ```
205
+ とエラーが出て落ちてしまいました。