我有一个tableview,其中每个单元格都包含一个textview。 重现崩溃的步骤。
这是堆栈跟踪
at (wrapper managed-to-native) MonoTouch.ObjCRuntime.Messaging.void_objc_msgSendSuper (intptr,intptr) <IL 0x00024, 0xffffffff>
at MonoTouch.UIKit.UIView.RemoveFromSuperview () [0x00031] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIView.g.cs:848`
我尝试使用相同的结果执行ResignFirstResponder。 此外,如果没有打开键盘,则没有崩溃
仅在 IOS 7
上复制答案 0 :(得分:0)
问题是我在UITableViewSource中创建的 UITableViewCells 正被托管垃圾收集器释放,因为当该方法退出时,它们不会从托管代码中引用。
有两种方法可以解决这个问题:
在UITableViewSource类的类变量中保留您创建的单元格列表。这种方法的问题在于您需要额外的簿记才能在不再使用时从列表中删除单元格。
创建UITableViewCell的自定义子类。在Xamarin.iOS中,自定义子类在运行时被区别对待,我们确保在释放相应的本机对象之前它们不会被释放:
class CustomCell : UITableViewCell
{
public CustomCell(UITableViewCellStyle Style, string Identifier) : base(Style, Identifier) { }
}