2011-10-20 11 views
1

Xcode 3.2.6/MonoTouch 4.2.x/MonoDevelop 2.6で開発中のiPadプロジェクトがあり、 Monotouch 5、MonoDevelop 2.8.1、Xcode 4.2のプロジェクトをコンパイルしてOKを実行します。しかし、Xcode 4.2(コンセントを追加する)でXIBファイルを変更し始めたとき、私はいくつかの不具合が発生し始めました:MonoTouch 5エラー:Xcode 4.2とMonoDevelop 2.8に移行した後、「セレクタsetXxxxxxを見つけられませんでした」

1)アプリケーションがクラッシュし、デバッグモードのMonoDevelopに、ビューアウトレットが設定されていないため、 。 Xcode 4.2では、.hファイルに "view"という名前のコンセントを作成する必要はなく、デザイナーのビューコントロールにFile Ownerビューを接続するだけでよいことがわかりました。正しい?

2)主な問題はまだ解決されていません。「セレクタsetXxxxxを見つけられませんでした」という例外があります。「xxxxx」はUIコントロールのコンセントの名前です。これは、ベースビューコントローラから継承したViewControllerで発生し始めましたが、他の通常のViewControllerを変更するとすぐに、同じタイプのエラーが発生しました。何が間違っているかのヒント?

3)私は動的にいくつかのビューをロードし、それは正常に動作するコントローラがあります。しかし、このサブビューアウトレットの1つ(UILabelのTextのような)にプロパティを設定すると、値は(デバッガ上で)設定されますが、UIでは変更されません。たとえば、アクションは正常に動作します。何が間違っているかもしれない。

4)Xcode 4.2でMonoDevelop 2.8と正しく統合するために必要なXIBの特別な設定は何ですか?

以前のツールとモノトゥッチの設定に戻ってみましたが、プロジェクトがアップグレードされたら、今行ったすべての開発を失うことなく元に戻ることはできません。

おかげで、ペドロ

EDIT:(以前に生成されたコードの多くを置き換える)MonoTouchで5によって生成された新しいクリーン帰属[アウトレット]コードのほかに、有意な差は部分クラスを生成する前には、公共だったということです今はプライベートですが、これは私の問題の原因かもしれません。パブリック部分クラスを生成する方法や保護する方法はありますか?

EDIT 2:partialクラスにpublicキーワードを追加し、designer.csのMonoTouchによって生成されたメンバーを手動で追加すると、セレクタがシーンの裏に生成され、すべて動作します。これは、MonoTouch 5でバインドの世代が変更されたpublicからprivate部分クラスへの変更で、設計上またはバグか?私はそれが非常に奇妙なことが今アウトレット、サブクラスを持つviewcontrollerを作成することは不可能で、子ビューコントローラは親クラスアウトレットにアクセスすることができないことがわかります。

+0

Xamarinみんな、何か手がかり?私はいくつかのアウトレットを持っているViewControllerを持っていて、いくつかのパブリックプロパティ(get; set;)を使用してこれらのアウトレットを設定していますが、継承されたViewControllerクラスはこれらのアウトレットに対してselectoresを生成していないようです。任意の設定が必要ですか? –

答えて

4

1)実際には、Objective-CプロパティーであるUIViewControllerベースのビューアウトレットがあります。 MonoTouchでInterface Builder 3を使用すると、多くのユーザーが独自のカスタムサブクラスで独自に作成したので、IBは基本ビューアウトレットへの接続を許可しないことがよくありました。 MonoDevelop 2.6以前のバージョンでは、これらのカスタムアウトレットがivars(Objective-Cフィールド)として作成され、UIKitランタイムはオブジェクトをコンセントの両方のバージョン(カスタムivarとベースプロパティの両方)に接続します。 MonoDevelop 2.8はカスタムアウトレットをプロパティとして生成します。つまり、冗長ビューコンセントがベースビューアウトレットをシャドウし、ベースビューアウトレットが決して設定されず、UIKitが不幸になります。これを修正するには、冗長カスタムビューアウトレット(MD 2.8.2はdo this automatically)を削除します。

2)MonoTouchがカスタムコンセントをエクスポートして、基本クラスで定義されたカスタムアウトレットに接続できないようなバグであると思われます。可能な回避策はbug reportに記載されています。

3)アプリケーションがデバッガで一時停止中にUIレンダリングが更新されず、次のメインループの繰り返しで更新されます。

4)

5)クラスのアクセシビリティは、デザイナークラスの部分ではなく、ユーザークラスの部分で制御する必要があります。自由に変更することができます。

+0

Thanks Michael:(1)確認済みです。 (2)MTのバグであるため、バグレポートに記述されている回避策は、保護された宣言ではなく、宣言をpublicにすると機能します。 **(3)まだ動作していない、コンセントを操作することはUIに反映されず(ビューは動的にロードされ、ビューコントローラのビューに追加されます)、デバッガとは何も関係ありません。**(4)および(5)もう一度素早くサポートしてくれてありがとう。 –

+2

ああ、私は誤解していました(3)、私はあなたがデバッガ内から値を設定していると思っていました。私はこのような問題を思い出さず、調査するためにはもっと具体的なものが必要です。最小限のテストケースを作成してバグレポートに添付してください。 –

+0

遅れてマイケルのために残念、追いついていた。私が今追加したviewcontrollerにビュー自体を接続するコンセントはなく、動的にロードされたビュー内のコントロールへのコンセントが入る前に、問題3が解決されました。不思議なことに、コントロールの値を取得して設定することはできましたが、UIの変更は反映されませんでした。私はこれが設計によるのか、別のやり方で行動すべきかはわかりません。 –

関連する問題