ios真机app初始化spine动画闪退

真机运行app报错, 133行是CCASSERT(skeletonData, json->error ? json->error : “Error reading skeleton data file.”);。
这个错误的意思应该是spine动画的json数据有问题。连续重复几次都闪退,第二天重新运行又不闪退了。并没有重新安装程序。spine动画的初始化会和手机当时的内存或者存储空间的大小有关么?下面是通过闪退的日志得出的报错信息。
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00000001826f411c __pthread_kill + 8
1 libsystem_pthread.dylib 0x00000001827c0ef8 pthread_kill + 112
2 libsystem_c.dylib 0x0000000182665dac abort + 140
3 libsystem_c.dylib 0x000000018263ae7c basename + 0
4 mql-mobile 0x0000000100ce494c spine::SkeletonRenderer::initWithFile(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, float) (SkeletonRenderer.cpp:133)
5 mql-mobile 0x0000000100ce45a4 spine::SkeletonRenderer::SkeletonRenderer(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, float) (SkeletonRenderer.cpp:97)
6 mql-mobile 0x0000000100db1eb8 spine::SkeletonAnimation::SkeletonAnimation(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, float) (SkeletonAnimation.cpp:117)
7 mql-mobile 0x0000000100db1a78 spine::SkeletonAnimation::SkeletonAnimation(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, float) (SkeletonAnimation.cpp:119)
8 mql-mobile 0x000000010034a068 js_cocos2dx_spine_SkeletonAnimation_constructor(JSContext*, unsigned int, JS::Value*) (jsb_cocos2dx_spine_auto.cpp:1591)
9 mql-mobile 0x0000000100983484 js::InvokeConstructor(JSContext*, JS::CallArgs) + 236
10 mql-mobile 0x000000010097ed80 Interpret(JSContext*, js::RunState&) + 28288
11 mql-mobile 0x0000000100977ecc js::RunScript(JSContext*, js::RunState&) + 280
12 mql-mobile 0x0000000100982fd8 js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 628
13 mql-mobile 0x00000001008d0034 js_fun_call(JSContext*, unsigned int, JS::Value*) + 236
14 mql-mobile 0x0000000100982ecc js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 360
15 mql-mobile 0x000000010097ed94 Interpret(JSContext*, js::RunState&) + 28308
16 mql-mobile 0x0000000100977ecc js::RunScript(JSContext*, js::RunState&) + 280
17 mql-mobile 0x0000000100982fd8 js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 628
18 mql-mobile 0x00000001008d0034 js_fun_call(JSContext*, unsigned int, JS::Value*) + 236
19 mql-mobile 0x0000000100982ecc js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 360
20 mql-mobile 0x000000010097ed94 Interpret(JSContext*, js::RunState&) + 28308
21 mql-mobile 0x0000000100977ecc js::RunScript(JSContext*, js::RunState&) + 280
22 mql-mobile 0x0000000100982fd8 js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) + 628
23 mql-mobile 0x000000010098331c js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value const*, JS::MutableHandleJS::Value) + 468
24 mql-mobile 0x00000001008ab22c JS_CallFunctionValue(JSContext*, JS::Handle<JSObject*>, JS::HandleJS::Value, JS::HandleValueArray const&, JS::MutableHandleJS::Value) + 76
25 mql-mobile 0x0000000100761d40 JSFunctionWrapper::invoke(unsigned int, JS::Value*, JS::MutableHandleJS::Value) (js_manual_conversions.cpp:117)
26 mql-mobile 0x00000001005dbb3c js_cocos2dx_EventDispatcher_addCustomEventListener(JSContext*, unsigned int, JS::Value*)::_6::operator()(cocos2d::EventCustom*) const (jsb_cocos2dx_auto.cpp:10529) 27 mql-mobile 0x00000001005db9d4 void std::__1::__invoke_void_return_wrapper<void>::__call<js_cocos2dx_EventDispatcher_addCustomEventListener(JSContext*, unsigned int, JS::Value*)::_6&, cocos2d::EventCustom*>(js_cocos2dx_EventDispatcher_addCustomEventListener(JSContext*, unsigned int, JS::Value*)::_6&&&, cocos2d::EventCustom*&&) (__functional_base:469) 28 mql-mobile 0x00000001005db698 std::__1::__function::__func<js_cocos2dx_EventDispatcher_addCustomEventListener(JSContext*, unsigned int, JS::Value*)::_6, std::__1::allocator<js_cocos2dx_EventDispatcher_addCustomEventListener(JSContext*, unsigned int, JS::Value*)::_6>, void (cocos2d::EventCustom*)>::operator()(cocos2d::EventCustom*&&) (functional:1437) 29 mql-mobile 0x0000000100e5b4a4 std::__1::function<void (cocos2d::EventCustom*)>::operator()(cocos2d::EventCustom*) const (functional:1817) 30 mql-mobile 0x0000000100e5b154 cocos2d::EventListenerCustom::init(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::function<void (cocos2d::EventCustom*)> const&)::_0::operator()(cocos2d::Event*) const (CCEventListenerCustom.cpp:61)
31 mql-mobile 0x0000000100e5b0f0 void std::__1::__invoke_void_return_wrapper::__call<cocos2d::EventListenerCustom::init(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, std::__1::function<void (cocos2d::EventCustom*)> const&)::_0&, cocos2d::Event*>(cocos2d::EventListenerCustom::init(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::function<void (cocos2d::EventCustom*)> const&)::_0&&&, cocos2d::Event*&&) (__functional_base:469)
32 mql-mobile 0x0000000100e5af44 std::__1::__function::__func<cocos2d::EventListenerCustom::init(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, std::__1::function<void (cocos2d::EventCustom*)> const&)::_0, std::__1::allocator<cocos2d::EventListenerCustom::init(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::function<void (cocos2d::EventCustom*)> const&)::_0>, void (cocos2d::Event*)>::operator()(cocos2d::Event*&&) (functional:1437)
33 mql-mobile 0x0000000100e82e9c std::__1::function<void (cocos2d::Event*)>::operator()(cocos2d::Event*) const (functional:1817)
34 mql-mobile 0x0000000100e6ce78 cocos2d::EventDispatcher::dispatchEvent(cocos2d::Event*)::_2::operator()(cocos2d::EventListener*) const (CCEventDispatcher.cpp:806) 35 mql-mobile 0x0000000100e6ce08 bool std::__1::__invoke_void_return_wrapper<bool>::__call<cocos2d::EventDispatcher::dispatchEvent(cocos2d::Event*)::_2&, cocos2d::EventListener*>(cocos2d::EventDispatcher::dispatchEvent(cocos2d::Event*)::_2&&&, cocos2d::EventListener*&&) (__functional_base:437) 36 mql-mobile 0x0000000100e6cc58 std::__1::__function::__func<cocos2d::EventDispatcher::dispatchEvent(cocos2d::Event*)::_2, std::__1::allocatorcocos2d::EventDispatcher::dispatchEvent(cocos2d::Event*)::$_2, bool (cocos2d::EventListener*)>::operator()(cocos2d::EventListener*&&) (functional:1437)
37 mql-mobile 0x0000000100e74858 std::__1::function<bool (cocos2d::EventListener*)>::operator()(cocos2d::EventListener*) const (functional:1817)
38 mql-mobile 0x0000000100e657dc cocos2d::EventDispatcher::dispatchEventToListeners(cocos2d::EventDispatcher::EventListenerVector*, std::__1::function<bool (cocos2d::EventListener*)> const&) (CCEventDispatcher.cpp:751)
39 mql-mobile 0x0000000100e65b9c cocos2d::EventDispatcher::dispatchEvent(cocos2d::Event*) (CCEventDispatcher.cpp:809)
40 mql-mobile 0x0000000100b16c9c cocos2d::Director::drawScene() (CCDirector.cpp:276)
41 mql-mobile 0x0000000100b1ace8 cocos2d::DisplayLinkDirector::mainLoop() (CCDirector.cpp:1351)
42 mql-mobile 0x0000000100ee3af8 -[CCDirectorCaller doCaller:] (CCDirectorCaller-ios.mm:140)
43 QuartzCore 0x0000000185694234 CA::Display::DisplayLinkItem::dispatch() + 40
44 QuartzCore 0x00000001856940e8 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 424
45 IOKit 0x0000000182dd1e54 IODispatchCalloutFromCFMessage + 372
46 CoreFoundation 0x0000000182af9030 __CFMachPortPerform + 180
47 CoreFoundation 0x0000000182b117d4 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 56
48 CoreFoundation 0x0000000182b10f0c __CFRunLoopDoSource1 + 436
49 CoreFoundation 0x0000000182b0ec64 __CFRunLoopRun + 1800
50 CoreFoundation 0x0000000182a38c50 CFRunLoopRunSpecific + 384
51 GraphicsServices 0x0000000184320088 GSEventRunModal + 180
52 UIKit 0x0000000187d22088 UIApplicationMain + 204
53 mql-mobile 0x0000000100102bdc main (main.m:8)

这个问题我们也不太清楚,在此之前应该还会有一个报错(CCASSERT 里面的消息),有可能是 json 加载失败。
可以的话麻烦提供一个 demo,以及手机型号。

就是这段代码,问题是不是每次都出错,闪退几次后,第二天又正常了。手机iphone6。demo太大了。
void SkeletonRenderer::initWithFile (const std::string& skeletonDataFile, const std::string& atlasFile, float scale) {
_atlas = spAtlas_createFromFile(atlasFile.c_str(), 0);
CCASSERT(_atlas, “Error reading atlas file.”);

spSkeletonJson* json = spSkeletonJson_create(_atlas);
json->scale = scale;
spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, skeletonDataFile.c_str());
CCASSERT(skeletonData, json->error ? json->error : "Error reading skeleton data file.");
spSkeletonJson_dispose(json);

setSkeletonData(skeletonData, true);

initialize();

}

确实是这段代码。能否看看你出错时, json->error 是什么内容?第二天正常后,往后就都正常了吗?

恩第二天正常后,就一直正常了。通过手机的crash记录和dSYM,用symbolicatecrash命令得出的错误栈信息,看不到json->error的内容。

1赞