3

以下のコードを実行すると、このエラーが発生します

ネイティブタイプ' NSObject 'のインスタンスの作成に失敗しました。Class.ThrowOnInitFailureをfalseに設定することで、この条件を無視できます。

    var alert=new UIAlertView("Error","Something missing !"
                              ,new UIAlertViewDelegate(),"OK",null);

このエラーは、最新のiOS6シミュレーターでのみ発生します。私のiOS5デバイスでは、期待どおりに動作します。

4

2 に答える 2

6

これは、Xamarin.iOSが最近変更されたためです。

従来、MonoTouchでは、ネイティブピアなしで管理対象オブジェクトを作成できました。ただし、動作はタイプ間で一貫性がなく、サードパーティライブラリのタイプの場合、インスタンスが使用されると、スタックオーバーフローでプロセスがクラッシュする可能性があります。そのため、デフォルトの動作が変更されました。管理対象オブジェクトに対してネイティブピアを作成できない場合、例外がスローされます。例外メッセージにも記載されているように、この動作は値MonoTouch.ObjCRuntime.Class.ThrowOnInitFailureによって制御されます。falseに設定すると、古い動作に戻ります。

あなたの場合、対応するObjective-CクラスがないときにUIAlertViewDelegateインスタンスを作成しようとしているため(Objective-CクラスではなくUIAlertViewDelegateObjective-Cプロトコルであるため)、例外が発生します。

user1010710がすでに述べたように、解決策は単純です。null代わりにを使用してnew UIAlertViewDelegate()ください。結果は同じです。以前のバージョンのXamarin.iOSでは、ハンドルがIntPtr.ZeroであるマネージドUIAlertViewDelegateインスタンスになり、そのIntPtr.Zero値がネイティブコンストラクターに渡されます。これは、パスしたときに起こることですnull

于 2013-03-20T13:28:36.213 に答える
1

これを試して:

var alert = new UIAlertView ("Error", "Something missing !", null, "OK");
于 2013-03-20T11:49:02.683 に答える