无法创建本机类型'NSObject'的实例

时间:2013-03-20 11:33:14

标签: ios xamarin.ios ios-simulator

执行下面的代码时出现此错误

无法创建本机类型“ NSObject ”的实例,可以通过将Class.ThrowOnInitFailure设置为false来忽略此条件

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

我仅针对最新的iOS 6模拟器出现此错误。 对于我的iOS 5设备,它按预期工作。

2 个答案:

答案 0 :(得分:6)

这是因为最近修改了Xamarin.iOS。

传统上,MonoTouch允许在没有本地对等体的情况下创建托管对象。然而,行为在类型之间是不一致的,并且在来自第三方库的类型的情况下,它将导致实例,如果使用这些实例,则很可能使进程因堆栈溢出而崩溃。因此,默认行为已更改:如果无法为托管对象创建本机对等方,则将引发异常。由于异常消息还提到此行为由值MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure控制 - 将其设置为false以返回旧行为。

在你的情况下你会得到异常,因为当没有相应的Objective-C类时,你试图创建一个UIAlertViewDelegate实例(因为UIAlertViewDelegate是Objective-C协议,而不是Objective-C类)

解决方案很简单,正如user1010710已经提到的那样,只需使用null代替new UIAlertViewDelegate()。结果是相同的:在以前版本的Xamarin.iOS中,最终会得到一个托管的UIAlertViewDelegate实例,其Handle是IntPtr.Zero - 并且IntPtr.Zero值将传递给本机构造函数。这正是您传递null时所发生的情况。

答案 1 :(得分:1)

试试这个:

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