[addressX] 处的 SCNParticleSystem 弱变量持有 [addressY]

SCNParticleSystem weak variable at [addressX] holds [addressY]

我在转换到 swift 4.2 后开始收到此错误。在此之前,没有任何问题。从数组中删除对象后,错误会重复出现。如果我取出发射器,没有问题。

它似乎没有失去记忆,也没有崩溃。

objc[1207]: __weak 0x137ef2220 处的变量保存 0x137ef0040 而不是 0x137ef1fc0。这可能是对 objc_storeWeak() 和 objc_loadWeak() 的错误使用。在 objc_weak_error 上中断以进行调试。

class BaseObject
{
    var emitterExplosion1 = SCNParticleSystem()

    //********************************************************************
    init()
    {
        emitterExplosion1       = gNodes.createEmitter(vParticleType: .explosion1)
    }
}

感谢您的帮助。

我不确定为什么会发生这种情况(也许是错误?),但经过大量试验和错误后,我发现每次在您的代码中声明新的粒子系统时都会发生这种情况。解决方法是将粒子系统声明为可选的,然后稍后再处理。您将需要声明和更新发射器而不是创建一个新发射器。例如:

var emitterExplosion1 : SCNParticleSystem?
init(){
    emitterExplosion1 = SCNParticleSystem()
}
updateEmitter(emitter: emitterExplosion1)

如果你有 100 个不同的粒子到处飞来飞去,这很烦人,但如果你只有几个要管理并且不喜欢错误控制台被填满,我发现这很有效。