前提,実現したいこと
openweathermapAPIを使って天気情報を取得しようとしています。
しかし以下のコードだと天気情報を取得できません。
どこが間違っているのでしょうか?
APIに関して初心者で投げやりな感じになってしまい申し訳ないのですがもしわかる方がいらっしゃったらご回答よろしくお願いします。
###発生している問題・エラーメッセージ
エラーメッセージはありませんが、実行するとindicatorが消えない、すなわち天気情報を取得することが出来ません。
ログには以下のように出ます。
2020-12-09 18:51:46.348313+0900 Weather[45340:3150299] screen parameters are unexpected: MGScreenClass1125x2436x3x495 SCREEN_TYPE(1125,2436,3,495)
The operation couldn’t be completed. (kCLErrorDomain error 0.)
###試したこと
breakpointを使いましたが原因は分からなかったです。
ATSの設定も行っております。
またAPIのDocumentを読み直しlat,lonの値を変えてみましたが改善しませんでした。
###参考にしたサイト
https://openweathermap.org/current
https://www.youtube.com/watch?v=WHRntPeAOo4&list=LL&index=1
###該当のソースコード
swift
1 2 3import Foundation 4import UIKit 5import Alamofire 6import SwiftyJSON 7import NVActivityIndicatorView 8import CoreLocation 9 10class ViewController: UIViewController, CLLocationManagerDelegate { 11 12 @IBOutlet weak var locationLabel: UILabel! 13 @IBOutlet weak var dayLabel: UILabel! 14 15 @IBOutlet weak var conditionImageView: UIImageView! 16 @IBOutlet weak var conditionLabel: UILabel! 17 18 @IBOutlet weak var temperatureLabel: UILabel! 19 @IBOutlet weak var backgroundView: UIView! 20 21 let gradientLayer = CAGradientLayer() 22 23 let apiKey = "7a4c0ed6b80dbaab6aec67e38968cda3" 24 var lat = 26.8205 25 var lon = 30.8024 26 var activityIndicator: NVActivityIndicatorView! 27 let locationManager = CLLocationManager() 28 29 override func viewDidLoad() { 30 super.viewDidLoad() 31 backgroundView.layer.addSublayer(gradientLayer) 32 33 let indicatorSize: CGFloat = 70 34 let indicatorFrame = CGRect(x: (view.frame.width-indicatorSize)/2, y: (view.frame.height-indicatorSize)/2, width: indicatorSize, height: indicatorSize) 35 activityIndicator = NVActivityIndicatorView(frame: indicatorFrame, type: .lineScale, color: UIColor.white, padding: 20.0) 36 activityIndicator.backgroundColor = UIColor.black 37 view.addSubview(activityIndicator) 38 39 locationManager.requestWhenInUseAuthorization() 40 41 activityIndicator.startAnimating() 42 if(CLLocationManager.locationServicesEnabled()){ 43 locationManager.delegate = self 44 locationManager.desiredAccuracy = kCLLocationAccuracyBest 45 locationManager.startUpdatingLocation() 46 } 47 48 } 49 50 override func viewWillAppear(_ animated: Bool) { 51 setBlueGradientBackground() 52 } 53 54 func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 55 let location = locations[0] 56 lat = location.coordinate.latitude 57 lon = location.coordinate.longitude 58 Alamofire.request("http://api.openweathermap.org/data/2.5/weather?lat=(lat)&lon=(lon)&appid=7a4c0ed6b80dbaab6aec67e38968cda3&units=metric").responseJSON { 59 response in 60 self.activityIndicator.stopAnimating() 61 if let responseStr = response.result.value { 62 let jsonResponse = JSON(responseStr) 63 let jsonWeather = jsonResponse["weather"].array![0] 64 let jsonTemp = jsonResponse["main"] 65 let iconName = jsonWeather["icon"].stringValue 66 67 self.locationLabel.text = jsonResponse["name"].stringValue 68 self.conditionImageView.image = UIImage(named: iconName) 69 self.conditionLabel.text = jsonWeather["main"].stringValue 70 self.temperatureLabel.text = "(Int(round(jsonTemp["temp"].doubleValue)))" 71 72 let date = Date() 73 let dateFormatter = DateFormatter() 74 dateFormatter.dateFormat = "EEEE" 75 self.dayLabel.text = dateFormatter.string(from: date) 76 77 let suffix = iconName.suffix(1) 78 if(suffix == "n"){ 79 self.setGreyGradientBackground() 80 }else{ 81 self.setBlueGradientBackground() 82 } 83 } 84 } 85 self.locationManager.stopUpdatingLocation() 86 } 87 88 func locationManager(_ manager: CLLocationManager, 89 didFailWithError error: Error) { 90 print(error.localizedDescription) 91 } 92 93 func setBlueGradientBackground(){ 94 let topColor = UIColor(red: 95.0/255.0, green: 165.0/255.0, blue: 1.0, alpha: 1.0).cgColor 95 let bottomColor = UIColor(red: 72.0/255.0, green: 114.0/255.0, blue: 184.0/255.0, alpha: 1.0).cgColor 96 gradientLayer.frame = view.bounds 97 gradientLayer.colors = [topColor, bottomColor] 98 } 99 100 func setGreyGradientBackground(){ 101 let topColor = UIColor(red: 151.0/255.0, green: 151.0/255.0, blue: 151.0/255.0, alpha: 1.0).cgColor 102 let bottomColor = UIColor(red: 72.0/255.0, green: 72.0/255.0, blue: 72.0/255.0, alpha: 1.0).cgColor 103 gradientLayer.frame = view.bounds 104 gradientLayer.colors = [topColor, bottomColor] 105 } 106 107} 108 109
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。