scenekit - [addressX] 处的 SCNParticleSystem 弱变量保存 [addressY]

标签 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)
    }
}

感谢您的帮助。

最佳答案

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

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

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

关于scenekit - [addressX] 处的 SCNParticleSystem 弱变量保存 [addressY],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53568934/

相关文章:

ios - swift deinit 方法不调用

ios - 在 ios swift 中使用 alamofire 5 从 multipartformdata 上传带有参数的文件

swift - 如何更改 SCNParticleSystem 中粒子的亮度?

swift - SceneKit - 在 SCNNode 上应用 CIFilter 隐藏 SCNTorus

ios - 将 ARSCNView 场景背景内容设置为 iPhone X 相机

scenekit - 获取dae节点的大小

scenekit - 如何删除节点?

ios - 私有(private)类(class)成员可在类(class)外访问

ios - 无法将类型 'NSAttributedString.Key' 的值转换为预期的字典键类型 'String' 错误 (swift4.2)