自定义UITableViewCell中的属性未初始化为UISearchDisplayController的表

时间:2012-02-16 17:56:38

标签: objective-c ios interface-builder uisearchdisplaycontroller

我正在使用UISearchDisplayController,能够根据我从服务器检索的某些数据显示包含自定义单元格的表格。

首先,我在UIViewController中设置了UISearchDisplayController。

self.searchController = [[UISearchDisplayController alloc]
                             initWithSearchBar:self.mySearchBar contentsController:self];
        self.searchController.delegate = self;
        self.searchController.searchResultsDataSource = self;
        self.searchController.searchResultsDelegate = self;

我的UIViewController也实现了UISearchBarDelegate,因此我可以确定搜索何时开始。我设置了一个块,所以当我的api调用返回时,它会被调用,结果字典保存在self.searchResults属性中:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    // here we make the api call
    [api getSomeInfo:searchBar.text complete:^(NSDictionary *json) {

        self.searchResults = json;
        [self.searchController.searchResultsTableView reloadData];
    }];
}

现在,我遇到的问题是在我的UITableViewDataSource方法中,我返回自定义单元格。我的单元格被实例化,但它的IBOutlets永远不会被初始化,所以我无法正确设置它们的内容(文本,图像等):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if (tableView == self.searchController.searchResultsTableView) {

        cell = [tableView dequeueReusableCellWithIdentifier:@"SearchResultsCellIndentifier"];

        if (cell == nil) {
            cell = [[SearchResultsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }

        cell.customLabel.text = [self.searchResults objectForKey:@"customText"];  // cell exists but cell.customLabel is nil!!
    }

}

为什么内容为零?我的自定义单元格类中是否存在我应该设置内容的位置?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您的问题是您在创建单元格时使用了变量cellIdentifier,但在出列时使用了字符串常量。

只需总是重新创建一个单元格即可,但效率不高并导致重大内存泄漏。

首先应根据您所在的表视图以及所需的单元格类型设置cellIdentifier,然后使用该cellIdentifier出列,然后根据需要创建一个新的。