我想创建一个自己的结构或类来获取用户的当前位置。
我似乎无法在结构中使用CLLocationManager及其函数(didUpdateLocations、didFailWithError等)(Xcode使所有文本变为黑色,我收到一个错误,说An internal error occurred. Source editor is limited.
)。当我使用一个类并尝试使用"getPlacemark"-函数(从实例化的类中获取占位符)或直接从创建的实例中获取("instancedClass.placemarkInClass"),但什么都不起作用时,我只得到Thread 1: EXC_BAD_ACCESS
。
这是我创建类的最后一次尝试:
import Foundation
import MapKit
class UserLocation: NSObject, CLLocationManagerDelegate{
var mLocationManager: CLLocationManager
var placemark: CLPlacemark
override init(){
placemark = CLPlacemark()
self.mLocationManager = CLLocationManager()
self.mLocationManager.desiredAccuracy = kCLLocationAccuracyBest
self.mLocationManager.requestWhenInUseAuthorization()
self.mLocationManager.startUpdatingLocation()
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {(placemarks, error) -> Void in
if (error != nil) {
print("Error: " + (error?.localizedDescription)!)
return
}
if (placemarks?.count > 0) {
let pm = placemarks![0]
self.placemark = pm
print(self.placemark.areasOfInterest)
self.mLocationManager.stopUpdatingLocation()
}
})
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
print("Error: " + (error.localizedDescription))
}
func getPlacemark() -> CLPlacemark{
return self.placemark
}
}
在我的ViewController中,我将其作为实例变量(currentLocation=currentLocation()),并尝试同时使用
let userPlacemark=currentLocation.getPlacemark()和let userPlacemark=currentLocation.placemark但什么都不起作用。
有没有一种方法可以拥有自己的类或结构来获取当前位置并在其他ViewControllers中使用它?
您的代码有两个观察结果:
-
一旦完成了成员变量的设置,就不会在init中调用[super-init]。将init修改为
init(){ placemark = CLPlacemark() mLocationManager = CLLocationManager() mLocationManager.desiredAccuracy = kCLLocationAccuracyBest mLocationManager.requestWhenInUseAuthorization() mLocationManager.startUpdatingLocation() super.init() mLocationManager.delegate = self }
-
正在设置位置经理的委派。您应该在创建位置管理器实例后不久在init中执行此操作。请参阅上面的init代码。