Problemas con enlaces: método de base de llamada en el método de anulación de llamadas de clase de enlace. Conduce a la recursión infinita.

Estoy trabajando en un proyecto MonoTouch que utiliza Cordova. He creado una encuadernación para Córdoba (Basado en el creado por Scott Blomquist.).

He podido instanciar las clases bastante bien sin falta. Cuando intento extenderlos, sin embargo, me encuentro con problemas. Por ejemplo, si simplemente intento extender el CDVViewController, sin anular nada, cuando llegamos al código que ejemplifica esta clase extendida, el sistema sale silenciosamente sin mensajes de error y las siguientes líneas de salida.

The program 'Mono' has exited with code 0 (0x0).
The program '[5600] ***.vshost.exe: Managed (v4.0.30319)' has exited with code -1 (0xffffffff).

Aquí está la clase que estoy tratando de instanciar

public class WebViewController : CDVViewController
{
}

Y aquí está el enlace detrás de él.

[BaseType (typeof (UIViewController))]
interface CDVViewController {
    [Export ("webView")]
    UIWebView WebView { get; set; }

    [Export ("pluginObjects")]
    NSMutableDictionary PluginObjects { get; }

    [Export ("pluginsMap")]
    NSDictionary PluginsMap { get; }

    [Export ("settings")]
    NSDictionary Settings { get; }

    [Export ("whitelist")]
    CDVWhitelist Whitelist { get; }

    [Export ("loadFromString")]
    bool LoadFromString { get; }

    [Export ("useSplashScreen")]
    bool UseSplashScreen { get; set; }

    [Export ("activityView")]
    UIActivityIndicatorView ActivityView { get; }

    [Export ("imageView")]
    UIImageView ImageView { get; }

    [Export ("wwwFolderName")]
    string WwwFolderName { get; set; }

    [Export ("startPage")]
    string StartPage { get; set; }

    [Export ("commandQueue")]
    NSObject CommandQueue { get; set; }

    [Export ("commandDelegate")]
    NSObject CommandDelegate { get; set; }

    [Export ("userAgent")]
    string UserAgent { get; }

    [Export ("printMultitaskingInfo")]
    void PrintMultitaskingInfo ();

    [Export ("createGapView")]
    void CreateGapView ();

    [Export ("newCordovaViewWithFrame:")]
    UIWebView NewCordovaView(RectangleF bounds);

    [Export ("javascriptAlert:")]
    void JavascriptAlert (string text);

    [Export ("appURLScheme")]
    string AppUrlScheme ();

    [Export ("parseInterfaceOrientations:")]
    NSArray ParseInterfaceOrientations (NSArray orientations);

    [Export ("supportsOrientation:")]
    bool SupportsOrientation (UIInterfaceOrientation orientations);

    [Export ("getCommandInstance:")]
    NSObject GetCommandInstance (string pluginName);

    [Export ("registerPlugin:withClassName:")]
    void RegisterPluginWithClassName (CDVPlugin plugin, string className);

    [Export ("URLisAllowed:")]
    bool UrlIsAllowed (NSUrl url);

    [Static] [Export ("getBundlePlist:")]
    NSDictionary GetBundlePlist (string plistName);

    [Static] [Export ("applicationDocumentsDirectory")]
    string ApplicationDocumentsDirectory ();

    // The following methods and properties come from UIWebViewDelegate, but we can't do multiple inheritance
    [Export ("webView:shouldStartLoadWithRequest:navigationType:")]
    bool ShouldStartLoad (UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType);
}

losCDVViewController.h que construyo el enlace para está disponibleaquí

Cualquier ayuda que alguien pueda ofrecer sería muy apreciada.

Actualización # 1 Esto parece haber sido causado por una falla de segmentación. Para cualquier persona que experimente esto, si va a la Mac y comprueba el registro, es probable que encuentre el mismo. Puede hacerlo abriendo el terminal y escribiendotail -f /var/log/system.log como aparentemente aquí es donde van los registros para el simulador.

En mi registro, encontré lo siguiente.*** Se utiliza para redactar el nombre de la aplicación.

Mar 28 16:51:16 macmini1 com.apple.launchd.peruser.55385368[409] (UIKitApplication:com.***.***[0x5ef3][14219]): Job appears to have crashed: Segmentation fault: 11
Mar 28 16:51:16 macmini1 SpringBoard[516]: Application '***' exited abnormally with signal 11: Segmentation fault: 11
Mar 28 16:51:16 macmini1 ReportCrash[14132]: Saved crash report for ***[14219] version ??? (???) to /Users/jstarke/Library/Logs/DiagnosticReports/***_2013-03-28-165116_macmini1.crash
Mar 28 16:51:16 macmini1 ReportCrash[14132]: Removing excessive log: file://localhost/Users/jstarke/Library/Logs/DiagnosticReports/***_2013-03-28-135722_macmini1.crash

Actualización # 2 Encontré los informes de fallos mencionados anteriormente. Aquí está la información más reciente del informe de bloqueo, incluido el subproceso bloqueado

Process:         *** [29880]
Path:            /Users/*/Library/Application Support/iPhone Simulator/*/***.app/***
Identifier:      ***
Version:         ??? (???)
Code Type:       X86 (Native)
Parent Process:  launchd [409]

Date/Time:       2013-03-29 11:44:48.882 -0700
OS Version:      Mac OS X Server 10.7.5 (11G63)
Report Version:  9

Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000bf7fff7c

VM Regions Near 0xbf7fff7c:
    Stack                  00000000b050b000-00000000b052c000 [  132K] rw-/rwx SM=COW  
--> Stack                  00000000bc000000-00000000bf800000 [ 56.0M] ---/rwx SM=NUL  
    Stack                  00000000bf800000-00000000c0000000 [ 8192K] rw-/rwx SM=COW  

Application Specific Information:
iPhone Simulator 358.4, iPhone OS 6.0 (iPhone/10A403)


Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_c.dylib             
0x954d458c szone_malloc_should_clear + 12
1   libsystem_c.dylib             
0x954d566b szone_malloc + 24
2   libsystem_c.dylib             
0x9550b962 malloc_zone_malloc + 77
3   libsystem_c.dylib             
0x9550c882 malloc + 50
4   libobjc.A.dylib               
0x041985c9 class_copyProtocolList + 157
5   CoreFoundation                
0x03f72962 __methodDescriptionForSelector + 178
6   CoreFoundation                
0x03fe65a3 -[NSObject(NSObject) methodSignatureForSelector:] + 51
7   ***                  
0x00254352 monotouch_trampoline + 82
8   ???                           
0x16c4ab0b 0 + 381987595
9   ???                           
0x16c7428c 0 + 382157452
10  ???                           
0x16c743dc 0 + 382157788
11  ***                  
0x0004cf22 mono_jit_runtime_invoke + 722
12  ***                  
0x001b03fe mono_runtime_invoke + 126
13  ***                  
0x00255166 monotouch_trampoline + 3686

Lines 8 - 13 repeat a large number of times (no additional information)

506 ???                           
0x16c4ab0b 0 + 381987595
507 ???                           
0x16c7428c 0 + 382157452
508 ???                           
0x16c743dc 0 + 382157788
509 ***
0x0004cf22 mono_jit_runtime_invoke + 722
510 ***                  
0x001b03fe mono_runtime_invoke + 126
511 ***                  
0x00255166 monotouch_trampoline + 3686

Actualización # 3 En un esfuerzo por obtener más información, decidí anular todos los métodos en el CDVViewController dentro de mi WebViewController local, y luego devolver el valor del equivalente base de cada método, y establecer un punto de interrupción en el método y poner una Consola .WriteLine diciendo que entramos y salimos de cada método.

Para mi sorpresa, la razón de las muchas duplicaciones enActualización # 2 tiene que ver con el hecho de que cuandoWebViewController.ShouldAutoRotateToInterfaceOrientation Se llama, llamamos a la clase base.CDVViewController.ShouldAutoRotateToInterfaceOrientation, que aparentemente a su vez llamaWebViewController.ShouldAutoRotateToInterfaceOrientation, y así.

Mirando el código fuente de la versión de Cordova que estoy usando (aquí)shouldAutorotateToInterfaceOrientation: LlamaríasupportsOrientation:, que volvería de unaNSArray.

No puedo ver ninguna razón por la queCDVViewController.ShouldAutoRotateToInterfaceOrientation siempre debería llamarWebViewController.ShouldAutoRotateToInterfaceOrientation. ¿Alguien en la comunidad de Xamarin o Córdoba tiene alguna idea?

Respuestas a la pregunta(1)

Su respuesta a la pregunta