3

MonoTouch (Xamarin.iOS) と Cordova (PhoneGap) の組み合わせを使用するアプリを作成しています。UI は主に Cordova で作成し、ビジネス ロジックは主に MonoTouch で記述します。

このシナリオを説明するガイドを見つけたので、これが可能であることがわかり、著者はmonotouch-bindings プロジェクトのフォークに Cordova Binding を追加しました。

残念ながら、バインディングを使用して単一ビュー プロジェクトを作成しようとすると、すぐに問題が発生し始めました。提供されている 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 にあります。

4

2 に答える 2

2

このスレッドによると、これはリンカー/ローダーの問題です。

スレッドが参照するリンクは無効になっていますが、ドキュメントもここで入手できるようです: http://docs.phonegap.com/en/1.9.0/guide_cordova-webview_ios.md.html

于 2013-03-06T21:53:27.490 に答える
1

これは恥ずかしいことですが、これは PEBKAC (キーボードと椅子の間に問題が存在する) の問題であると考えていることを認めなければなりません。

私がフォローしていたチュートリアル (ここ) は、実際には古いバージョンの Cordova を扱っていましたが、作成者が提供した make ファイルは、実際には Cordova リポジトリーのヘッドをプルダウンしてバインディングを構築していました。

しかし実際には、これはニシンであり、本当の問題はユーザー (私) の問題でした。私はCordovaの最新バージョンをチェックアウトし、それを使用して作成者の指示に従ってサンプルプロジェクトをセットアップしました.config.plist(そこにはありませんでした)をコピーするようになったとき、私は誤ってそれが別の名前に名前を変更し、代わりにそのファイルをコピーしました。どのプラグインも使用できない場合、上記のエラー メッセージが表示されてシステムがクラッシュしていました。

Cordova 2.1 にあったと思いますが、間違いなく 2.3 でした。config.plist は削除され、config.xml に置き換えられました。バインディングにはいくつかの小さな更新が必要でしたが、それがエラーの原因だったとは思いません。

于 2013-03-28T22:34:57.117 に答える