问题描述
我正在开发一个使用 Cordova 的 MonoTouch 项目.我为 Cordova 创建了一个绑定(基于 Scott Blomquist 创建的绑定a>).
I'm working on a MonoTouch project that uses Cordova. I created a binding for Cordova (based on the one created by Scott Blomquist).
我已经能够很好地实例化这些类而不会失败.然而,当我尝试扩展它们时,我遇到了问题.例如,如果我只是尝试扩展 CDVViewController,甚至没有覆盖任何东西,当我们到达实例化这个扩展类的代码时,系统会安静地退出,没有错误消息,以及以下退出行.
I have been able to instantiate the classes fairly well without fail. When I try to extend them however, I run into issues. For example, if I merely try extend the CDVViewController, without even overriding anything, when we get to the code that instantiates this extended class, the system quietly exits with no error messages, and the following exit lines.
The program 'Mono' has exited with code 0 (0x0).
The program '[5600] ***.vshost.exe: Managed (v4.0.30319)' has exited with code -1 (0xffffffff).
这是我要实例化的类
public class WebViewController : CDVViewController
{
}
这是它背后的绑定
[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);
}
CDVViewController.h我构建绑定的可用here
Any help that anyone can offer would be greatly appreciated.
在我的日志中,我发现了以下内容.***
用于编辑应用程序名称.
In my log, I found the following. ***
is used for redacting the application name.
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
更新 #2我找到了上面提到的崩溃报告.这里是最新的崩溃报告信息,包括崩溃线程
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
查看我正在使用的 Cordova 版本的源代码 (here),shouldAutorotateToInterfaceOrientation:
会调用 supportsOrientation:
,它会从 NSArray
返回.
Looking at the source code for the version of Cordova I'm using (here), shouldAutorotateToInterfaceOrientation:
would call supportsOrientation:
, which would return from an NSArray
.
我看不出为什么 CDVViewController.ShouldAutoRotateToInterfaceOrientation
应该调用 WebViewController.ShouldAutoRotateToInterfaceOrientation
的任何理由.Xamarin 或 Cordova 社区中的任何人有任何想法吗?
I can't see any reason why CDVViewController.ShouldAutoRotateToInterfaceOrientation
should ever call WebViewController.ShouldAutoRotateToInterfaceOrientation
. Does anyone in the Xamarin or Cordova community have any idea?
推荐答案
如果其他人遇到与绑定相关的类似问题,我在 Rolf Bjarne Kvinge (绑定问题:扩展类导致调用自身的方法?)
If anyone else is experiencing a similar issue relating to Bindings, I managed to get this working thanks to the advice of Rolf Bjarne Kvinge (Binding issues: extending a class leads method calling itself?)
事实证明,这要归咎于我使用的标志(没有真正理解它的作用).当使用 btouch
生成 DLL 时,-e
标志 生成不能被子类化的较小类
.
It turns out that a flag that I was using (without really understanding what it did) was to blame for this. When generating the DLL using btouch
the -e
flag Generates smaller classes that can not be subclassed
.
删除它可能会解决您的问题,就像对我一样.
Removing this will likely solve your problem, like it did for me.
这篇关于绑定问题:在绑定类上调用基方法调用覆盖方法.导致无限递归的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!