Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift-无法检索CMSensorDataList记录_Swift_Core Motion_Watchos 5 - Fatal编程技术网

Swift-无法检索CMSensorDataList记录

Swift-无法检索CMSensorDataList记录,swift,core-motion,watchos-5,Swift,Core Motion,Watchos 5,我正在制作一个手表应用程序,可以记录用户的加速。我使用了CoreMotion框架中的CMSensorRecorder来实现这一点 现在程序的流程是用户按下手表上的一个按钮,触发加速度记录30秒。在此之后,有6分钟的延迟(参考这里的答案:,读取数据需要延迟),加速度和时间戳数据被打印到控制台 现在我在运行应用程序时收到“响应无效”和“出错”。我已经在info.plist文件中添加了运动使用说明 我对Swift和应用程序开发相当陌生,我担心我试图访问数据的方式有问题。我在下面附上了控制台日志和代码

我正在制作一个手表应用程序,可以记录用户的加速。我使用了
CoreMotion
框架中的
CMSensorRecorder
来实现这一点

现在程序的流程是用户按下手表上的一个按钮,触发加速度记录30秒。在此之后,有6分钟的延迟(参考这里的答案:,读取数据需要延迟),加速度和时间戳数据被打印到控制台

现在我在运行应用程序时收到“响应无效”和“出错”。我已经在
info.plist
文件中添加了运动使用说明

我对Swift和应用程序开发相当陌生,我担心我试图访问数据的方式有问题。我在下面附上了控制台日志和代码

有人能提供一些关于这些信息的见解以及如何解决这些问题吗?我已经到处搜索过了,但以前没有发现任何此类问题的案例。干杯

func记录加速(){
如果CMSensorRecorder.isAccelerometerRecordingAvailable()可用{
打印(“记录器已启动”)
RecordAccelerator(forDuration:30)//forDuration控制记录数据的秒数。
打印(“录制完成”)
}
}
func getData(){
如果let list=recorder.accelerometerData(从:日期(TimeIntervalenceNow:-400)到:日期()){
打印(“列表数据”)
对于列表中的数据{
如果让accData=数据为CMRecordedAccelerMeterData{
设accX=accData.acceleration.x
让timestamp=accData.startDate
//在这里做点什么。
打印(accX)
打印(时间戳)
}
}
}
}
//在一段时间后将数据发送到iphone。
func sendData(数据块:CMSensorDataList){
WCSession.default.transferUserInfo([“数据”:数据块])
}
//UI元素
@iAction func recordButtonPressed(){
打印(“按下按钮”)
记录加速度()
//需要延迟才能正确读取数据。
打印(“延迟6分钟”)
执行(#选择器(回调),带:nil,后延迟:6*60)
}
@objc func回调函数(){
getData()
}
扩展CMSensorDataList:序列{
public func makeIterator()->NSFastEnumerationIterator{
返回NSFastEnumerationIterator(self)
}

我运行了你的代码,没有收到“响应无效”或“出错”。我收到了主线程警告。因此我改为后台线程,它工作正常

还有,我想你不需要等六分钟。我把它改为一分钟

我希望这有帮助

let recorder = CMSensorRecorder()
@IBAction func recordAcceleration() {
    if CMSensorRecorder.isAccelerometerRecordingAvailable() {
        print("recorder started")
        DispatchQueue.global(qos: .background).async {
            self.recorder.recordAccelerometer(forDuration: 30)
        }
        perform(#selector(callback), with: nil, afterDelay: 1 * 60)
    }
}
@objc func callback(){
    DispatchQueue.global(qos: .background).async { self.getData() }
}
func getData(){
    print("getData started")
    if let list = recorder.accelerometerData(from: Date(timeIntervalSinceNow: -60), to: Date()) {
        print("listing data")
        for data in list{
            if let accData = data as? CMRecordedAccelerometerData{
                let accX = accData.acceleration.x
                let timestamp = accData.startDate
                //Do something here.
                print(accX)
                print(timestamp)
            }
        }
    }
}

我运行了你的代码,没有收到“响应无效”或“出错”。我收到了主线程警告。因此我改为后台线程,它工作正常

还有,我想你不需要等六分钟。我把它改为一分钟

我希望这有帮助

let recorder = CMSensorRecorder()
@IBAction func recordAcceleration() {
    if CMSensorRecorder.isAccelerometerRecordingAvailable() {
        print("recorder started")
        DispatchQueue.global(qos: .background).async {
            self.recorder.recordAccelerometer(forDuration: 30)
        }
        perform(#selector(callback), with: nil, afterDelay: 1 * 60)
    }
}
@objc func callback(){
    DispatchQueue.global(qos: .background).async { self.getData() }
}
func getData(){
    print("getData started")
    if let list = recorder.accelerometerData(from: Date(timeIntervalSinceNow: -60), to: Date()) {
        print("listing data")
        for data in list{
            if let accData = data as? CMRecordedAccelerometerData{
                let accX = accData.acceleration.x
                let timestamp = accData.startDate
                //Do something here.
                print(accX)
                print(timestamp)
            }
        }
    }
}

非常感谢,我将尝试一下。谢谢!这将清除锁定并允许我访问数据。非常感谢,我将尝试一下。谢谢!这将清除锁定并允许我访问数据。