我花了一个小时才解决这个 iOS 崩溃问题,发布解决方案以防有帮助。除了崩溃count之后,您可能会获得不同的值。NSConcreteNotification
我在访问 array.count 时崩溃了,这就是我的情况下它是 count 的原因:
@objc fileprivate func loadParts(constraints: [NSLayoutConstraint]? = nil) {
assert(Thread.current.isMainThread)
var constraints = constraints ?? [NSLayoutConstraint]()
...
let cCount = constraints.count
Run Code Online (Sandbox Code Playgroud)
我一生都无法看到它如何在constraints.count上崩溃,因为数组保证存在。
我将此函数连接到一个通知,如下所示:
NotificationCenter.default.addObserver(self, selector: #selector(self.loadParts), name: UIDevice.batteryStateDidChangeNotification, object: nil)
Run Code Online (Sandbox Code Playgroud)
如果您查看 addObserver 的文档,它会说该函数必须只有一个参数,即“通知”。发生的情况是,我的函数是通过通知调用的,但我的代码希望它是一个数组。
解决方法是创建一个新函数,简单地调用我想要的函数 (loadParts),并让通知命中该函数:
NotificationCenter.default.addObserver(self, selector: #selector(self.loadPartsNotification(_:)), name: UIDevice.batteryStateDidChangeNotification, object: nil)
...
@objc fileprivate func loadPartsNotification(_ notification: Notification) {
self.loadParts()
}
fileprivate func loadParts(constraints: [NSLayoutConstraint]? = nil) {
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
784 次 |
| 最近记录: |