Monotouch绑定Cordova的问题(NSInvalidArgumentException)

本文关键字:NSInvalidArgumentException 问题 绑定 Cordova Monotouch | 更新日期: 2023-09-27 18:02:32

我正在构建一个应用程序,将使用MonoTouch (Xamarin.iOS)和Cordova (PhoneGap)的组合。UI将主要使用Cordova,我们的业务逻辑将主要用MonoTouch编写。

我找到了一个描述这个场景的指南,所以我知道这是可能的,作者已经在monotouch-bindings项目的分支中添加了一个Cordova Binding。

不幸的是,当我尝试使用绑定创建单个视图项目时,我几乎立即就遇到了问题。我使用提供的Cordova库中的make文件为此构建dll,并在我的测试应用程序中名为MyViewController的简单视图控制器中添加了ViewDidLoad方法。这是我的来源

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

Monotouch绑定Cordova的问题(NSInvalidArgumentException)

根据这个线程,这是一个链接器/加载器问题。

该线程引用的链接是死的,但它看起来像文档也可以在这里:http://docs.phonegap.com/en/1.9.0/guide_cordova-webview_ios.md.html

尽管这很尴尬,但我不得不承认,我认为这是一个PEBKAC(键盘和椅子之间存在问题)问题。

我所遵循的教程(这里)实际上是在处理一个旧版本的Cordova,但是作者提供的make文件实际上会拉下Cordova repo的头来构建绑定。

实际上,这是一个转移注意力的问题,真正的问题是用户(我)的问题。我已经查看了最新版本的Cordova,并按照作者的说明使用它来设置一个示例项目,当我复制配置时。plist(不在那里),我错误地认为它只是重命名为不同的名称,并复制了该文件。当所有插件都不可用时,系统将崩溃并显示上述错误消息。

我相信它是在Cordova 2.1,但它肯定是在2.3,配置。Plist被删除,取而代之的是config.xml。绑定确实需要一些小的更新,但我不认为这是导致我的错误的原因。

相关文章:
  • 没有找到相关文章