为什么UISearchDisplayController必须是类变量?
我使用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
使用,因此必须在整个类(例如类变量)可用。
如果您使搜索控制器成为方法变量,那么一旦方法结束,垃圾收集器就可以*地收集它。
只要它在使用中,您必须确保您保持对搜索控制器的引用。
这不能是整个答案。 – 2014-10-02 07:46:03
@亨克·霍特曼:我不认为我会追随。你错过了什么? – 2014-10-02 12:51:08
也许这个控制器是一个特殊的xamarin thingy,但通常你不能使用它(搜索)没有保留参考。 – 2014-10-03 06:47:43
“class variable”究竟是什么?邮政编码要清楚。在某些语言中,它意味着一个静态字段。 – 2014-09-30 11:13:27
@HenkHolterman:我编辑了这个问题。 – testing 2014-09-30 11:29:18
您的_class variable_在C#中被正式称为_field_。 – 2014-09-30 11:54:29