iOS9 ActivityManager.startActivityUpdatesToQueue 错误

标签 ios swift core-motion ios9

我在新的 Xcode7 beta 中打开了我的应用程序,它在旧版本中运行得很好。现在我收到错误,我不知道如何解决。这是代码。错误已被注释掉。

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.
}


}

最佳答案

问题是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"
                    }
                }
            }
        }
    }

还尝试利用最后一个参数是一个闭包来简化函数调用。

关于iOS9 ActivityManager.startActivityUpdatesToQueue 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30825409/

相关文章:

objective-c - Xcode 更新后应用程序崩溃

ios - 升级到 Xcode 7 后无法写入文档目录

swift - 通过启动 App 进行 Coremotion 和 iPhone 定位

ios - 关于 iPad 应用程序的 HTML5 离线存储和缓存

javascript - 将第 1 页的值保存到第 2 页 - uiWebView

ios - 如何在 Xcode 中获得一个标签来显示星期几 (Swift/Swift 2)

ios - 苹果 watch CMDeviceMotion 没有给我很好的读数

ios - JTCalendar 委托(delegate)参数类型与 swift 不匹配

ios - 如何使用 strftime 在 Swift 中格式化字符串

ios - 无法找到 Cocoapod MotionKit 框架派生数据