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;            
    }
}

我没有自定义委托。我不明白的是,当这个视图第一次加载时,表中填充了一个有效的列表。然而,当我在搜索框中输入一个字符后,一个新的列表被发送到表中,并且它崩溃了。

MonoTouch: NSInvalidArgumentException原因:tableView:numberOfRo

没有(托管)引用您在GetCell中创建的cell,一旦它从该方法返回。因此,垃圾收集器(GC)可以随时收集它。

有关更多详细信息,请参阅我的回答(及其链接)的问题:Monotouch - UITableview单元格null引用异常