[addressX]的SCNParticleSystem弱变量保存[addressY]

时间:2018-12-01 08:00:09

标签: scenekit swift4.2

转换为Swift 4.2之后,我开始收到此错误。在此之前,没有任何问题。从数组中删除对象后,将重复错误。如果我把发射器拿出来,没问题。

它似乎并没有丢失内存,也不会崩溃。

objc [1207]:位于0x137ef2220的__weak变量保存0x137ef0040而不是0x137ef1fc0。这可能是对objc_storeWeak()和objc_loadWeak()的不正确使用。中断objc_weak_error进行调试。

class BaseObject
{
    var emitterExplosion1 = SCNParticleSystem()

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

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

令人讨厌的是,您到处都是100个不同的粒子,但是如果您只需要管理几个,又讨厌填充错误控制台,我发现这很有效。