每个事件/动作的MonoTouch NullReference(SIGSEGV)

时间:2011-02-22 21:56:11

标签: xamarin.ios monodevelop

我遇到的问题是,在我的全新项目中,我有一个带按钮的窗口(Outlet和Action定义),在我的C#代码中,我已经连接了Action的部分void实现。然后我有一个View,我加载并执行相同的操作。

问题是View导致System.NullReferenceException,'Click'代码永远不会运行,而是我最终得到以下完整跟踪

Loaded assembly: /Developer/MonoTouch/usr/lib/mono/2.1/monotouch.dll [External]
Loaded assembly: /Developer/MonoTouch/usr/lib/mono/2.1/System.Core.dll [External]
Loaded assembly: /Users/drisszouak/Projects/ZenVelopes/ZenVelopes/bin/iPhoneSimulator/Debug/ZenVelopes.exe
Stacktrace:

  at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <0x00004>
  at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <0x00004>
  at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x00038] in /Users/plasma/Source/iphone/monotouch/UIKit/UIApplication.cs:26
  at MonoTouch.UIKit.UIApplication.Main (string[]) [0x00000] in /Users/plasma/Source/iphone/monotouch/UIKit/UIApplication.cs:31
  at ZenVelopes.Application.Main (string[]) [0x00000] in /Users/drisszouak/Projects/ZenVelopes/ZenVelopes/Main.cs:14
  at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x0001d, 0x00090>

Native stacktrace:

    0   ZenVelopes                          0x000be66f mono_handle_native_sigsegv + 343
    1   ZenVelopes                          0x0000e43e mono_sigsegv_signal_handler + 313
    2   libSystem.B.dylib                   0x9118246b _sigtramp + 43
    3   ???                                 0xffffffff 0x0 + 4294967295
    4   UIKit                               0x01def167 -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 156
    5   UIKit                               0x01be1a6e -[UIApplication sendAction:to:from:forEvent:] + 119
    6   UIKit                               0x01c701b5 -[UIControl sendAction:to:forEvent:] + 67
    7   UIKit                               0x01c72647 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
    8   UIKit                               0x01c711f4 -[UIControl touchesEnded:withEvent:] + 458
    9   UIKit                               0x01c060d1 -[UIWindow _sendTouchesForEvent:] + 567
    10  UIKit                               0x01be737a -[UIApplication sendEvent:] + 447
    11  UIKit                               0x01bec732 _UIApplicationHandleEvent + 7576
    12  GraphicsServices                    0x03eb7a36 PurpleEventCallback + 1550
    13  CoreFoundation                      0x00df9064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    14  CoreFoundation                      0x00d596f7 __CFRunLoopDoSource1 + 215
    15  CoreFoundation                      0x00d56983 __CFRunLoopRun + 979
    16  CoreFoundation                      0x00d56240 CFRunLoopRunSpecific + 208
    17  CoreFoundation                      0x00d56161 CFRunLoopRunInMode + 97
    18  GraphicsServices                    0x03eb6268 GSEventRunModal + 217
    19  GraphicsServices                    0x03eb632d GSEventRun + 115
    20  UIKit                               0x01bf042e UIApplicationMain + 1160
    21  ???                                 0x09e39862 0x0 + 165910626
    22  ???                                 0x09e39632 0x0 + 165910066
    23  ???                                 0x09e38c9a 0x0 + 165907610
    24  ???                                 0x09e38aec 0x0 + 165907180
    25  ???                                 0x09e38ba1 0x0 + 165907361
    26  ZenVelopes                          0x0000e202 mono_jit_runtime_invoke + 1360
    27  ZenVelopes                          0x001c92af mono_runtime_invoke + 137
    28  ZenVelopes                          0x001caf6b mono_runtime_exec_main + 714
    29  ZenVelopes                          0x001ca891 mono_runtime_run_main + 812
    30  ZenVelopes                          0x00094fe8 mono_jit_exec + 200
    31  ZenVelopes                          0x0027cf05 main + 3494
    32  ZenVelopes                          0x00002ca1 _start + 208
    33  ZenVelopes                          0x00002bd0 start + 40
    34  ???                                 0x00000002 0x0 + 2

Debug info from gdb:

warning: Could not find object file "/var/folders/Ny/NyElTwhDGD8kZMqIEeLGXE+++TI/-Tmp-//cc6F1tBs.o" - no debug information available for "template.m".

warning: .o file "/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator4.2.sdk/usr/lib/libmonotouch.a(zlib-helper.x86.42.o)" more recent than executable timestamp in "/Users/drisszouak/Library/Application Support/iPhone Simulator/4.2/Applications/9B8EA00C-09B4-4D08-ABF7-7CF4487F1A28/ZenVelopes.app/ZenVelopes"
warning: Could not open OSO file /Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator4.2.sdk/usr/lib/libmonotouch.a(zlib-helper.x86.42.o) to scan for pubtypes for objfile /Users/drisszouak/Library/Application Support/iPhone Simulator/4.2/Applications/9B8EA00C-09B4-4D08-ABF7-7CF4487F1A28/ZenVelopes.app/ZenVelopes
warning: .o file "/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator4.2.sdk/usr/lib/libmonotouch.a(monotouch-glue.x86.42.o)" more recent than executable timestamp in "/Users/drisszouak/Library/Application Support/iPhone Simulator/4.2/Applications/9B8EA00C-09B4-4D08-ABF7-7CF4487F1A28/ZenVelopes.app/ZenVelopes"
warning: Could not open OSO file /Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator4.2.sdk/usr/lib/libmonotouch.a(monotouch-glue.x86.42.o) to scan for pubtypes for objfile /Users/drisszouak/Library/Application Support/iPhone Simulator/4.2/Applications/9B8EA00C-09B4-4D08-ABF7-7CF4487F1A28/ZenVelopes.app/ZenVelopes
warning: .o file "/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator4.2.sdk/usr/lib/libmonotouch.a(gc.x86.42.o)" more recent than executable timestamp in "/Users/drisszouak/Library/Application Support/iPhone Simulator/4.2/Applications/9B8EA00C-09B4-4D08-ABF7-7CF4487F1A28/ZenVelopes.app/ZenVelopes"
warning: Could not open OSO file /Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator4.2.sdk/usr/lib/libmonotouch.a(gc.x86.42.o) to scan for pubtypes for objfile /Users/drisszouak/Library/Application Support/iPhone Simulator/4.2/Applications/9B8EA00C-09B4-4D08-ABF7-7CF4487F1A28/ZenVelopes.app/ZenVelopes
warning: .o file "/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator4.2.sdk/usr/lib/libmonotouch.a(monotouch-glue.x86.42.o)" more recent than executable timestamp in "/Users/drisszouak/Library/Application Support/iPhone Simulator/4.2/Applications/9B8EA00C-09B4-4D08-ABF7-7CF4487F1A28/ZenVelopes.app/ZenVelopes"
warning: Couldn't open object file '/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator4.2.sdk/usr/lib/libmonotouch.a(monotouch-glue.x86.42.o)'
Attaching to process 10857.
Reading symbols for shared libraries . done
Reading symbols for shared libraries ...................................................................................................................... done
0x91127459 in read$UNIX2003 ()
  7 "WebThread"                     0x9111c0fa in mach_msg_trap ()
  6                                 0x9114a0a6 in __semwait_signal ()
  5                                 0x911595fe in recvfrom$UNIX2003 ()
  4                                 0x9111c136 in semaphore_wait_trap ()
  3                                 0x9111c0fa in mach_msg_trap ()
  2 "com.apple.libdispatch-manager" 0x91142982 in kevent ()
* 1 "com.apple.main-thread"         0x91127459 in read$UNIX2003 ()

Thread 7 (process 10857):
#0  0x9111c0fa in mach_msg_trap ()
#1  0x9111c867 in mach_msg ()
#2  0x00df94a6 in __CFRunLoopServiceMachPort ()
#3  0x00d56874 in __CFRunLoopRun ()
#4  0x00d56240 in CFRunLoopRunSpecific ()
#5  0x00d56161 in CFRunLoopRunInMode ()
#6  0x04f7c423 in RunWebThread ()
#7  0x9114985d in _pthread_start ()
#8  0x911496e2 in thread_start ()

Thread 6 (process 10857):
#0  0x9114a0a6 in __semwait_signal ()
#1  0x91175ee5 in nanosleep$UNIX2003 ()
#2  0x91175e23 in usleep$UNIX2003 ()
#3  0x0027714c in monotouch_pump_gc ()
#4  0x9114985d in _pthread_start ()
#5  0x911496e2 in thread_start ()

Thread 5 (process 10857):
#0  0x911595fe in recvfrom$UNIX2003 ()
#1  0x911793c7 in recv$UNIX2003 ()
#2  0x000d8cca in recv_length (fd=6, buf=0xb0388ebd, len=11, flags=0) at ../../../../mono/mini/debugger-agent.c:939
#3  0x000e616a in debugger_thread (arg=0x0) at ../../../../mono/mini/debugger-agent.c:6290
#4  0x002448e2 in thread_start_routine (args=0x80339a8) at ../../../../mono/io-layer/wthreads.c:286
#5  0x00274357 in GC_start_routine (arg=0x6ff6f60) at ../../../libgc/pthread_support.c:1390
#6  0x9114985d in _pthread_start ()
#7  0x911496e2 in thread_start ()

Thread 4 (process 10857):
#0  0x9111c136 in semaphore_wait_trap ()
#1  0x0015ae1d in finalizer_thread (unused=0x0) at ../../../../mono/metadata/gc.c:1026
#2  0x002034a3 in start_wrapper (data=0x7b18620) at ../../../../mono/metadata/threads.c:661
#3  0x002448e2 in thread_start_routine (args=0x80338b0) at ../../../../mono/io-layer/wthreads.c:286
#4  0x00274357 in GC_start_routine (arg=0x6ff6f60) at ../../../libgc/pthread_support.c:1390
#5  0x9114985d in _pthread_start ()
#6  0x911496e2 in thread_start ()

Thread 3 (process 10857):
#0  0x9111c0fa in mach_msg_trap ()
#1  0x9111c867 in mach_msg ()
#2  0x0011cc46 in mach_exception_thread (arg=0x0) at ../../../../mono/mini/mini-darwin.c:138
#3  0x9114985d in _pthread_start ()
#4  0x911496e2 in thread_start ()

Thread 2 (process 10857):
#0  0x91142982 in kevent ()
#1  0x9114309c in _dispatch_mgr_invoke ()
#2  0x91142559 in _dispatch_queue_invoke ()
#3  0x911422fe in _dispatch_worker_thread2 ()
#4  0x91141d81 in _pthread_wqthread ()
#5  0x91141bc6 in start_wqthread ()

Thread 1 (process 10857):
#0  0x91127459 in read$UNIX2003 ()
#1  0x000be81f in mono_handle_native_sigsegv (signal=11, ctx=0xbfffd228) at ../../../../mono/mini/mini-exceptions.c:1826
#2  0x0000e43e in mono_sigsegv_signal_handler (_dummy=10, info=0xbfffd1e8, context=0xbfffd228) at ../../../../mono/mini/mini.c:4846
#3  <signal handler called>
#4  0x028d6a63 in objc_msgSend ()
#5  0x07b96550 in ?? ()
#6  0x01def167 in -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] ()
#7  0x01be1a6e in -[UIApplication sendAction:to:from:forEvent:] ()
#8  0x01c701b5 in -[UIControl sendAction:to:forEvent:] ()
#9  0x01c72647 in -[UIControl(Internal) _sendActionsForEvents:withEvent:] ()
#10 0x01c711f4 in -[UIControl touchesEnded:withEvent:] ()
#11 0x01c060d1 in -[UIWindow _sendTouchesForEvent:] ()
#12 0x01be737a in -[UIApplication sendEvent:] ()
#13 0x01bec732 in _UIApplicationHandleEvent ()
#14 0x03eb7a36 in PurpleEventCallback ()
#15 0x00df9064 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#16 0x00d596f7 in __CFRunLoopDoSource1 ()
#17 0x00d56983 in __CFRunLoopRun ()
#18 0x00d56240 in CFRunLoopRunSpecific ()
#19 0x00d56161 in CFRunLoopRunInMode ()
#20 0x03eb6268 in GSEventRunModal ()
#21 0x03eb632d in GSEventRun ()
#22 0x01bf042e in UIApplicationMain ()
#23 0x09e39862 in ?? ()
#24 0x09e39632 in ?? ()
#25 0x09e38c9a in ?? ()
#26 0x09e38aec in ?? ()
#27 0x09e38ba1 in ?? ()
#28 0x0000e202 in mono_jit_runtime_invoke (method=0x8119afc, obj=0x0, params=0xbfffed9c, exc=0x0) at ../../../../mono/mini/mini.c:4733
#29 0x001c92af in mono_runtime_invoke (method=0x8119afc, obj=0x0, params=0xbfffed9c, exc=0x0) at ../../../../mono/metadata/object.c:2615
#30 0x001caf6b in mono_runtime_exec_main (method=0x8119afc, args=0x9e0d1a0, exc=0x0) at ../../../../mono/metadata/object.c:3581
#31 0x001ca891 in mono_runtime_run_main (method=0x8119afc, argc=0, argv=0xbfffeed4, exc=0x0) at ../../../../mono/metadata/object.c:3355
#32 0x00094fe8 in mono_jit_exec (domain=0x6f91e58, assembly=0x7b8ca10, argc=1, argv=0xbfffeed0) at ../../../../mono/mini/driver.c:1094
#33 0x0027cf05 in main ()

=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

根据朋友的建议,我卸载了Mono,MonoTouch,MonoDevelop和iOS SDK,然后重新下载它们,在iOS SDK,Mono,MT(个人许可版),MD订单中重新安装它们。这并没有改变一件事。

我的Main中引用的第14行是这一行:

public class Application
    {
        static void Main (string[] args)
        {
    #14 ====>  UIApplication.Main (args);
        }
    }

我正在接线的部分无效“点击”事件就是这个(仅用于测试目的)。代码永远不会到达这里,例外情况就会爆发。

partial void clickNewEnvelope (UIBarButtonItem sender)
        {
            int x;
            x = 1;
        }

当我创建一个新项目时,我会得到同样的东西。

我很难过,帮忙。

1 个答案:

答案 0 :(得分:8)

看起来你正在悬挂UIBarButtonItem上的一个事件,而不是保留对它的引用。任何时候你做

foo.SomeEvent += delegate {};

您需要保留对“foo”的引用,以便不收集实现协议的隐藏类,因为在这种情况下UIBarButtonItem是该隐藏类的所有者。