重新加载searchResultsTableView时自定义单元格错误

时间:2011-11-01 03:18:36

标签: ios uitableview ios5 xcode4.2 uisearchdisplaycontroller

单击此按钮 - [搜索]时,会出现弹出窗口。

如果我写下搜索字词并单击“搜索”按钮,则数据将填入NSMutableArray。

此搜索表使用“自定义单元格”。

我无法将“自定义单元格”与NSMutableArray中的数据结合使用。

重新加载'searchTableView'时会出错。

我该怎么办?请帮帮我!〜谢谢〜

[错误]

  

2011-10-31 20:56:52.915 TheBE [1207:10403] abcd   2011-10-31 20:56:53.158 TheBE [1207:10403] *断言失败 - [UISearchResultsTableView _createPreparedCellForGlobalRow:withIndexPath:],/ SourceCache / UIKit_Sim / UIKit-1912.3 /UITableView.m:6072   2011-10-31 20:56:53.159 TheBE [1207:10403] 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'UITableView dataSource必须从中返回一个单元格的tableView:的cellForRowAtIndexPath:”   * *第一次抛出调用堆栈:   (0x12a2052 0x1753d0a 0x124aa78 0xc712db 0x381ee3 0x382589 0x36ddfd 0x37c851 0x327322 0x12a3e72 0x29ba92d 0x29c4827 0x294afa7 0x294cea6 0x294c580 0x12769ce 0x120d670 0x11d94f6 0x11d8db4 0x11d8ccb 0x1fae879 0x1fae93e 0x2e8a9b 0x1d68 0x1cc5 0x1)



    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

         //****** custom cell *********/
        SearchContentCell *cell = (SearchContentCell *)[tableView dequeueReusableCellWithIdentifier:@"SearchCell"];

        [cell.contentLabel setLineBreakMode:UILineBreakModeWordWrap];
        [cell.contentLabel setMinimumFontSize:FONT_SIZE];
        [cell.contentLabel setNumberOfLines:0];
        [cell.contentLabel setFont:[UIFont systemFontOfSize:FONT_SIZE]];
        [cell.contentLabel setTag:1];     

        ....... 
        cell.verseLabel.text = @"Test2" ; 
        cell.contentLabel.text = @"test"; 
         .......

        return cell;   

    }
    -(void)mockSearch:(NSString*)searchString  
    {   
        [_data removeAllObjects];   
        [request setEntity:entityBible]; 
    //        
        //create predicate   
        NSString *wildcardedString = [NSString stringWithFormat:@"*%@*",searchString];  
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"content like %@", wildcardedString];

        [request setPredicate:predicate]; 

        NSError *error;
        NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
        if (mutableFetchResults == nil) {
            // Handle the error;
            NSLog(@"eerror");
        }

        _data = mutableFetchResults;

         [self.searchDisplayController.searchResultsTableView reloadData];  

    }
    -(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{

        [self mockSearch:searchBar.text]; 

    }

我认为错误部分:

  

[self.searchDisplayController.searchResultsTableView reloadData];

3 个答案:

答案 0 :(得分:3)

如果这确实是您的tableView:cellForRowAtIndexPath:方法的样子,那么如果dequeueReusableCellWithIdentifier:返回nil,则您错过了分配新单元格的部分。

答案 1 :(得分:0)

我有同样的错误。我认为这是因为调整某些按钮属性意味着需要设置视图(显然是懒洋洋地创建),这意味着表需要准备就绪,而且还没有,可能是因为它的数据源尚未连接或者其他的东西。尝试稍后在viewDidLoad方法中将按钮调整移动到以后;这对我有用。

(另见UITableView getting Initialized in the middle of viewDidLoad?,其中我发布了相同的答案。)

答案 2 :(得分:0)

故事板中的自定义单元格,而不是“self.searchDisplayController.searchResultsTableView”,所以只需更改:

SearchContentCell * cell =(SearchContentCell *)[ - > tableView< - dequeueReusableCellWithIdentifier:@“SearchCell”];

SearchContentCell * cell =(SearchContentCell *)[ - > self.tableView< - dequeueReusableCellWithIdentifier:@“SearchCell”];