2014-09-30 1 views
-1

Я использую Xamarin iOS.Почему UISearchDisplayController должен быть переменной класса?

В ViewDidLoad я инстанцировании мой UISearchBar, UISearchDisplayController, UISearchDisplayDelegate и UITableViewSource. Тем самым я использую переменную класса для UISearchDisplayController. Поскольку я использовал его только в ViewDidLoad, я переместил переменную класса для UISearchDisplayController в локальную переменную.

Теперь странные вещи произошли:

  • Поиск не работал больше. Независимо от моего ввода ничего не изменилось.
  • Также поисковая панель не перемещалась на панель навигации, поскольку это стандартное поведение.

Теперь я вернул свои изменения обратно, и он снова работает. Я проверил свой код и ничего не изменил.

Но почему я могу использовать UISearchDisplayController только как переменную класса?

Редактировать:

@class переменная:

namespace MyApp 
{ 
    partial class MyTableListController : UITableViewController 
    { 
     // class variable 
     private UISearchDisplayController searchController; 

     public MyTableListController (IntPtr handle) : base (handle) 
     { 
      // do some init 
     } 

     #region View lifecycle 

     public override void ViewDidLoad(){ 
      // .. 
     } 
    } 
} 

Кажется, что контроллер используется не только в ViewDidLoad и, следовательно, должны быть доступны в (например, переменной класса) весь класс.

+0

Что такое «переменная класса»? Почтовый код должен быть ясным. На некоторых языках это означает статическое поле. –

+0

@HenkHolterman: Я редактировал вопрос. – testing

+2

Ваша переменная _class_ официально называется _field_ в C#. –

ответ

2

Если вы сделаете контроллер поиска переменной метода, сборщик мусора может собрать его после завершения метода.

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

+0

Это не может быть весь ответ. –

+0

@HenkHolterman: Я не думаю, что я следую. Что вам не хватает? –

+0

Возможно, этот контроллер является специальным хамарином, но обычно вы не сможете его использовать (искать) без сохранения ссылки. –