Доброго времени суток.
Запускаю app на iphone и симуляторах xcode. Все работает. Отсоединяю кабель от iphone, запускаю app и через раз или несколько приложение вылетает при его запуске (сворачивается).
Приложение запускает LocationManager, получается локацию, передает ее в функции с получением и парсом JSON и обновляет Labeel.
В чем может быть проблема?
import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var fajr: UILabel!
@IBOutlet weak var sunrise: UILabel!
@IBOutlet weak var dhuhr: UILabel!
@IBOutlet weak var asr: UILabel!
@IBOutlet weak var magrib: UILabel!
@IBOutlet weak var isha: UILabel!
@IBAction func settingButton(_ sender: UIBarButtonItem) {
TimerLeftTime()
}
@IBOutlet weak var cityLabel: UILabel!
var latitude = " "
var longitude = " "
var timerr = String()
let locationManagerVar = CLLocationManager()
@IBOutlet weak var leftTime: UILabel!
@IBOutlet weak var leftTimerDescription: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
cityLabel.textColor = #colorLiteral(red: 0.4620226622, green: 0.8382837176, blue: 1, alpha: 0)
leftTime.textColor = #colorLiteral(red: 0.4620226622, green: 0.8382837176, blue: 1, alpha: 0)
leftTimerDescription.textColor = #colorLiteral(red: 0.4620226622, green: 0.8382837176, blue: 1, alpha: 0)
locationManagerVar.delegate = self
locationManagerVar.desiredAccuracy = kCLLocationAccuracyBest
locationManagerVar.requestWhenInUseAuthorization()
locationManagerVar.startUpdatingLocation()
let backgroundImage = UIImageView(frame: UIScreen.main.bounds)
backgroundImage.image = UIImage(named: "bg")
self.view.insertSubview(backgroundImage, at: 0)
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let userLocation = locations.last! as CLLocation
if userLocation.horizontalAccuracy > 0 {
locationManagerVar.stopUpdatingLocation()
latitude = String(userLocation.coordinate.latitude)
longitude = String(userLocation.coordinate.longitude)
fetchPrayerTime()
fetchCityName()
}
print("Получил координаты пользователя")
}
func fetchCityName() {
let baseUrlCity = URL(string: "http://maps.googleapis.com/maps/api/geocode/")
let pathUrlCity = "json?latlng=\(latitude),\(longitude)"
let urlCity = URL(string: pathUrlCity, relativeTo: baseUrlCity)
let task = URLSession.shared.dataTask(with: urlCity!) {(data, response, error) in
DispatchQueue.main.async(execute: {
if error != nil {
print("error")
} else {
if let content = data {
do {
let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
if let results = myJson["results"] as? [AnyObject] {
if let firstResult = results[0] as? NSDictionary {
if let addressComponents = firstResult["address_components"] as? [AnyObject] {
if let thirdComponent = addressComponents[2] as? NSDictionary {
if let cityName = thirdComponent["long_name"] {
self.cityLabel.text = String(describing: cityName)
}
}
}
}
}
} catch {
}
}
}
})
}
task.resume()
cityLabel.textColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
print("Получил название города")
}
func fetchPrayerTime() {
let baseUrl = URL(string: "http://api.aladhan.com/timings/")
let pathUrl = "0?latitude=\(latitude)&longitude=\(longitude)&method=3"
let url = URL(string: pathUrl, relativeTo: baseUrl)
let task2 = URLSession.shared.dataTask(with: url!) {(data, response, error) in
DispatchQueue.main.async(execute: {
if error != nil {
print("error")
} else {
if let content = data {
do {
let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
if let data = myJson["data"] as? NSDictionary {
if let timings = data["timings"] as? NSDictionary {
if let fajr = timings["Fajr"] { self.fajr.text = String(describing: fajr) }
if let sunrise = timings["Sunrise"] { self.sunrise.text = String(describing: sunrise) }
if let dhuhr = timings["Dhuhr"] { self.dhuhr.text = String(describing: dhuhr) }
if let asr = timings["Asr"] { self.asr.text = String(describing: asr) }
if let maghrib = timings["Maghrib"] { self.magrib.text = String(describing: maghrib) }
if let isha = timings["Isha"] { self.isha.text = String(describing: isha) }
}
}
} catch {
}
}
}
})
}
task2.resume()
print("Получил времена молитв")
}
func TimerLeftTime() {
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "HH:mm"
var arrayTime = [fajr.text, sunrise.text, dhuhr.text, asr.text, magrib.text, isha.text]
let date = Date()
var date2 = Date()
let calendar = Calendar.current
for index in 0...arrayTime.count-1 {
let time = arrayTime[index]
date2 = timeFormatter.date(from: time!)!
let year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)
let hour = calendar.component(.hour, from: date2)
let minute = calendar.component(.minute, from: date2)
date2 = calendar.date(bySetting: .year, value: year, of: date2)!
date2 = calendar.date(bySetting: .month, value: month, of: date2)!
date2 = calendar.date(bySetting: .day, value: day, of: date2)!
date2 = calendar.date(bySetting: .hour, value: hour, of: date2)!
date2 = calendar.date(bySetting: .minute, value: minute, of: date2)!
if date < date2 {
let timeDifference = calendar.dateComponents([.hour, .minute, .second], from: date, to: date2)
leftTime.text = "\(String(timeDifference.hour!))ч \(String(timeDifference.minute!))м"
leftTime.textColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
leftTimerDescription.textColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
break
}
}
print("Узнал время до след молитвы")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}