Подкласиране на обвързан тип в моно допир

Имам проблем, когато подкласифицирам тип, който свързва 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


person Stephane Delcroix    schedule 19.02.2013    source източник
comment
Това правилният код ли е? 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
comment
не, това не е правилният код, ctor извиква основния ctor с име на файл, Коригира се сега   -  person Stephane Delcroix    schedule 19.02.2013
comment
фиксирани. веригата от конструктори вече е както трябва   -  person Stephane Delcroix    schedule 19.02.2013
comment
Веригата от (ObjC) конструктори и това, което правят, е малко странно. Можете ли да подготвите примерно приложение, което мога да разгледам?   -  person Rolf Bjarne Kvinge    schedule 20.02.2013
comment
Хей Ролф. Ще го направя. Обърнете внимание, че обвързванията може да са грешни и потребителският код правилен   -  person Stephane Delcroix    schedule 20.02.2013
comment
Ще трябва да го тествам с по-стара (не-3.0) среда за изпълнение, но получавам същия срив само когато използвам iOS симулатор ‹ 6.0 (в противен случай приложението се прекратява). Може би има несъответствие между версиите на симулатора и устройствата?   -  person poupou    schedule 20.02.2013
comment
Получавам го с всички симулатори. И приложението не трябва да прекъсва, трябва да показва тъжното ми лице.   -  person Stephane Delcroix    schedule 20.02.2013
comment
Тествано с най-новия xamarin всичко току-що. все същото   -  person Stephane Delcroix    schedule 20.02.2013
comment
Изглежда, че свързванията са повредени за -[CCSprite цвят] -- опитва се да извика Messaging.CCColor3B_objc_msgSend_stret (изходен резултат, base.get_Handle (), CCSprite.selColor); когато структурата, която използва, е твърде малка. Въпреки това ще бъде повреден само на i386 (симулатор)   -  person escrafford    schedule 21.02.2013
comment
След като побърках известно време с обвързванията, успях да накарам Color да не се срива повече, но просто излиза с черен екран, вместо да работи. Никога преди не съм правил много моно връзване, така че не съм сигурен доколко съм прав за това къде да отида. Докато преследвах това, започнах да мисля - нямам представа как да отстранявам грешки в c# и objc едновременно. Има ли начин да се използва lldb с c#? или някакво друго решение??   -  person escrafford    schedule 21.02.2013
comment
@poupou, трябва ли да отворя доклад за грешка за това?   -  person Stephane Delcroix    schedule 22.02.2013


Отговори (1)


Отговарям на собствения си въпрос. Грешката не беше в дефиницията на свързванията, нито в инструментите, използвани за генерирането им, а във версията 2.1rc0 на cocos2d. надграждането до 2.1rc0a го поправи.

След това това задейства нов проблем, но този може да бъде проследен до дефиницията на обвързванията и е коригиран тук https://github.com/mono/monotouch-bindings/pull/97

person Stephane Delcroix    schedule 27.02.2013