ユーザーの現在の場所を取得する独自の構造体またはクラスを作成したいとします。Swift - 現在の場所の構造体/クラス(CLLocationManager)
私はCLLocationManagerを使用することができず、構造体の中に関数(didUpdateLocations、didFailWithErrorなど)があるようです(Xcodeはすべてのテキストカラーを黒にして、An internal error occurred. Source editor is limited.
というエラーが発生します)。クラスを使用して "getPlacemark"ファンクション(インスタンス化されたクラスから目印を取得する)を使用するか、作成されたインスタンス(instancedClass.placemarkInClass)から直接取得するだけで何も動作しない場合、私はThread 1: EXC_BAD_ACCESS
。
これは、クラスを作成する方法の私の最後の試みです:私のViewControllerで
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
}
}
私はインスタンス変数作る(currentLocation = CurrentLocation())との両方
を使用するようにしてくださいuserPlacemark = currentLocation.getPlacemark() と をuserPlacemark = currentLocation.placemark にしましょう。何も問題はありません。
現在の場所をフェッチして他のViewControllerで使用するための独自のクラスまたは構造体を持つ方法はありますか?
私が使用するときは、自分自身がsuper.init call_の前に使用されます。しかし、問題は私が場所を受け取ることができないということです。 getPlacemarkメソッドを使用しようとすると、場所が設定されません。私は[OneShotLocationManager](https://github.com/icanzilb/OneShotLocationManager)を使用しようとしましたが、動作しません。それは私が作りたいと思うようなクラスです。私は答えを与えるチュートリアルやSOの投稿を見つけることができないようです。 –
init()はこれで動作します、ありがとう! –