我正在尝试在我的应用的新闻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.currentLocation
为nil
。
这是我的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的坐标为零!我该如何解决?或者有更好的方法去做我想要完成的事情吗?任何帮助将不胜感激!
答案 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
添加信息时,我需要在模拟器和物理设备上卸载应用程序。一旦发生这种情况,一切都开始起作用了。