我正在开发一个应用程序,将结合使用MonoTouch(Xamarin.iOS)和Cordova(PhoneGap)。用户界面主要使用Cordova构建,而我们的业务逻辑主要是用MonoTouch编写的。
我找到了一篇描述这种情况的指南,所以我知道这是可能的,作者已经在monotouch-bindings项目的分支中添加了Cordova绑定。
不幸的是,当我尝试使用这些绑定创建单视图项目时,我几乎立即遇到了问题。我使用提供的Cordova库中的makefile构建了此dll,并将其添加到我的测试应用程序中简单视图控制器的
我找到了一篇描述这种情况的指南,所以我知道这是可能的,作者已经在monotouch-bindings项目的分支中添加了Cordova绑定。
不幸的是,当我尝试使用这些绑定创建单视图项目时,我几乎立即遇到了问题。我使用提供的Cordova库中的makefile构建了此dll,并将其添加到我的测试应用程序中简单视图控制器的
ViewDidLoad
方法中,该应用程序名为MyViewController
。以下是我的源代码。public class MyViewController : UIViewController
{
private CDVViewController cdv;
public MyViewController()
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
View.Frame = UIScreen.MainScreen.Bounds;
View.BackgroundColor = UIColor.White;
View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
cdv = new CDVViewController();
RectangleF rect = new RectangleF (0, 0, 320, 480);
CDV.View.Frame = rect;
View.AddSubview(cdv.View);
}
}
当我构建CDVViewController
时,出现以下异常:
MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown. Name: NSInvalidArgumentException Reason: -[__NSCFArray dictionaryWithLowercaseKeys]: unrecognized selector sent to instance 0xc892680
at at (wrapper managed-to-native) MonoTouch.ObjCRuntime.Messaging:IntPtr_objc_msgSend (intptr,intptr)
at CordovaIOS.CDVViewController..ctor () [0x00000] in <filename unknown>:0
at <Project_name>.MyViewController.ViewDidLoad () [0x00043] in /Users/jstarke/tmp/<Project_name>/MyViewController.cs:32
at at (wrapper managed-to-native) MonoTouch.ObjCRuntime.Messaging:void_objc_msgSend (intptr,intptr)
at MonoTouch.UIKit.UIWindow.MakeKeyAndVisible () [0x00010] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIWindow.g.cs:126
at <Project_name>.AppDelegate.FinishedLaunching (MonoTouch.UIKit.UIApplication app, MonoTouch.Foundation.NSDictionary options) [0x00031] in /Users/jstarke/tmp/<Project_name>/AppDelegate.cs:23
at at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38
at <Project_name>.Application.Main (System.String[] args) [0x00000] in /Users/jstarke/tmp/<Project_name>/Main.cs:17
目前我的研究显示这几乎肯定是一个绑定问题。我对绑定还不是很了解,但我正在努力学习,并且非常感谢任何帮助或建议。再次强调,我正在使用的绑定可以在此处找到:https://github.com/sblom/monotouch-bindings/tree/master/Cordova/Binding