LocationManager坐标为Nil

时间:2016-05-14 07:37:31

标签: ios swift core-location cllocationmanager cllocation

我正在尝试在我的应用的新闻Feed中实现某些事件的动态距离。在我的模型类中,我有一个distance字段,我想在设置VC后设置它。我有一个名为parseData的方法,我在其中调用一个方法来设置我的模型类中的距离字段,该字段包含CLLocationCoordinate2D的参数。

错误消息fatal error: unexpectedly found nil while unwrapping an Optional value

以下是该方法的摘录:

func parseData() {
        DataService.ds.REF_LOBBYGAMES.queryOrderedByChild("distance").observeEventType(.Value, withBlock: { snapshot in
            self.lobbyGames = []
            // Parse Firebase Data
            if let snapshots = snapshot.children.allObjects as? [FDataSnapshot] {
                for snap in snapshots {
                    if let lobbyGameDict = snap.value as? Dictionary<String, AnyObject> {
                        let key = snap.key
                        let lobbyGame = LobbyGameModel(lobbyKey: key, dictionary: lobbyGameDict)
                        lobbyGame.calculateDistanceAway(self.currentLocation)
                        self.lobbyGames.append(lobbyGame)
                    }
                }
            }
            self.collectionView?.reloadData()
        })
    }

我想要做的是传递用户的当前位置,这样我就可以在模型类中进行计算。但是,lobbyGame.calculateDistanceAway(self.currentLocation) 行已崩溃,因为self.currentLocationnil

这是我的viewDidLoad方法:

override func viewDidLoad() {
        super.viewDidLoad()
        self.locationManager.requestWhenInUseAuthorization()
        if CLLocationManager.locationServicesEnabled() {
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
            locationManager.startUpdatingLocation()
        }
        navigationItem.title = "Events Near You"
        collectionView?.alwaysBounceVertical = true
        collectionView?.backgroundColor = UIColor.rgb(220, green: 220, blue: 220)
        collectionView?.registerClass(FeedCell.self, forCellWithReuseIdentifier: CellId)
        navigationController?.navigationBar.tintColor = UIColor.rgb(0, green: 171, blue: 236)

        parseData()
    }

这是我的didUpdateLocations委托方法:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        self.currentLocation = manager.location?.coordinate
    }

我不明白为什么LocationManager的坐标为零!我该如何解决?或者有更好的方法去做我想要完成的事情吗?任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

确保初始化位置管理器并尝试使用locations数组而不是manager对象。

   min  Minimum value of the range. Default minimum value is 0.
   max  Maximum value of the range. Default maximum value is 100.
   step This is Step scale factor of the slider, default value is 1 and only allowing integer number unless minimum value is non integer number.

答案 1 :(得分:0)

事实证明,当我再次向info.plist添加信息时,我需要在模拟器和物理设备上卸载应用程序。一旦发生这种情况,一切都开始起作用了。