Monotouch应用程序从其超级视图中删除tableView时崩溃

时间:2013-12-13 09:38:15

标签: ios xamarin.ios tableview

我有一个tableview,其中每个单元格都包含一个textview。 重现崩溃的步骤。


  1. 在第一行的文本视图中写一些内容(键盘已打开)
  2. 向下滚动tableview,第一行不再可见。但是,键盘仍处于打开状态
  3. 我选择另一个标签,在代码中我从其超级视图中删除包含tableview的视图,然后应用程序崩溃
  4. 这是堆栈跟踪

    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

    上复制

1 个答案:

答案 0 :(得分:0)

问题是我在UITableViewSource中创建的 UITableViewCells 正被托管垃圾收集器释放,因为当该方法退出时,它们不会从托管代码中引用。

有两种方法可以解决这个问题:

  • 在UITableViewSource类的类变量中保留您创建的单元格列表。这种方法的问题在于您需要额外的簿记才能在不再使用时从列表中删除单元格。

  • 创建UITableViewCell的自定义子类。在Xamarin.iOS中,自定义子类在运行时被区别对待,我们确保在释放相应的本机对象之前它们不会被释放:


class CustomCell : UITableViewCell
{
   public CustomCell(UITableViewCellStyle Style, string Identifier) : base(Style, Identifier) { }
}
相关问题