C# Monotouch绑定到Cordova时出现问题(NSInvalidArgumentException)
我正在构建一个应用程序,它将使用MonoTouch(Xamarin.iOS)和Cordova(PhoneGap)的组合。UI将主要使用Cordova制作,我们的业务逻辑将主要使用MonoTouch编写 我发现了一个,所以我知道这是可能的,作者添加了一个 不幸的是,当我试图使用绑定创建单视图项目时,我几乎立即遇到了问题。我使用提供的Cordova库中的make文件为此构建dll,并在名为C# Monotouch绑定到Cordova时出现问题(NSInvalidArgumentException),c#,ios,cordova,xamarin.ios,C#,Ios,Cordova,Xamarin.ios,我正在构建一个应用程序,它将使用MonoTouch(Xamarin.iOS)和Cordova(PhoneGap)的组合。UI将主要使用Cordova制作,我们的业务逻辑将主要使用MonoTouch编写 我发现了一个,所以我知道这是可能的,作者添加了一个 不幸的是,当我试图使用绑定创建单视图项目时,我几乎立即遇到了问题。我使用提供的Cordova库中的make文件为此构建dll,并在名为MyViewController的测试应用程序中的简单视图控制器中添加了ViewDidLoad方法。这是我的消息
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
<代码>单调基础.MULTULUCH异常:抛出Objy-C异常。名称:NSInvalidArgumentException原因:-[\uu nsFarray dictionaryWithLowercaseKeys]:发送到实例0xc892680的无法识别的选择器
at(包装器管理为本机)MonoTouch.ObjCRuntime.Messaging:IntPtr_objc_msgSend(IntPtr,IntPtr)
在CordovaIOS.CDVViewController..ctor()[0x00000]中:0
在/Users/jstarke/tmp//MyViewController.cs:32中的.MyViewController.ViewDidLoad()[0x00043]处
at(包装器管理为本机)MonoTouch.ObjCRuntime.Messaging:void_objc_msgSend(intptr,intptr)
在/Developer/MonoTouch/Source/MonoTouch/src/UIKit/UIWindow.g.cs:126中的MonoTouch.UIKit.UIWindow.makeyAndVisible()[0x00010]处
在AppCuff.FieldHebug启动(Mythouc.UIKIT.UIAPP APP,MyLuxC.Buffig.NS字典选项)[0x00331 ]中/用户/ JStKe/TMP//AppDealt.cs:23
at(包装器管理为本机)MonoTouch.UIKit.UIApplication:UIApplicationMain(int,string[],intptr,intptr)
在/Developer/MonoTouch/Source/MonoTouch/src/UIKit/UIApplication.Main中的MonoTouch.UIKit.UIApplication.Main(System.String[]args,System.String principalClassName,System.String delegateClassName)[0x0004c]
/Users/jstarke/tmp//Main.cs:17中的at.Application.Main(System.String[]args)[0x00000]
到目前为止,我对这个问题的研究表明,这几乎肯定是一个有约束力的问题。我对绑定的了解还不多,但我正在努力学习,如有任何帮助或建议,将不胜感激。重申一下,我正在使用的绑定可以从这里找到:根据它是一个链接器/加载程序问题
线程所指的链接已失效,但看起来这里也有文档:因此,尽管这很尴尬,我不得不承认,我认为这是一个PEBKAC(键盘和椅子之间存在问题)问题 我所遵循的教程()实际上是处理旧版本的Cordova,但作者提供的make文件实际上会拉下Cordova repo的头部来构建绑定 但事实上,这只是一个转移视线的问题,真正的问题是用户(我)的问题。我已经查看了Cordova的最新版本,并按照作者的指示使用它来设置一个示例项目,当我开始复制config.plist(它不在那里)时,我错误地认为它只是重命名为一个不同的名称,而是复制了该文件。当所有插件都不可用时,系统将因上述错误消息而崩溃
我相信它出现在Cordova 2.1中,但肯定是在2.3中,config.plist被删除,并被config.xml替换。绑定确实需要一些小的更新,但我不认为这会导致我的错误。谢谢Rolf。我看了一下文档“CordovaLib子项目”部分,第14点,正如您引用的线程所提到的。我有点困惑。这些说明似乎确实针对目标C子项目。你知道我想做一个单触式装订,对吗?我检查了该文档中引用的框架是否在LinkWith frameworks子句中,它们似乎很好。@JamieStarke:我知道您正试图为此创建一个Xamarin.iOS绑定,我的观点是其他人(使用纯Objective-C)也遇到了同样的问题,因此它不是Xamarin.iOS特定的。但是,您确实需要将Objective-C指令“移植”到Xamarin.iOS绑定中的等效方法中。也许首先尝试制作一个完整的Objective-C示例,然后再从那里开始?知道绑定必须有多具体吗。在浏览上述绑定时,我确实发现当前头中不再存在的引用方法和属性存在一些问题。也许这不是问题的全部,但可能会增加问题?@JamieStarke:我相信你也需要与PhoneGap链接(这是找不到的方法:)谢谢Rolf,我想我已经解决了问题。我抓取了一份Cordova 2.5的副本,显然是针对Cordova孵化器<1.9版本进行的绑定。当我尝试运行他们的make时,它会从repo中提取最新版本,并根据该版本进行构建,但从那时起,标题似乎已经更改,不再具有supportsOrientation,例如“()”。今天晚上我会试着写些东西。