質問編集履歴
2
情報の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -407,3 +407,89 @@
|
|
407
407
|
```
|
408
408
|
|
409
409
|
とエラーが出て落ちてしまいました。
|
410
|
+
|
411
|
+
WeatherDataManagerも書き換え、
|
412
|
+
|
413
|
+
```ここに言語を入力
|
414
|
+
|
415
|
+
import Foundation
|
416
|
+
|
417
|
+
|
418
|
+
|
419
|
+
// 必要なフレームワークをインポートする
|
420
|
+
|
421
|
+
import Alamofire
|
422
|
+
|
423
|
+
import SwiftyJSON
|
424
|
+
|
425
|
+
|
426
|
+
|
427
|
+
// AlamofireによるAPI通信を管理するクラスを定 義する
|
428
|
+
|
429
|
+
class WeatherDataManager: NSObject {
|
430
|
+
|
431
|
+
|
432
|
+
|
433
|
+
|
434
|
+
|
435
|
+
// レスポンスデータをパースするモデルクラス イ ンスタンスを格納するプロパティ
|
436
|
+
|
437
|
+
var weatherData: WeatherDataModel?
|
438
|
+
|
439
|
+
// リクエストするURL
|
440
|
+
|
441
|
+
let url = "http://api.openweathermap.org/data/2.5/forecast?units=metric&q=Tokyo&APPID=2ec06eb3d8b93310aa2773a10f1dafe4"
|
442
|
+
|
443
|
+
|
444
|
+
|
445
|
+
// APIリクエストを実行する
|
446
|
+
|
447
|
+
func dataRequest() {
|
448
|
+
|
449
|
+
// AlamofireによるAPI通信
|
450
|
+
|
451
|
+
Alamofire.request(url).responseJSON { response in
|
452
|
+
|
453
|
+
switch response.result {
|
454
|
+
|
455
|
+
case .success(let value):
|
456
|
+
|
457
|
+
// 通信成功時 処理
|
458
|
+
|
459
|
+
// レスポンスデータをJSON型に変換する
|
460
|
+
|
461
|
+
// これ SwiftyJSON ルール
|
462
|
+
|
463
|
+
let json = JSON(value)
|
464
|
+
|
465
|
+
|
466
|
+
|
467
|
+
// JSONデータを引数に渡してモデルクラス インスタンスを生成
|
468
|
+
|
469
|
+
self.weatherData = WeatherDataModel(data: json)
|
470
|
+
|
471
|
+
case .failure(let error): break // 通信失敗時 処理 // 今回 ログ出力だけ
|
472
|
+
|
473
|
+
print(error)
|
474
|
+
|
475
|
+
|
476
|
+
|
477
|
+
}
|
478
|
+
|
479
|
+
}
|
480
|
+
|
481
|
+
}
|
482
|
+
|
483
|
+
// 気温 ラベルに取得した気温を表示させる
|
484
|
+
|
485
|
+
tempLabel.text = dataManager.weatherData?.temp.description
|
486
|
+
|
487
|
+
}
|
488
|
+
|
489
|
+
|
490
|
+
|
491
|
+
```
|
492
|
+
|
493
|
+
としましたが、tempLabelがないと言われ(その通りなのですが。
|
494
|
+
|
495
|
+
しかし、CheckViewControllerに定義したものを WeatherDataManagerの方に持ってくる方法がわからなかった)ました。
|
1
情報の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -309,3 +309,101 @@
|
|
309
309
|
```
|
310
310
|
|
311
311
|
と書きました。
|
312
|
+
|
313
|
+
fuzzballさんのコメントを受け、CheckViewControllerを以下のように書き換えました。
|
314
|
+
|
315
|
+
```ここに言語を入力
|
316
|
+
|
317
|
+
import Foundation
|
318
|
+
|
319
|
+
import UIKit
|
320
|
+
|
321
|
+
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
class CheckViewController: UIViewController {
|
326
|
+
|
327
|
+
@IBOutlet weak var weatherImage: UIImageView!
|
328
|
+
|
329
|
+
|
330
|
+
|
331
|
+
@IBOutlet weak var tempLabel: UILabel!
|
332
|
+
|
333
|
+
// APIリクエストや、レスポンスデータを利用するため クラス インスタンス
|
334
|
+
|
335
|
+
let dataManager = WeatherDataManager()
|
336
|
+
|
337
|
+
|
338
|
+
|
339
|
+
override func viewDidLoad() {
|
340
|
+
|
341
|
+
super.viewDidLoad()
|
342
|
+
|
343
|
+
// Do any additional setup after loading the view, typically from a nib.
|
344
|
+
|
345
|
+
// ここでAPIリクエストを行う
|
346
|
+
|
347
|
+
if dataManager.weatherData?.weather == "Clouds" {
|
348
|
+
|
349
|
+
// 「Clouds」だったら「曇り」 画像を表示する
|
350
|
+
|
351
|
+
weatherImage.image = UIImage(named: "cloud")
|
352
|
+
|
353
|
+
} else if dataManager.weatherData?.weather == "Clear" {
|
354
|
+
|
355
|
+
// 「Clear」だったら「晴れ」 画像を表示する
|
356
|
+
|
357
|
+
weatherImage.image = UIImage(named: "sunny")
|
358
|
+
|
359
|
+
} else if dataManager.weatherData?.weather == "Rain" {
|
360
|
+
|
361
|
+
// 「Rain」だったら「雨」 画像を表示する
|
362
|
+
|
363
|
+
weatherImage.image = UIImage(named: "rain")
|
364
|
+
|
365
|
+
}
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
self.dataManager.dataRequest()
|
370
|
+
|
371
|
+
|
372
|
+
|
373
|
+
print("here")
|
374
|
+
|
375
|
+
print(dataManager.weatherData)
|
376
|
+
|
377
|
+
// 気温 ラベルに取得した気温を表示させる
|
378
|
+
|
379
|
+
tempLabel.text = dataManager.weatherData?.temp.description
|
380
|
+
|
381
|
+
|
382
|
+
|
383
|
+
}
|
384
|
+
|
385
|
+
|
386
|
+
|
387
|
+
override func didReceiveMemoryWarning() {
|
388
|
+
|
389
|
+
super.didReceiveMemoryWarning()
|
390
|
+
|
391
|
+
// Dispose of any resources that can be recreated.
|
392
|
+
|
393
|
+
}
|
394
|
+
|
395
|
+
|
396
|
+
|
397
|
+
}
|
398
|
+
|
399
|
+
```
|
400
|
+
|
401
|
+
このように書き換え実行すると
|
402
|
+
|
403
|
+
```ここに言語を入力
|
404
|
+
|
405
|
+
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.'
|
406
|
+
|
407
|
+
```
|
408
|
+
|
409
|
+
とエラーが出て落ちてしまいました。
|