1

我有一个在 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”的插座,只需将 File Owner 视图连接到设计器中的视图控件即可。正确的?

2) 尚未解决的主要问题是我收到异常“无法找到选择器 setXxxxx”,其中“xxxxx”是 UI 控件的出口名称。它开始发生在从基本视图控制器继承的 ViewControllers 中,但是一旦我开始更改其他普通 viewControllers,我就会得到相同类型的错误。有什么问题的任何提示?

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

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

非常感谢帮助,我想回到以前的工具集和单点触控,但我想一旦项目升级,就没有办法在不丢失现在完成的所有开发的情况下返回。

谢谢,佩德罗

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

编辑 2:如果我手动将 public 关键字添加到由 MonoTouch 在 Designer.cs 中生成的部分类和成员中,则选择器是在幕后生成的并且所有的工作。这表明随着从公共部分类到私有部分类的更改,绑定生成在 MonoTouch 5 中发生了变化,是设计还是错误?我会觉得很奇怪,现在不可能创建一个带有插座的视图控制器,子类它并且子视图控制器无法访问父类插座。

4

1 回答 1

4

1)在基础 UIViewController 类上确实有一个视图出口,它是一个 Objective-C 属性。在使用带有 MonoTouch 的 Interface Builder 3 时,IB 通常不允许连接到基本视图插座,因此许多用户在他们的自定义子类中创建了自己的插座。MonoDevelop 2.6 和更早的版本将这些自定义插座创建为 ivars(Objective-C 字段),显然 UIKit 运行时会将对象连接到插座的两个版本 - 自定义 ivar 和基本属性。MonoDevelop 2.8 将自定义出口生成为属性,这意味着冗余视图出口会遮蔽基本视图出口,因此永远不会设置基本视图出口,并且 UIKit 会不高兴。您可以通过删除多余的自定义视图插座来解决此问题 - MD 2.8.2 将自动执行此操作

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

3) 当您的应用程序在调试器中暂停时,UI 渲染不会更新,它将在下一次 mainloop 迭代时更新。

4) 不。

5)类的可访问性应该由用户类部分控制,而不是设计者类部分,所以你可以自由改变它。

于 2011-10-21T13:27:32.733 回答