Имам проблем, когато подкласифицирам тип, който свързва obj-C тип. В някои случаи се проваля по време на строителството.
Мога да възпроизведа това точно сега с обвързванията cocos2d и CCSprite. Ето моя подклас
public class MySprite : CCSprite
{
public MySprite (string filename) : base (filename)
{}
}
Когато го инстанцирам, той се проваля:
Stacktrace:
at (wrapper managed-to-native) MonoTouch.ObjCRuntime.Messaging.void_objc_msgSendSuper_IntPtr (intptr,intptr,intptr) <IL 0x00025, 0xffffffff>
at MonoTouch.Cocos2D.CCSprite.set_Texture (MonoTouch.Cocos2D.CCTexture2D) <IL 0x00048, 0x00137>
at (wrapper runtime-invoke) <Module>.runtime_invoke_void__this___object (object,intptr,intptr,intptr) <IL 0x00052, 0xffffffff>
at (wrapper managed-to-native) MonoTouch.ObjCRuntime.Messaging.IntPtr_objc_msgSendSuper_IntPtr (intptr,intptr,intptr) <IL 0x00027, 0xffffffff>
at MonoTouch.Cocos2D.CCSprite..ctor (string) <IL 0x00072, 0x001a3>
at Demo.MySprite..ctor (string) <IL 0x00002, 0x00027>
[...]
Native stacktrace:
0 Demo 0x00115b5c mono_handle_native_sigsegv + 284
1 Demo 0x00089c38 mono_sigsegv_signal_handler + 248
2 libsystem_c.dylib 0x962af86b _sigtramp + 43
3 ??? 0xffffffff 0x0 + 4294967295
4 Demo 0x0003b9d2 -[CCSprite setOpacityModifyRGB:] + 47
5 Demo 0x0003c18c -[CCSprite updateBlendFunc] + 267
6 Demo 0x0003c37c -[CCSprite setTexture:] + 488
7 ??? 0x11cadc94 0x0 + 298507412
8 ??? 0x11cada78 0x0 + 298506872
9 ??? 0x11cadbf6 0x0 + 298507254
10 Demo 0x0008dff2 mono_jit_runtime_invoke + 722
11 Demo 0x001f0b7e mono_runtime_invoke + 126
12 Demo 0x00293736 monotouch_trampoline + 3686
13 Demo 0x0003909e -[CCSprite initWithTexture:rect:rotated:] + 614
14 Demo 0x0003914d -[CCSprite initWithTexture:rect:] + 70
15 Demo 0x0003934c -[CCSprite initWithFile:] + 275
16 ??? 0x11cad803 0x0 + 298506243
17 ??? 0x11cad6ec 0x0 + 298505964
18 ??? 0x11cace30 0x0 + 298503728
19 ??? 0x11cac958 0x0 + 298502488
20 ??? 0x11ca7f04 0x0 + 298483460
21 ??? 0x0d7f7258 0x0 + 226456152
22 ??? 0x0d7f0a7c 0x0 + 226429564
23 ??? 0x0d7f0dc5 0x0 + 226430405
24 Demo 0x0008dff2 mono_jit_runtime_invoke + 722
25 Demo 0x001f0b7e mono_runtime_invoke + 126
26 Demo 0x00293736 monotouch_trampoline + 3686
27 UIKit 0x016c59d6 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1292
28 UIKit 0x016c68a6 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 508
29 UIKit 0x016d5743 -[UIApplication handleEvent:withNewEvent:] + 1027
30 UIKit 0x016d61f8 -[UIApplication sendEvent:] + 68
31 UIKit 0x016c9aa9 _UIApplicationHandleEvent + 8196
32 GraphicsServices 0x042bafa9 PurpleEventCallback + 1274
33 CoreFoundation 0x037231c5 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
34 CoreFoundation 0x03688022 __CFRunLoopDoSource1 + 146
35 CoreFoundation 0x0368690a __CFRunLoopRun + 2218
36 CoreFoundation 0x03685db4 CFRunLoopRunSpecific + 212
37 CoreFoundation 0x03685ccb CFRunLoopRunInMode + 123
38 UIKit 0x016c62a7 -[UIApplication _run] + 576
39 UIKit 0x016c7a9b UIApplicationMain + 1175
40 ??? 0x0d7ebbc5 0x0 + 226409413
41 ??? 0x0d7e5020 0x0 + 226381856
42 ??? 0x0d7e4390 0x0 + 226378640
43 ??? 0x0d7e44e6 0x0 + 226378982
44 Demo 0x0008dff2 mono_jit_runtime_invoke + 722
45 Demo 0x001f0b7e mono_runtime_invoke + 126
46 Demo 0x001f4d74 mono_runtime_exec_main + 420
47 Demo 0x001fa165 mono_runtime_run_main + 725
48 Demo 0x000eb4d5 mono_jit_exec + 149
49 Demo 0x002889f5 main + 2005
50 Demo 0x00086f81 start + 53
Това, което ме притеснява е, че имам подобен код, работещ в различно приложение.
И за да бъда пълен, ако заменя свойството Texture на прокси към базата, то вече не се срива, но не показва нищо, така че подозирам, че основният обект е в лоша форма.
Също така се опитах да [регистрирам] класа и да добавя конструктора по подразбиране заменя.
[АКТУАЛИЗАЦИЯ] Сравних този проект с другия, който работеше. Всъщност иработят на устройството и и се провалят по същия начин в симулатора.
[АКТУАЛИЗАЦИЯ2] ето пример за задействане на поведението: https://github.com/StephaneDelcroix/mt-subclassbug Cocos2D.dll
е нов, генериран тази сутрин от monotouch-bindings
master
public MySprite (string filename) : base ()
защото следата на вашия стек сочи към: в MonoTouch.Cocos2D.CCSprite..ctor (низ) ‹IL 0x00072, 0x001a3› в Demo.MySprite..ctor (низ) ‹IL 0x00002, 0x00027›, които съответстват на селектора в основния стек проследи също:-[CCSprite initWithFile:]
- person poupou   schedule 19.02.2013