MonoTouch: NSInvalidArgumentException Причина: - [... tableView: numberOfRowsInSection:]: нераспознанный селектор отправлен в экземпляр 0x9940d70 - PullRequest
1 голос
/ 26 ноября 2011

Я понимаю, что уже было задано несколько похожих вопросов, и я прошел через все из них, но ни один из них не решил мою проблему.

У меня есть простой 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;            
    }
}

У меня нет специального делегата.Чего я не понимаю, так это того, что когда это представление загружается в первый раз, таблица заполняется допустимым списком.Однако после ввода символа в поле поиска в таблицу отправляется новый список, и он вылетает.

1 Ответ

1 голос
/ 26 ноября 2011

Нет (управляемой) ссылки на cell, который вы создаете в GetCell, как только он возвращается из метода. Таким образом, сборщик мусора (GC) может собирать его в любое время.

Подробнее см. Мой ответ (и его ссылки) на вопрос: Monotouch - исключение нулевой ссылки на ячейку UITableview

...