【问题标题】:CMPedometer in iOS 10iOS 10 中的 CMPedometer
【发布时间】:2016-11-19 15:49:51
【问题描述】:

我正在尝试在 iOS 10 中访问 CMPedometer 数据,并且我已经遵循了一些教程,但我似乎无法获得任何工作。我以前从未尝试过访问这些信息,所以真的不知道从哪里开始。我很想得到一些帮助来设置一些东西。您能提供的任何帮助将不胜感激。

我既想进行实时更新,也想在同一天内访问已通过的信息。

目前无法打开并打印大量错误。

import UIKit
import CoreMotion

class ViewController: UIViewController {

var days:[String] = []
var stepsTaken:[Int] = []

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

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let cal = Calendar.current
    var comps = cal.components([.year, .month, .day, .hour, .minute, .second], from: Date())
    comps.hour = 0
    comps.minute = 0
    comps.second = 0
    let timeZone = TimeZone.system
    cal.timeZone = timeZone

    let midnightOfToday = cal.date(from: comps)!

    if(CMPedometer.isStepCountingAvailable()){

        self.pedoMeter.startUpdates(from: midnightOfToday) { (data: CMPedometerData?, error) -> Void in
            DispatchQueue.main.async(execute: { () -> Void in
                if(error == nil){
                    print("\(data!.numberOfSteps)")
                    //self.step.text = "\(data!.numberOfSteps)"
                }
              })
           }
       }

    }
}

我一直在玩一些东西,并意识到如果模拟器也打开了,则会出现一个很大的错误消息。但是,如果它关闭并仅在我的手机上运行,​​则错误是:

2016-07-16 18:13:38.054710 测试[419:37870] [访问] 私有

【问题讨论】:

  • 欢迎。您应该使用显示您尝试过的具体代码更新您的问题,并详细解释您在代码中遇到的问题。就目前而言,您的问题过于模糊和广泛。
  • 希望更好? @rmaddy
  • 你根本没有解释问题。错误是什么? “打不开”是什么意思?
  • 抱歉,当我在 iPhone 上运行该应用程序时,它会使用上述代码打开并立即关闭。 Xcode 然后打印一个巨大的错误。
  • 2016-07-16 17:26:36.127060 test[4763:275466] [用户默认值] CFPrefsPlistSource(域:kCFPreferencesAnyApplication,用户:kCFPreferencesCurrentUser,ByHost:否,容器:(空) ) 正在等待写入完成,以便确定新数据是否可用

标签: ios swift swift3 ios10


【解决方案1】:

您使用的是 Xcode 的 beta 版本,该日志对所有用户都是通用的。没什么好担心的。编辑你的代码 lil bit。

import UIKit
import CoreMotion

class ViewController: UIViewController {

    var days:[String] = []
    var stepsTaken:[Int] = []

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

    override func viewDidLoad() {
        super.viewDidLoad()

        let cal = Calendar.current
        var comps = cal.components([.year, .month, .day, .hour, .minute, .second], from: Date())
        comps.hour = 0
        comps.minute = 0
        comps.second = 0
        let timeZone = TimeZone.system
        cal.timeZone = timeZone

        let midnightOfToday = cal.date(from: comps)!

        #if arch(i386) || arch(x86_64) && os(iOS)

            // Simulator

        #else

            // Run only in Physical Device, iOS

            if(CMPedometer.isStepCountingAvailable()){

                self.pedoMeter.startUpdates(from: midnightOfToday) { (data: CMPedometerData?, error) -> Void in
                    DispatchQueue.main.async(execute: { () -> Void in
                        if(error == nil){
                            print("\(data!.numberOfSteps)")
                            //self.step.text = "\(data!.numberOfSteps)"
                        }
                    })
                }
            }
        #endif
    }
}

info.plist 中添加键Privacy - Motion Usage DescriptionStringYES

尝试在 iPhone 中再次运行该应用并检查。

【讨论】:

  • 谢谢 - 我在这上面花了很长时间 - 描述应该不是“是”,因为当询问您是否要允许应用访问运动数据时,它会显示给用户 -在 info.plist 中使用没有此键的 queryPedometerData 时发生崩溃
最近更新 更多