我正在开发一款需要访问用户动态&健身活动 - 即计步器数据。在这个应用程序的入门中,我有一个按钮,调用我的CMPedometer对象的startUpdates
方法,触发iOS显示UIAlertViewController,要求用户决定该应用程序是否有权访问该数据。
按钮代码:
func didSelectActionButton() {
switch state {
case .appFirstLaunched:
pedometer.startUpdates(from: Date()) { (pedometerData, error) in
}
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(checkPermissionsEverySecond), userInfo: nil, repeats: true)
case .noPermissionGranted:
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(checkPermissionsEverySecond), userInfo: nil, repeats: true)
case .permissionGranted:
pedometer = nil navigationController?.pushViewController(RecordMeasurementController(), animated: true)
}
}
func checkPermissionsEverySecond() {
if timerInSeconds < 5 && CMSensorRecorder.isAuthorizedForRecording() {
permissionGranted()
timer.invalidate()
} else {
noPermissionGranted())
timer.invalidate()
}
timerInSeconds += 1
}
如上面的代码所述,有三种状态:1)appFirstLaunched,2)noPermissionGranted,3)permissionGranted。我检测到用户是否允许访问数据以及随后的状态更改都感觉很草率。理想情况下,我希望我的应用程序立即响应用户在UIAlertViewController中选择的内容。
是否有可能更直接地指示用户选择的内容,而不是每n秒检查一次CMSensorRecorder.isAuthorizedForRecording()
?