我正在构建一个将使用MonoTouch(Xamarin.iOS)和Cordova(PhoneGap)组合的应用。 UI主要使用Cordova制作,我们的业务逻辑主要使用MonoTouch编写。
我找到了guide that describes this scenario,所以我知道这是可能的,并且作者添加了Cordova Binding to their fork of the monotouch-bindings project。
不幸的是,当我尝试使用绑定创建单个视图项目时,我几乎立即开始遇到问题。我使用提供的Cordova库中的make文件为此构建了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
答案 0 :(得分:2)
根据this thread,这是一个链接器/加载器问题。
线程引用的链接已经死了,但看起来文档也可以在这里找到:http://docs.phonegap.com/en/1.9.0/guide_cordova-webview_ios.md.html
答案 1 :(得分:1)
因为这样的尴尬,我不得不承认我认为这是一个PEBKAC(键盘和椅子之间存在的问题)问题。
我正在关注的教程(here)实际上是在处理旧版本的Cordova,但作者提供的make文件实际上会拉低Cordova repo的头部来构建绑定。
但实际上,这是一个红色的鲱鱼,真正的问题是用户(我)的问题。我查看了最新版本的Cordova,并根据作者的指示使用它来设置一个示例项目,当我复制config.plist(它不在那里)时,我误以为它是只是重命名为另一个名称,而是复制该文件。当没有任何插件可用时,系统将因上述错误消息而崩溃。
我相信它是在Cordova 2.1中,但它肯定是2.3,config.plist被删除,并替换为config.xml。绑定确实需要一些小的更新,但我不相信这会导致我的错误。