Я создаю приложение Watch, которое будет записывать ускорение пользователя. Для этого я использовал CMSensorRecorder
из CoreMotion
Framework.
В настоящий момент программа работает так, что пользователь нажимает кнопку на часах, которая запускает ускорение для записи в течение 30 секунд. После этого происходит 6-минутная задержка (см. Ответ здесь: watchOS2 - CMSensorRecorder , для чтения данных требуется задержка), а данные ускорения и метки времени выводятся на консоль.
Прямо сейчас я получаю "Недопустимый ответ" и "Произошла ошибка" при запуске приложения. Я добавил описание использования движения в файл info.plist
.
Я довольно новичок в Swift и разработке приложений, и я боюсь, что что-то не так с тем, как я пытаюсь получить доступ к данным. Я приложил журналы консоли и код ниже.
Кто-нибудь может дать некоторое представление о сообщениях и как решить эту проблему? Я искал вокруг, но не нашел ни одного случая этой проблемы раньше. Приветствия.
func recordAcceleration(){
if CMSensorRecorder.isAccelerometerRecordingAvailable(){
print("recorder started")
recorder.recordAccelerometer(forDuration: 30) //forDuration controls how many seconds data is recorded for.
print("recording done")
}
}
func getData(){
if let list = recorder.accelerometerData(from: Date(timeIntervalSinceNow: -400), 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)
}
}
}
}
//Send data to iphone after time period.
func sendData(dataBlock:CMSensorDataList){
WCSession.default.transferUserInfo(["Data" : dataBlock])
}
//UI Elements
@IBAction func recordButtonPressed() {
print("button pressed")
recordAcceleration()
//A delay is needed to read the data properly.
print("delaying 6 mins")
perform(#selector(callback), with: nil, afterDelay: 6*60)
}
@objc func callback(){
getData()
}
extension CMSensorDataList: Sequence {
public func makeIterator() -> NSFastEnumerationIterator {
return NSFastEnumerationIterator(self)
}
Console output:
button pressed
recorder started
2019-03-12 12:12:12.568962+1100 app_name WatchKit Extension[233:5614] [Motion] Warning - invoking recordDataType:forDuration: on main may lead to deadlock.
2019-03-12 12:12:13.102712+1100 app_name WatchKit Extension[233:5614] [SensorRecorder] Response invalid.
recording done
delaying 6 mins
2019-03-12 12:18:13.115955+1100 app_name WatchKit Extension[233:5614] [Motion] Warning - invoking sensorDataFromDate:toDate:forType: on main may lead to deadlock.
2019-03-12 12:18:13.162476+1100 app_name WatchKit Extension[233:5753] [SensorRecorder] Error occurred while trying to retrieve accelerometer records!