Xamarin.ios 显示PDF内容的MonoTouch_Disposer.Drain异常
我正在编写一个应用程序,它大量使用PDF viewer来显示各种文档,在浏览文档库后,我经常会遇到以下异常: 输出层:Ecolab.SalesPad.ContentItem FreeDomainire 3头盔 螺纹加工: 堆栈跟踪:Xamarin.ios 显示PDF内容的MonoTouch_Disposer.Drain异常,xamarin.ios,Xamarin.ios,我正在编写一个应用程序,它大量使用PDF viewer来显示各种文档,在浏览文档库后,我经常会遇到以下异常: 输出层:Ecolab.SalesPad.ContentItem FreeDomainire 3头盔 螺纹加工: 堆栈跟踪: 0 SalesPadTouch 0x00b62b18 mono_handle_native_sigsegv + 456 1 SalesPadTouch 0x00b484e
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
在单调的基础上。 at(包装器运行时调用)object.runtime_invoke_dynamic(intptr、intptr、intptr、intptr) 位于MonoTouch.UIKit.UIApplication.Main(字符串[],字符串,字符串) 位于/Users/itrgroup/Projects/SalesPad/SalesPad.Touch/Main.cs:20中的Ecolab.SalesPad.Touch.Application.Main(字符串[])[0x00000] at(包装器运行时调用)object.runtime_invoke_dynamic(intptr、intptr、intptr、intptr)
本机堆栈跟踪: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。这通常表明
mono运行时或某个本机库中出现致命错误
由您的应用程序使用。
它每次都会在MonoTouch.Disposer\u排水管上点击此按钮。有时在调用ViewDidAppear之后,有时在调用ViewDidAppear之前。我在谷歌搜索中找不到任何关于MonoTouch.Disposer_Drain的建议。以前有人碰到过这个吗?关于原因和/或解决方法有何建议
谢谢!
斯科特--这可能有两个原因:
- 过早释放(本机)对象。如果没有对应的托管对等方的托管引用,而本机代码仍有指向它的指针,则可能发生这种情况。在这种情况下,垃圾收集器将释放受管对等对象(同时也释放本机对象)
- 在不需要对象时对其调用Dispose(在某些非常罕见的情况下,手动调用Dispose可能会更改对象树中对象销毁的通常顺序)
3 UIKit 0x35107b23 -[UISearchDisplayController dealloc] + 78
它与UISearchDisplayController相关。我猜想UISearchDisplayController的本机析构函数正试图调用它引用的对象(例如调用该对象的析构函数),而该对象已经被释放。因此,我将查看是否有任何分配给UISearchDisplayController字段的对象(可以是普通字段、事件处理程序、回调等)被提前释放
一旦知道提前释放了哪个对象,就必须确保只要UISearchDisplayController处于活动状态,GC就可以看到该对象(一种常见的方法是将其分配给相应类的类变量)
更新
这里回答了一个非常类似的问题:,这可能是您遇到的问题。这可能有两个原因:
- 过早释放(本机)对象。如果没有对应的托管对等方的托管引用,而本机代码仍有指向它的指针,则可能发生这种情况。在这种情况下,垃圾收集器将释放受管对等对象(同时也释放本机对象)
- 在不需要对象时对其调用Dispose(在某些非常罕见的情况下,手动调用Dispose可能会更改对象树中对象销毁的通常顺序)
3 UIKit 0x35107b23 -[UISearchDisplayController dealloc] + 78
它与UISearchDisplayController相关。我猜想UISearchDisplayController的本机析构函数正试图调用它引用的对象(例如调用该对象的析构函数),而该对象已经被释放。因此,我将查看是否有任何分配给UISearchDisplayController字段的对象(可以是普通字段、事件处理程序、回调等)被提前释放
一旦知道提前释放了哪个对象,就必须确保只要UISearchDisplayController处于活动状态,GC就可以看到该对象(一种常见的方法是将其分配给相应类的类变量)
更新
这里回答了一个非常类似的问题:,这可能是你遇到的问题