MonoTouch: NSInvalidArgumentException原因:tableView:numberOfRo
本文关键字:numberOfRo tableView NSInvalidArgumentException MonoTouch 原因 | 更新日期: 2023-09-27 18:15:54
我知道有几个类似的问题已经被问过了,我把它们都问了一遍,但没有一个能解决我的问题。
我有一个简单的UIViewController
,它在顶部包含一个UISearchBar
和一个UITableView
。这是基本代码:
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
searchBar.TextChanged += delegate {
tableView.DataSource = new CodeSearchTableViewDataSource(searchBar.Text);
tableView.ReloadData();
};
tableView.DataSource = new CodeSearchTableViewDataSource(searchBar.Text);
}
public class CodeSearchTableViewDataSource : UITableViewDataSource
{
static NSString CELL_ID = new NSString("MYID");
public List<CodeItem> CodesFound { get; set; }
public CodeSearchTableViewDataSource()
{
}
public CodeSearchTableViewDataSource(string searchText)
{
CodesFound = CodeSearch.Instance.Find(searchText);
}
public override int RowsInSection (UITableView tableView, int section)
{
return CodesFound.Count;
}
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = tableView.DequeueReusableCell(CELL_ID);
if (cell == null)
cell = new UITableViewCell(UITableViewCellStyle.Default, CELL_ID);
cell.TextLabel.Text = CodesFound[indexPath.Row].Id + " " + CodesFound[indexPath.Row].Desc;
return cell;
}
}
我没有自定义委托。我不明白的是,当这个视图第一次加载时,表中填充了一个有效的列表。然而,当我在搜索框中输入一个字符后,一个新的列表被发送到表中,并且它崩溃了。
没有(托管)引用您在GetCell
中创建的cell
,一旦它从该方法返回。因此,垃圾收集器(GC)可以随时收集它。
有关更多详细信息,请参阅我的回答(及其链接)的问题:Monotouch - UITableview单元格null引用异常