【问题标题】:SCNParticleSystem weak variable at [addressX] holds [addressY][address] 处的 SC 粒子系统弱变量持有 [address]
【发布时间】:2018-12-01 08:00:08
【问题描述】:

我在转换为 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)
    }
}

感谢您的帮助。

【问题讨论】:

  • 我也得到了这个。创建符号中断只会再次为您提供上述代码。这让我发疯了。

标签: scenekit swift4.2


【解决方案1】:

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

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

如果你有 100 个不同的粒子飞到各处,这很烦人,但如果你只有几个需要管理并且讨厌填满你的错误控制台,我发现这是可行的。

【讨论】:

  • 是的,很烦人。我设法通过您的示例清除了第一个错误,但是即使进行了更改,其他错误仍然出现。同意,应该是bug。很好的答案,谢谢!
猜你喜欢
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多