Xamarin.ios MonoTouch 5错误:“;未能找到选择器setXxxxxx";在迁移到Xcode 4.2和MonoDevelop 2.8之后

Xamarin.ios MonoTouch 5错误:“;未能找到选择器setXxxxxx";在迁移到Xcode 4.2和MonoDevelop 2.8之后,xamarin.ios,selector,monodevelop,xcode4.2,outlet,Xamarin.ios,Selector,Monodevelop,Xcode4.2,Outlet,我有一个正在Xcode 3.2.6/MonoTouch 4.2.x/MonoDevelop 2.6中开发的iPad项目,当我安装MonoTouch 5、MonoDevelop 2.8.1和Xcode 4.2时,项目编译并运行正常。但当我开始更改Xcode 4.2中的XIB文件(添加插座)时,我开始出现一些小故障: 1) 处于调试模式的应用程序崩溃和MonoDevelop表示未加载视图,因为未设置视图出口。我发现在Xcode 4.2中,不需要在.h文件中创建名为“view”的出口,只需要将文件所有

我有一个正在Xcode 3.2.6/MonoTouch 4.2.x/MonoDevelop 2.6中开发的iPad项目,当我安装MonoTouch 5、MonoDevelop 2.8.1和Xcode 4.2时,项目编译并运行正常。但当我开始更改Xcode 4.2中的XIB文件(添加插座)时,我开始出现一些小故障:

1) 处于调试模式的应用程序崩溃和MonoDevelop表示未加载视图,因为未设置视图出口。我发现在Xcode 4.2中,不需要在.h文件中创建名为“view”的出口,只需要将文件所有者视图连接到设计器中的视图控件。对吗

2)主要问题是,我遇到异常“未能找到选择器setXxxxx”,其中“xxxxx”是UI控件的出口名称,目前尚未解决。它开始出现在继承自基本视图控制器的ViewController中,但当我开始更改其他普通ViewController时,我会收到相同类型的错误。有什么问题吗?

3) 我有一个控制器,可以动态加载一些视图,并且工作正常。但是,当我在其中一个子视图上设置属性(如UILabel的文本)时,该值已设置(在调试器上),但UI中没有更改。例如,这些操作可以很好地工作。可能有什么问题

4) 为了正确使用Xcode 4.2与MonoDevelop 2.8集成,需要在XIB中进行任何特殊设置

帮助是非常感谢的,我想回到以前的工具集和monotouch,但我想一旦项目升级,就没有办法不失去现在完成的所有开发

谢谢,佩德罗

编辑:除了MonoTouch 5生成的新的干净属性[Outlet]代码(替换以前生成的大量代码)之外,显著的区别在于,生成的部分类之前是公共的,现在是私有的,这可能是我问题的根源。是否有方法生成公共分部类或受保护分部类

编辑2:如果我在designer.cs中手动将public关键字添加到由MonoTouch生成的分部类和成员中,则选择器将在后台生成,并且所有工作都将完成。这表明,随着从public部分类到private部分类的更改,绑定的生成在MonoTouch 5中发生了更改,是设计还是bug?我会发现非常奇怪的是,现在不可能创建一个带有outlets的viewcontroller,它是子类,并且子viewcontroller无法访问父类outlets。

1)基本UIViewController类上确实有一个视图outlets,这是Objective-C属性。将Interface Builder 3与MonoTouch一起使用时,IB通常不允许连接到基本视图出口,因此许多用户在其自定义子类中创建了自己的接口。MonoDevelop 2.6及更早版本将这些自定义出口创建为ivar(Objective-C字段),显然UIKit运行时会将对象连接到出口的两个版本——自定义ivar和基本属性。MonoDevelop 2.8将自定义插座生成为属性,这意味着冗余视图插座会遮挡基本视图插座,因此基本视图插座永远不会设置,UIKit也会不满意。您可以通过删除冗余的自定义视图插座来修复此问题-MD 2.8.2将继续

2) 这似乎是MonoTouch导出自定义插座的方式的一个缺陷,它阻止连接到基类中定义的自定义插座。上提到了一种可能的解决方法

3) 当应用程序在调试器中暂停时,UI呈现不会更新,它将在下一次主循环迭代中更新

4) 没有

5) 类的可访问性应该由用户类部分控制,而不是由设计器类部分控制,因此您可以自由更改它。

1)基本UIViewController类上确实有一个视图出口,它是Objective-C属性。将Interface Builder 3与MonoTouch一起使用时,IB通常不允许连接到基本视图出口,因此许多用户在其自定义子类中创建了自己的接口。MonoDevelop 2.6及更早版本将这些自定义出口创建为ivar(Objective-C字段),显然UIKit运行时会将对象连接到出口的两个版本——自定义ivar和基本属性。MonoDevelop 2.8将自定义插座生成为属性,这意味着冗余视图插座会遮挡基本视图插座,因此基本视图插座永远不会设置,UIKit也会不满意。您可以通过删除冗余的自定义视图插座来修复此问题-MD 2.8.2将继续

2) 这似乎是MonoTouch导出自定义插座的方式的一个缺陷,它阻止连接到基类中定义的自定义插座。上提到了一种可能的解决方法

3) 当应用程序在调试器中暂停时,UI呈现不会更新,它将在下一次主循环迭代中更新

4) 没有


5) 类的可访问性应该由用户类部分控制,而不是设计器类部分,因此您可以自由更改它。

Xamarin伙计们,有什么线索吗?我有一个ViewController,它有一些插座,我像往常一样在class.cs中使用一些公共属性(get;set;)设置这些插座,但是继承的ViewController类似乎没有为这些插座生成选择器。需要配置吗?Xamarin的人,有线索吗?我有一个ViewController,它有一些插座,我像往常一样在class.cs中使用一些公共属性(get;set;)设置这些插座,但是继承的ViewController类似乎没有为这些插座生成选择器。需要配置吗?谢谢Michael:(1)确认。(2) 作为一个MT bug,如果我公开声明而不是保护声明,那么bug报告中描述的解决方法就可以了,目前还可以。(3) 仍然不起作用,对插座的操作没有反映在UI中(视图是动态加载的,并且是ad)