【发布时间】:2016-04-24 06:02:09
【问题描述】:
在我的 Xamarin Mac 项目中,我以编程方式设置了 NSTableView。我有一个用于列标题单元格的自定义 NSTableHeaderCell。由于某些原因,在某些机器上,它会抛出错误
Failed to marshal the Objective-C object 0x121f77e90 (type: XXXTableHeaderCell). Could not find an existing managed instance for this object, nor was it possible to create a new managed instance (because the type 'XXXTableHeaderCell' does not have a constructor that takes one IntPtr argument).
我知道如果您从 nib/xib 加载,这可能会被抛出,但我是在代码中构建的。我也知道,如果您的托管对象被 GC 处理,可能会发生这种情况,但是表视图应该保留标题单元格和列对象。
放入一个采用 IntPtr 的空构造函数似乎可以解决问题,但我担心它会创建一个新对象,而它应该使用已经存在的东西(或者至少应该仍然存在)。
我是否错过了如何保存这些内容?
【问题讨论】:
-
在没有看到任何代码的情况下很难提供帮助,但是是的,几乎总是该错误是由于没有托管对应物的 ObjC obj 导致的(得到了 GC 处理)。我会确保你的 XXXTableHeaderCell 在某处有一个类级别的引用。
-
为了排除这种情况,我确实为我的 NSTableView 子类中的每个列和标题单元格添加了类级对象。我仍在试图找出谁在调用 IntPtr 构造函数。它被调用了两次,但我有四列。我希望它被称为 4x 或没有……但是两个?不幸的是,我不能发布代码本身。我会尝试制作一个样本,但这会花费我无法节省的时间,而且这只发生在某些机器上。
标签: c# xamarin mono monomac xamarin.mac