这是代码:
class FooCell: UICollectionViewCell {
@IBOutlet weak var containerView: UIView!
override func awakeFromNib() {
super.awakeFromNib()
containerView.layer.cornerRadius = 10
containerView.layer.masksToBounds = false
}
}
问题是它是
UICollectionViewCell
的子类,它已经是@MainActor了。
@available(iOS 6.0, *)
@MainActor open class UICollectionViewCell : UICollectionReusableView
awakeFromNib()
不是来自主线程吗?我只能使用MainActor.assumeIsolated {}
来解决这个错误,不太确定这是正确的方法。
我不知道为什么实例方法
awakeFromNib
是非隔离的(我可以猜测,但这纯粹是猜测)。您可能想向 Apple 提交有关此问题的错误。
如果你想知道它是否真的被主角调用,你可以插入这一行:
MainActor.preconditionIsolated()
如果您当时不是主角,这将使您的应用程序崩溃。
但是,作为一个实际的解决方案,我建议简单地创建一个任务:
override func awakeFromNib() {
super.awakeFromNib()
Task { @MainActor in
// set values here
}
}
安全无害。