【问题标题】:sceneDidLoad being called twice?sceneDidLoad 被调用了两次?
【发布时间】:2017-01-28 04:07:58
【问题描述】:

使用 Xcode 8、swift 3,我使用游戏模板创建了一个 iOS 应用程序,并启用了实体。我注意到我看到一些初始精灵的双节点计数,即使我只使用了一次 addChild。

我加了

override func sceneDidLoad() {
print(#function) ... } 

到代码,不知道为什么会被调用两次。

日志文件...

2016-09-20 10:21:31.482 MMDecon1[3295:791435] SKUtil.m: MGGetBoolAnswer is not available in the simulator.
sceneDidLoad()
sceneDidLoad()

我加了

override func didMove(to view: SKView) {..} 

并将我的初始化代码放在这里作为临时修复。

有人知道为什么使用实体的默认游戏应用代码会触发两次 sceneDidLoad() 吗?

【问题讨论】:

  • 因为 xcode 先设置了一个虚拟版本的场景,然后才是真实的场景。不知道为什么,Apple 说它工作正常
  • 你从哪里找到的? sceneDidLoad 的评论说 "this is the recommended place to perform one-time setup"
  • 很久以前我提交了一个关于它的错误报告,然后我发送的任何错误报告都声称它工作正常,不知道我为什么要提交错误。
  • 你不应该看到双重节点,它应该立即破坏虚拟场景
  • 我看到了同样的事情。我唯一的理论是,它与我在 Storyboard 编辑器中使用 Segue 相关……这是我看到的唯一重新配置的可能性。不过不知道为什么。 didMoveToView:(SKView *)view 解决方法虽然有效 - 谢谢。

标签: swift xcode sprite-kit ios10


【解决方案1】:

通常情况下,sceneDidLoad 只会被调用一次。但是,如果发送了内存警告,则 UIViewController 会释放其场景,如果视图控制器不可见,则将其设置为 nil。下次出现场景时,视图控制器将重新加载场景并再次调用 sceneDidLoad。

你必须假设sceneDidLoad可以被多次调用。

实施 didReceiveMemoryWarning 并记录或设置断点以查看发生了什么。

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多