UISearchDisplayController在代码中创建时无法正常工作?

Nic*_*ord 7 iphone search objective-c uisearchbar uisearchdisplaycontroller

我正在使用标签栏应用程序,其中一个标签有一个连接到UISearchBar的UISearchDisplayController.它全部连接在NIB上并且正在工作.当我点击搜索栏时,"范围"和"取消"按钮会等等,搜索代理会正确更新结果表.

但是,我正在尝试在viewDidLoad消息中实现相同的代码而不是NIB,但是当我从NIB中删除搜索显示控制器并取消注释我的代码以在函数中创建相同的控制器时,它不起作用.就好像有一些基本的连接没有被创建,所以我的所有搜索委托功能都没有被调用.

这是我的工作搜索显示控制器的NIB版本.它连接到搜索栏,UINavigationController子类(MASearchController)和它的根视图被连接起来searchContentsController.

alt text http://img192.imageshack.us/img192/3050/screenshot20100307at304.png

现在这是您希望在代码中创建相同的内容,对吧?我正在做的是将UISearchBar留在NIB中,以便在代码中一次消除一块拼图.

// [MASearchController viewDidLoad]
UISearchDisplayController *searchController = [[[UISearchDisplayController alloc]
    initWithSearchBar:searchBar
    contentsController:[[self viewControllers] objectAtIndex:0]] autorelease];
[searchController setDelegate:self];
[searchController setSearchResultsDelegate:self];
[searchController setSearchResultsDataSource:self];
Run Code Online (Sandbox Code Playgroud)

我在运行时检查了所有对象,他们都检查了.基本上我已经从NIB中删除了搜索显示控制器,然后输入代码在viewDidLoad消息中创建它.

为什么这不起作用?搜索键盘出现但我的搜索和按钮动画功能都不起作用???

Nic*_*ord 9

哇,我刚才发现了问题.

我想,因为UIViewController的searchDisplayController属性是在initWithSearchBar中设置的:contentsController:message我仍然会自动发布我的指针副本,但是当我删除autorelease了愚蠢的东西开始工作.Gaaaah.为什么它不会保留自己的副本(UIViewController)?