【问题标题】:Swift Playground Protocol Crashing after Fixed Number of Iterations固定迭代次数后 Swift Playground 协议崩溃
【发布时间】:2019-08-07 01:33:03
【问题描述】:

对于今年的 WWDC 奖学金,要求的格式是 Swift Playground。我正在一个应用程序中构建我的游乐场,其中 UITableViewCells 中的滑块通过自定义委托连接到 SCNScene 和 SCNNode 和 SCNParticleSystem 。它作为一个应用程序在 Mac 上运行时运行得非常好,但是当它在 iPad 上的 swift playground 中运行时,委托方法在恒定数量的迭代后崩溃。我已经确定它不是节点本身的方法,因为我做了这个print("Hello"),但它仍然以完全相同的 96 次迭代崩溃。该节点已在源文件和主操场文件中。任何想法或帮助将不胜感激。

委托

protocol ReturnParameterDelegate {
    func parameter1(value: Float)
    func parameter2(value: Float)
    func defaultParameter(value: Float)
}

表格视图单元格

@objc private func returnValue() {
    guard let delegate = delegate else { return }
    print(self.parameter.title)
    switch self.parameter.title {
    case ParameterNames.parameter1:
        delegate.parameter1(value: self.slider.value)
    ...
    }
}

场景

public func parameter1(value: Float) {
    node.changeValue(value: value)
}
...

【问题讨论】:

  • 不幸的是,在调试方面,游乐场有点糟糕。我会将代码粘贴到实际项目中并运行它,以便当它崩溃时您可以在控制台中看到实际的错误消息;它应该提供更多信息。可能是一些资源问题,您要么泄漏,要么移动客户端的可用空间比 Mac 少,但没有错误,这只是猜测。
  • 花费了很多小时后,我确定我达到了 Swift Playgrounds 的技术极限。我在滑块上运行了一个 SCNPropertyController 并且应用程序正常工作,游乐场没有。我将追求限制次数和滑块可以调用。

标签: ios swift protocols scenekit swift-playground


【解决方案1】:

经过数小时的工作并尝试使用其他方法,我找到了一个简单的解决方案:将代码从主 .playground 移动到 .swift 文件夹中的 .swift 文件中。虽然这不应该改变任何东西,但将它添加到源中使我的所有方法都能完美运行。这确实使协议复杂化,但是我用创建一个全局对象代替了它们。它确实会在恒定数量的迭代后消除崩溃,并使某些以前没有的其他功能正常工作(例如,更改SCNNodediffuse)。

【讨论】:

    【解决方案2】:

    我将所有内容移至源文件。而且效果好一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      相关资源
      最近更新 更多