我正在使用 MonoTouch 并创建了一个扩展 UIButton 的 MyButton 类。这实际上是我在使用自定义 UIScrollView时遇到的相同问题的简化示例。MyButton 扩展了 UIButton 并添加了一些方法来做一些简单的事情,比如增加和减少一个计数器(这只是一个测试用例)。我还在我的类定义之前包含了 '[Register("MyButton")]',以便它向 Interface Builder (IB) 注册,这样我就可以添加一个 UIButton 并将其类指定为 MyButton。
工作原理: 我可以以编程方式将 MyButton 的实例添加到我的主视图中,它可以正确显示并按预期运行。
什么不起作用: 如果我尝试从 IB 添加 UIButton 并将其类指定为 MyButton,然后添加一个插座并指定它是 MyButton 类型,则我的应用程序在尝试加载主视图时崩溃,但异常:未处理托管异常:从objective-c 在已被GC'ed (System.Exception) 的iOSCustomUIView.MyButton (0xC2F40D0) 类型的托管对象上调用选择器。
我发现类似的问题有这个问题,但视图控制器,而不是视图。所以我知道错误是相似的,但是在将新控制器推入堆栈等时视图控制器引用丢失的情况。就我而言,我不知道为什么我的对象在任何事情发生之前就已经被 GC加载。
我尝试创建额外的私有成员变量来引用我的 MyButton 插座(btnIncrement),但这没有帮助。我设置断点并在尝试实例化我的视图控制器的新实例时发生崩溃:(来自 AppDelegate.cs)
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
window = new UIWindow (UIScreen.MainScreen.Bounds);
viewController = new iOSCustomUIViewViewController ();
window.RootViewController = viewController;
window.MakeKeyAndVisible ();
return true;
}
为了定义自定义 UIButton 类并在 IB 中使用它,我有什么遗漏吗?这是 MonoTouch 中的错误吗?