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)
}
}
}
}
非常感谢,我将尝试一下。谢谢!这将清除锁定并允许我访问数据。非常感谢,我将尝试一下。谢谢!这将清除锁定并允许我访问数据。