Ошибка iOS9 на ActivityManager.startActivityUpdatesToQueue

Я открыл свое приложение в новой бета-версии Xcode7, которая отлично работала в старой версии. Сейчас я получаю ошибки, и я не знаю, как их исправить. Вот код Ошибка закомментирована.

import UIKit
import CoreMotion
class ViewController: UIViewController {

let activityManager = CMMotionActivityManager()
let pedoMeter = CMPedometer()

@IBOutlet weak var activityState: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    if(CMMotionActivityManager.isActivityAvailable()){
        print("YESS!")
        self.activityManager.startActivityUpdatesToQueue(NSOperationQueue.mainQueue(), withHandler: {(data: CMMotionActivity!) -> Void in  //Cannot invoke 'startActivityUpdatesToQueue' with an argument list of type '(NSOperationQueue, withHandler: (CMMotionActivity!) -> Void)'
        dispatch_async(dispatch_get_main_queue(), {() -> Void in  
        if(data.stationary == true){
        self.activityState.text = "Stationary"
        } else if (data.walking == true){
        self.activityState.text = "Walking"
        } else if (data.running == true){
        self.activityState.text = "Running"
        } else if (data.automotive == true){
        self.activityState.text = "Automotive"
        }

        })
        })
}

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

1 ответ

Решение

Проблема в типе данных CMMotionActivity? не CMMotionActivity!

Вот то, что должно работать для вас:

 if(CMMotionActivityManager.isActivityAvailable()){
        print("YES!")
        self.activityManager.startActivityUpdatesToQueue(NSOperationQueue.mainQueue()) { data in
            if let data = data {
                dispatch_async(dispatch_get_main_queue()) {
                    if(data.stationary == true){
                        self.activityState.text = "Stationary"
                    } else if (data.walking == true){
                        self.activityState.text = "Walking"
                    } else if (data.running == true){
                        self.activityState.text = "Running"
                    } else if (data.automotive == true){
                        self.activityState.text = "Automotive"
                    }
                }
            }
        }
    }

Также попробуйте воспользоваться последним аргументом - закрытием, чтобы упростить вызовы функций.

Другие вопросы по тегам