【发布时间】:2015-05-15 02:51:10
【问题描述】:
我正在尝试将一些第三方 SceneKit 代码集成到我的应用中,但我遇到了神秘的崩溃。奇怪的是,崩溃在 Xcode 中没有给出错误或日志,并且堆栈跟踪只是“UIApplicationMain”。那里没有有用的信息。
该代码在我获得它的第三方应用程序中有效,并且我已经批量复制了它,所以我知道它一定是一些委托调用或一些我没有包含的框架等。但这是我的第一个使用 SceneKit 的经验,所以我无法确定它可能是什么。
崩溃发生在用户点击屏幕并将新的 3D 对象添加到场景中的事件期间。我已经为所有相关方法设置了断点,并且崩溃似乎发生在中间时间,大概是内部的 SceneKit 功能,所以我无法确定它。
不过,我的 Crashlytics 报告确实收集了一些信息,我已将其包含在此处:
Thread : Crashed: com.apple.main-thread
0 libobjc.A.dylib 0x00981ea8 _objc_empty_cache
1 SceneKit 0x015e0273 __28-[SCNPhysicsBody _setOwner:]_block_invoke + 214
2 SceneKit 0x016b05b5 C3DTransactionFlush + 2014
3 CoreFoundation 0x00bff86e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
4 CoreFoundation 0x00bff7b0 __CFRunLoopDoObservers + 400
5 CoreFoundation 0x00bf51ea __CFRunLoopRun + 1226
6 CoreFoundation 0x00bf4a5b CFRunLoopRunSpecific + 443
7 CoreFoundation 0x00bf488b CFRunLoopRunInMode + 123
8 GraphicsServices 0x043042c9 GSEventRunModal + 192
9 GraphicsServices 0x04304106 GSEventRun + 104
10 UIKit 0x01b99106 UIApplicationMain + 1526
11 SW LiveSheet 0x0007888a main (main.m:14)
12 libdyld.dylib 0x04e61ac9 start + 1
搜索我的项目没有找到SCNPhysicsBody _setOwner: 的示例,所以我假设这是一个内部 SceneKit 方法?
有谁知道是什么导致了这样的崩溃?我将包括任何可能相关的方法(如果你告诉我它们可能是什么),但是创建对象的一系列方法很长,所以在这里盲目地复制它们似乎没有效率。另外,正如我所说,无论如何,崩溃似乎发生在“方法之间”。
有人认出这个错误吗?或者我可能会犯任何常见的“开始使用 SceneKit”错误,这可能导致这种情况?我知道代码可以工作,因为它可以在另一个项目中工作,这只是翻译中丢失了什么的问题。此外,在点击开始添加新对象的过程之前,场景确实加载成功。
谁能指出我正确的方向?即使只是知道在哪里进行调查的想法也将不胜感激。
感谢您帮助 SceneKit 新手!
【问题讨论】:
-
您可能缺少一些变量或对象初始化。你能发布错误发生的函数,任何初始化和变量存储吗?
-
@Moustach 这就是问题所在:我在每个方法的开头和结尾都设置了断点,崩溃似乎发生在
-(void)handleTap:或- (void)renderer:updateAtTime:结束之后,但在另一个方法之前火灾。我认为这意味着它在 SceneKit 的内部功能中崩溃了?但我不知道如何深入研究我的代码中不存在的方法,而且完整的 DiceRollerView 类有 1128 行长,所以仅仅发布整个内容不会有太大帮助。 -
嗯...发布创建立方体的代码(我假设)及其物理体怎么样?可悲的是,没有代码,我们能做的只有这么多......