2014-09-30 143 views
-1

我使用Xamarin iOS。为什么UISearchDisplayController必须是类变量?

ViewDidLoad我实例化我UISearchBarUISearchDisplayControllerUISearchDisplayDelegateUITableViewSource。因此我使用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

“class variable”究竟是什么?邮政编码要清楚。在某些语言中,它意味着一个静态字段。 – 2014-09-30 11:13:27

+0

@HenkHolterman:我编辑了这个问题。 – testing 2014-09-30 11:29:18

+2

您的_class variable_在C#中被正式称为_field_。 – 2014-09-30 11:54:29

回答

2

如果您使搜索控制器成为方法变量,那么一旦方法结束,垃圾收集器就可以自由地收集它。

只要它在使用中,您必须确保您保持对搜索控制器的引用。

+0

这不能是整个答案。 – 2014-10-02 07:46:03

+0

@亨克·霍特曼:我不认为我会追随。你错过了什么? – 2014-10-02 12:51:08

+0

也许这个控制器是一个特殊的xamarin thingy,但通常你不能使用它(搜索)没有保留参考。 – 2014-10-03 06:47:43

相关问题