私は自分のアプリを整理している方がいいですし、CoreLocationを使ってクラス間で問題を抱えています。私のアプリはiBeaconを検出し、その座標をAPIに送信します。位置座標を別のクラスで更新するにはどうすればよいですか?
AppDelegateではRunLocation()を呼び出しています。RunGPS()はcreateLocationManagerをトリガーし、座標を更新してAPIに送信します。私のコンソール出力は、「場所の更新」で必要なものすべてを出力します。経度と緯度に関する何も私に何かをねじ込んだと信じているが、私は何も知らない。
私はそれが不器用にViewControllerにまとめられているときに動作します。私は別のクラスに分割されているので、私は今何かをねじっていると思っています。
関連するコード:
func runGPS(){
print("Running GPS")
createLocationManager(startImmediately: true)
}
func createLocationManager(startImmediately startImmediately: Bool){
locationManager = CLLocationManager()
onSwitch = true
if let manager = locationManager
{
print("Successfully created the location manager")
manager.delegate = self
if startImmediately
{
if onSwitch == true {
manager.startUpdatingLocation()
print("Updating Location")
}else{
print("Off")
}
}
}
}
func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation){
// Stop updating location is onSwitch is false. If true, user has called for help. Turn on GPS and execute a post to the API
if onSwitch == false
{
locationManager.stopUpdatingLocation()
print("Location updates off")
}
else
{
loadCoreData()
loadUser()
print("Updating location")
let latitude:String = "\(newLocation.coordinate.latitude)"
let longitude:String = "\(newLocation.coordinate.longitude)"
print("Latitude = \(newLocation.coordinate.latitude)")
print("Longitude = \(newLocation.coordinate.longitude)")
//Posting to the API which generates a map and sends SMS messages
post(["device_id":"\(deviceID)", "sender":"\(username)", "longitude":"\(longitude)", "latitude":"\(latitude)", "contacts":"\(phoneArray)"], url: "http://ring-api.herokuapp.com/api/v1/alerts")
//API has been called so stop posting
onSwitch = false
}
}
コンソール出力:
2016-03-22 10:39:14.689 MangosBeta0.4[1531:677382] You entered the region
Running GPS
Successfully created the location manager
Updating Location
アーキテクチャ賢明@Dareはあなたの偉大な答えを与えています。 –