MonoTouch:NSInvalidArgumentException原因: - [... tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例0x9940d70

时间:2011-11-26 19:23:31

标签: c# uitableview garbage-collection xamarin.ios uisearchbar

我知道有几个类似的问题已经问过,我经历了所有问题,但没有一个能解决我的问题。

我有一个简单的UIViewController,其顶部包含UISearchBarUITableView。这是基本代码:

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

我没有自定义委托。我不明白的是,当第一次加载此视图时,该表将填充有效列表。但是,在搜索框中输入一个字符后,会向表格发送一个新列表,然后崩溃。

1 个答案:

答案 0 :(得分:1)

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

有关详细信息,请参阅我的answer(及其链接),了解有关以下问题:Monotouch - UITableview Cell null reference exception