单触 5.2.13
我正在通过 MonoTouch 绑定使用本机 ObjectiveC 库。该库公开了一个视图控制器。一切正常,直到我子类化视图控制器。然后,我得到 NULL 引用异常或部分 UI 未显示。
我已阅读有关 btouch 工具和“-e”选项的问题。但据我所见,该选项不存在:
工具 /Developer/MonoTouch/usr/bin/btouch 使用参数开始执行:/d:DEBUG ApiDefinition.cs /s:StructsAndEnums.cs /tmpdir:obj/Debug/ios/ /sourceonly:obj/Debug/ios//sources。列表
子类(在这个例子中)没有添加任何功能,但使用它就足以打破绑定:
// Works.
var contr = new NativeController();
// Fails with various errors. Throws a NULL reference exception about some UIPopoverController being NULL, for instance.
public class SubclassedController : NativeController
{
public SubclassedController() : base()
{
}
}
var contr = new SubclassedController();
我发现将 [NullAllowed] 添加到属性解决了 NULL 引用异常。
本机控制器公开一个属性(nonatomic, strong) UIPopoverController *popoverController
。这被绑定为UIPopoverController PopoveController {get; set;}
- 在NullAllowed
这里添加解决了这个问题。
但现在我面临图像未显示的问题,并且没有明显的例外。
我认为这些问题也源于使用子类版本时某些内容为 NULL 的事实,但本机代码似乎对 NULL 做出反应并优雅地处理它。
这导致三个问题:
- 为什么使用子类化时行为不同?MonoTouch 正在做些什么来实现这一目标?在我使用派生类的情况下,为什么我会得到一个 NULL 引用?无论哪种情况,我都没有触及 UIPopoverController。
- 如果没有错误,我如何找出问题所在以及如何解决?
- 除了 NullAllowed 之外,还有什么需要注意的?