Аргумент вне допустимого диапазона, DialogViewController с включенным поиском

У меня есть DialogViewController с EnableSearch = true. Поиск работает нормально и отображает результаты в диалоговом окне. Если я перейду к элементу результата или к другой вкладке, А ЗАТЕМ вернусь на вкладку поиска и попытаюсь коснуться любого из элементов результатов поиска, я получаю «Аргумент вне допустимого диапазона. \nИмя параметра: индекс» в строке 463 в DialogViewController. .cs (элемент var = section.Elements [indexPath.Row];).

public class SearchView : DialogViewController
    {
        IFlickService _flickService;
        static IEnumerable<Flick> _flicks;

        public SearchView(IFlickService flickService) : base (UITableViewStyle.Grouped, null, true)
        {
            _flickService = flickService;
            _flicks = new List<Flick>();

            CreateUI();
        }

        public override void SearchButtonClicked (string text)
        {
            base.SearchButtonClicked (text);
            _flicks = _flickService.Search(text);
            CreateUI();         
        }

        void CreateUI()
        {
            EnableSearch = true;

            Root = new RootElement("Search For Flicks") {
                new Section(){
                    from f in _flicks
                    select (Element) new FlickElement(f, delegate { 
                        NavigationController.PushViewController(new FlickDetailView(_flickService, f), true);
                    })
                }
            };
        }   
    }

person Byron Sommardahl    schedule 21.08.2010    source источник


Ответы (1)


Ответ состоял в том, чтобы переопределить ViewWillAppear() и переместить вызов CreateUI() из конструктора в ViewWillAppear(). Мне также пришлось переместить EnableSearch = true обратно в конструктор, потому что он должен быть установлен перед ViewWillAppear().

person Byron Sommardahl    schedule 21.08.2010