我正在编写一个大量使用PDF查看器来显示各种文档的应用程序,并且在浏览我的文档库后经常遇到以下异常:
OutputLayer:Ecolab.SalesPad.ContentItem FreedomAire 3头盔 线程完成: 堆栈跟踪:
在MonoTouch.Foundation.NSObject / MonoTouch_Disposer.Drain(MonoTouch.Foundation.NSObject)< 0x000eb> at(wrapper runtime-invoke)object.runtime_invoke_dynamic(intptr,intptr,intptr,intptr)< 0xffffffff> 在MonoTouch.UIKit.UIApplication.Main(string [],string,string)< 0x0010f> 在/Users/itrgroup/Projects/SalesPad/SalesPad.Touch/Main.cs:20中的Ecolab.SalesPad.Touch.Application.Main(string [])[0x00000] at(wrapper runtime-invoke)object.runtime_invoke_dynamic(intptr,intptr,intptr,intptr)< 0xffffffff>
原生堆栈跟踪:
0 SalesPadTouch 0x00b62b18 mono_handle_native_sigsegv + 456
1 SalesPadTouch 0x00b484e4 mono_sigsegv_signal_handler + 428
2 libsystem_c.dylib 0x34db7539 _sigtramp + 48
3 UIKit 0x35107b23 -[UISearchDisplayController dealloc] + 78
4 libobjc.A.dylib 0x3564b0c5 _objc_rootRelease + 36
5 SalesPadTouch 0x00489eb8 wrapper_managed_to_native_MonoTouch_ObjCRuntime_Messaging_void_objc_msgSend_intptr_intptr + 68
6 SalesPadTouch 0x0028d094 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 200
7 SalesPadTouch 0x00b48108 mono_jit_runtime_invoke + 2892
8 SalesPadTouch 0x00c40414 mono_runtime_invoke + 200
9 SalesPadTouch 0x00cd3944 monotouch_trampoline + 3140
10 CoreFoundation 0x33e9222b -[NSObject performSelector:withObject:] + 42
11 Foundation 0x31a01757 __NSThreadPerformPerform + 350
12 CoreFoundation 0x33f07b03 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
13 CoreFoundation 0x33f072cf __CFRunLoopDoSources0 + 214
14 CoreFoundation 0x33f06075 __CFRunLoopRun + 652
15 CoreFoundation 0x33e894dd CFRunLoopRunSpecific + 300
16 CoreFoundation 0x33e893a5 CFRunLoopRunInMode + 104
17 GraphicsServices 0x35ac9fcd GSEventRunModal + 156
18 UIKit 0x34fce743 UIApplicationMain + 1090
19 SalesPadTouch 0x00491160 wrapper_managed_to_native_MonoTouch_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr + 240
20 SalesPadTouch 0x00073d60 Ecolab_SalesPad_Touch_Application_Main_string__ + 152
21 SalesPadTouch 0x0028d094 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 200
22 SalesPadTouch 0x00b48108 mono_jit_runtime_invoke + 2892
23 SalesPadTouch 0x00c40414 mono_runtime_invoke + 200
24 SalesPadTouch 0x00c4353c mono_runtime_exec_main + 836
25 SalesPadTouch 0x00c4253c mono_runtime_run_main + 968
26 SalesPadTouch 0x00b4f1b8 mono_jit_exec + 244
27 SalesPadTouch 0x00b424fc main + 4076
28 SalesPadTouch 0x00002914 start + 52
=============================================== ================== 执行本机代码时获得SIGSEGV。这通常表明 单声道运行时或其中一个本机库中的致命错误
每次都会在MonoTouch.Disposer_Drain上出现这种情况。有时在调用ViewDidAppear之后,有时在调用之前。我在Google搜索中找不到有关MonoTouch.Disposer_Drain的任何建议。有没有人遇到过这个?关于原因和/或解决方法的任何建议?
谢谢! 斯科特 -
答案 0 :(得分:3)
这可能有两个原因:
跟踪原因可能非常困难,但堆栈跟踪中有一个提示:
3 UIKit 0x35107b23 -[UISearchDisplayController dealloc] + 78
它与UISearchDisplayController有关。我的猜测是UISearchDisplayController的本机析构函数试图调用它有引用的对象(例如,调用该对象的析构函数),并且该对象已被释放。所以我会看看分配给UISearchDisplayController字段的任何对象(可以是普通字段,事件处理程序,回调等)是否恰好早期被释放。
一旦知道哪个对象提前释放,只要UISearchDisplayController处于活动状态,就必须确保GC可以看到对象(一种常见的方法是将它分配给相应类的类变量)。
<强>更新强>
此处已回答了一个非常类似的问题:MonoTouch SIGSEGV crash using navigationcontroller and searchdisplaycontroller,这可能是您遇到的问题。