2016-08-28 4 views
0

У меня есть простой ViewController, который отображает мои текущие координаты местоположения.Ошибка приложения при отклонении диспетчера просмотров

Все работает правильно, но когда я отклоняю ViewController, приложение вылетает без какого-либо конкретного журнала ошибок.

Класс код выглядит следующим образом:

import UIKit 

class LocationViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate, UIPopoverPresentationControllerDelegate { 



// General objects 
@IBOutlet var closeButton: UIButton! 
@IBOutlet var latitudeLabel: UILabel! 
@IBOutlet var longitudeLabel: UILabel! 
@IBOutlet var infoButton: UIButton! 


// Global variables 
var location: CLLocationManager? = CLLocationManager() 
var geocoder = CLGeocoder(); 
var placemark = CLPlacemark(); 
var hasPin: Bool = false; 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Ask for Authorisation from the User. 
    location?.requestAlwaysAuthorization(); 

    // For use in foreground 
    location?.requestWhenInUseAuthorization(); 

    getCurrentLocation(); 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 



@IBAction func closeButton(_ sender: AnyObject) { 
    self.dismiss(animated: true, completion: { 
     print("dismissing locationViewController"); 
     self.location = nil; 
    }); 
} 



@IBAction func infoButton(_ sender: AnyObject) { 
    // TODO 
} 


// MARK: - General functions 
func getCurrentLocation() -> Void { 
    if (CLLocationManager.locationServicesEnabled()) { 
     location?.delegate = self; 
     location?.desiredAccuracy = kCLLocationAccuracyBest; 
     location?.startUpdatingLocation(); 
    } 
} 





// MARK: - CLLocationManagerDelegate 

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { 
    print("ERROR = \(error)"); 
} 


func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    // Gets the user coordinates 
    let locValue:CLLocationCoordinate2D = manager.location!.coordinate; 
    USER_LATITUDE = locValue.latitude; 
    USER_LONGITUDE = locValue.longitude; 

    longitudeLabel.text = "\(USER_LONGITUDE)"; 
    latitudeLabel.text = "\(USER_LATITUDE)"; 

    location?.stopUpdatingLocation() 
} 

Кто-нибудь есть ключ, почему это происходит?

Отсутствует журнал ошибок, поэтому меня еще больше смущает.

Сначала я думал, что должен был установить переменную местоположения необязательной, а затем установить ее на нуль, когда я отклоняю VC, но авария все еще происходит.

Crashlytics сообщает, что приложение выходит из строя в строке LocationViewController 0, что на самом деле странно.

Я называю это ViewController, с кнопкой мыши внутри другого VC, как это:

@IBAction func locationButton(_ sender: AnyObject) { 
    let storyboard = UIStoryboard(name: "Main", bundle: nil); 
    let viewController = storyboard.instantiateViewController(withIdentifier: "locationVC"); 
    self.present(viewController, animated: true, completion: nil); 
} 

Я использую Swift3 с последней бета-версии Xcode на прошивкой 10.

  • Благодарности
+0

ничего не появляется, только это - ** (lldb) ** в синем цвете; Я также нашел этот журнал в crashlytics - ** 38 libdispatch.dylib 0x1939cc5b8 (Missing) ** –

+0

И он останавливается внутри моего AppDelegate, строка 15, которая является «классом AppDelegate: UIResponder, UIApplicationDelegate {' –

+0

Это не так. Сбой произошел, и затем я создал Crashlytics, чтобы помочь мне узнать журнал сбоев. Это 100% не Crashlytics, гарантировано –

ответ

1

Заменить это:

var location: CLLocationManager? = CLLocationManager() 

С этим:

let location = CLLocationManager() 

Изменить весь код по мере необходимости (это больше не является необязательным, так что нет ничего разворачивать) и удалите строку, которая пытается установить его в nil.

Если вы обеспокоены тем, что менеджер местоположений может попытаться получить ваше местоположение при его увольнении, тогда выполните viewWillDisappear и сообщите об этом, чтобы остановить обновление.

+0

Позвольте мне попробовать –

+0

все еще падает:/ –

+0

Ну, я попробовал. :( – matt

0

Вам необходимо добавить запись о конфиденциальности в Info.plist, а также запросить авторизацию для использования служб определения местоположения. Хороший обзор можно найти здесь: http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/

+0

Я добавил его в информацию .plist, но я внимательно прочитаю данную ссылку и посмотрю, не хватает ли я чего-то –

Смежные вопросы