2017-08-15 13 views
1

filterXを加速度計の更新に従って更新したいのですが、変数は私が構築する時の半分の時間でnilです。最初はselfで範囲の問題だと思っていましたが、残りの半分はうまくいきませんでした。スウィフト変数は時間の半分ではありません

私の2番目の推測は、ある種の競合状態だったということでした。親関数が0.1秒ごとに実行されるため、コードは同期的に実行されているため、それ自体は修正する必要があります。

何か助けていただければ幸いです。

class LocationTrackingService: CLLocationManagerDelegate { 

    static let sharedInstance = LocationTrackingService() 
    private override init() {} 

    var locationManager = CLLocationManager() 
    var motionManager = CMMotionManager() 

    var filterX : KalmanFilter<Double>? 

    func startTracking() { 
     locationManager.requestAlwaysAuthorization() 

     if CLLocationManager.locationServicesEnabled() { 
      locationManager.delegate = self 
      locationManager.startUpdatingLocation() 
      motionManager.startAccelerometerUpdates() 

      let location = locationManager.location! 
      let XYCoord = LatLonToXY(coordinate: (location.coordinate)) 

      self.filterX = KalmanFilter(stateEstimatePrior: XYCoord.x, errorCovariancePrior: pow(location.horizontalAccuracy, 2)) 
     } 

     if motionManager.isAccelerometerAvailable { 


      print(self.filterX) // <-- prints object no problem 


      motionManager.accelerometerUpdateInterval = 0.1 
      motionManager.startAccelerometerUpdates(to: OperationQueue.main) { data, _ in 


       print(self.filterX) // <------- prints nil half the time (i.e. half of the builds) 


       if let acceleration = data?.acceleration { 
        if self.filterX != nil { 
         // do stuff 
        } 
       } 
      } 
     } 
    } 
+0

ビルドの半分?ビヘイビアがビルドからビルドに変わることを意味しますか? –

+0

はい。ビルドからビルドへの動作の変更。特に時々それは適切な値であり、他の回はその無しである。 – dmr07

+0

filterXがnilに設定されているときに、KalmanFilterに渡されると、XYCoord.xはnilではありませんか? location.horizo​​ntalAccuracyはどうですか?両方がうまく見える場合は、self.filterXではなくローカルのvarを設定してみてください。もしローカルvarにもnilすることができれば、私はあなたのKalmanFilter()エラーでなければならないと思います。 – Smartcat

答えて

0

locationManager(_:didChangeAuthorization:)代理人の方法はどこですか? startUpdatingLocation()に進む前に、認可を取得する必要があります。

+0

例を省略するために除外しました。アプリを構築する前に、必要な権限がすべて与えられています。さらに、locationManagerは問題なく実行されています。これは 'nil'を半分にして出力する' filterX変数です。 – dmr07

関連する問題