我有一个示例项目,在其中创建股票 TableView ,该 View 最终将使用一系列自定义 TableView 单元格。 TableView 的 Nib 包含定义了自定义 Controller (TrackingViewController) 的 View ,该 View 本身包含一个 TableView 作为 subview 。 Nib 还包含一个自定义 UITableViewCell,有一天我将在表格中使用它。然而,现在自定义单元格没有在任何地方被引用或使用;它只是存在于 Nib 内。
当应用程序尝试引用自定义 View Controller 的 View (即 TrackingViewController 实例的 View 属性)时,应用程序崩溃并显示消息“System.Exception:在类型为 Empty1 的托管对象上从 Objective-c 调用选择器” .SendDataRowCell (0xCFE4900) 已被GC'ed”。我还没有实例化可以调用任何选择器的 SendDataRowCell 类的任何实例,因此我不理解此消息。我没有将对任何自定义单元对象的引用传递给 Objective-C,因为我从未创建过任何自定义单元对象的引用。我什至还没有为表设置 UITableViewSource 实例。
这是界面生成器中我的 nib 文件的屏幕截图: http://i.imgur.com/wb5zDlp.png
这是包含示例项目的所有代码的要点,在该示例项目中,我能够在每次应用程序启动时一致地重现该问题。注意,这不是一个功能齐全的应用程序,也无意成为这样的应用程序;它的存在只是为了证明这个问题。 https://gist.github.com/cscibri/5437899
我正在 Windows 7 x64 上的 Visual Studio 2012 中构建此项目,我使用的是 Xamarin Studio 版本 4.0.4(构建 2),单点触控版本为 6.2.3.0 (8d98f5e)
最佳答案
您需要在 SendDataRowCell 类中创建一个采用 IntPtr 的构造函数:
SendDataRowCell (IntPtr handle)
: base (handle)
{
}
这是 iOS 实例化 SendDataRowCell 实例时将使用的构造函数。
关于c# - 如何修复这个来自 Nib 的 "Selector invoked ... on a managed object ... that has been GC' ed",其中包含未使用的自定义 UITableViewCell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16155880/