Ios CoreMotion的主线程检测器警告,仅出现在2018款iPhone上
以下是该问题的一个极其简化的版本:Ios CoreMotion的主线程检测器警告,仅出现在2018款iPhone上,ios,iphone,xcode,core-motion,Ios,Iphone,Xcode,Core Motion,以下是该问题的一个极其简化的版本: import UIKit import CoreMotion class ViewController: UIViewController { private let manager = CMMotionManager() private let interval = 0.01 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(
import UIKit
import CoreMotion
class ViewController: UIViewController {
private let manager = CMMotionManager()
private let interval = 0.01
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
startUpdates()
}
private func startUpdates() {
let queue = OperationQueue()
queue.name = "com.demo.motion"
queue.qualityOfService = .userInteractive
queue.maxConcurrentOperationCount = 1
manager.accelerometerUpdateInterval = interval
manager.startAccelerometerUpdates(to: queue) { _, _ in }
}
}
当我在iPhone XR上运行此功能时,我将收到以下信息:
主线程检查器:在后台线程上调用的UI API:
-[UIApplication applicationState]PID:1237,TID:147763,线程名称:com.apple.CoreMotion.MotionThread,队列名称:
com.apple.root.default-qos.overmit,qos:0
- 我的设备正在运行最新的iOS版本12.3
- 在各种iPad(2018年之前)、iPhone8、iPhone6S和其他较旧型号上运行此功能,问题并未出现
- 更改
对此没有影响(我的首选是使用服务质量
)实用程序
- 出于好奇,我将整个
函数包装在一个主调度中,但没有成功startUpdates()
这是一个已报告给的已知问题。我遇到了相同的问题,并将方案更改为暂停处理主线程检查器问题。它在一个黑屏上暂停,显示了主线程检查器的返回地址。嗨,你能用这个问题运行单元测试吗?在我的例子中,测试失败就是因为这个原因。