设置 uiview 角落:无法从非隔离上下文引用主要参与者隔离属性“containerView”

问题描述 投票:0回答:1

这是代码:

class FooCell: UICollectionViewCell {
    @IBOutlet weak var containerView: UIView!
    override func awakeFromNib() {
        super.awakeFromNib()
        containerView.layer.cornerRadius = 10
        containerView.layer.masksToBounds = false
    }
}

enter image description here

问题是它是

UICollectionViewCell
的子类,它已经是@MainActor了。

    @available(iOS 6.0, *)
@MainActor open class UICollectionViewCell : UICollectionReusableView

awakeFromNib()
不是来自主线程吗?我只能使用
MainActor.assumeIsolated {}
来解决这个错误,不太确定这是正确的方法。

ios swift6
1个回答
0
投票

我不知道为什么实例方法

awakeFromNib
是非隔离的(我可以猜测,但这纯粹是猜测)。您可能想向 Apple 提交有关此问题的错误。

如果你想知道它是否真的被主角调用,你可以插入这一行:

MainActor.preconditionIsolated()

如果您当时是主角,这将使您的应用程序崩溃。

但是,作为一个实际的解决方案,我建议简单地创建一个任务:

override func awakeFromNib() {
    super.awakeFromNib()
    Task { @MainActor in
        // set values here
    }
}

安全无害。

© www.soinside.com 2019 - 2024. All rights reserved.