2010-08-21 2 views
1

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

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

ответ

1

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

Смежные вопросы