为啥我的自定义 UITableViewCell 在 cellForRowAtIndexPath 中为空?

Posted

技术标签:

【中文标题】为啥我的自定义 UITableViewCell 在 cellForRowAtIndexPath 中为空?【英文标题】:Why is my custom UITableViewCell null in cellForRowAtIndexPath?为什么我的自定义 UITableViewCell 在 cellForRowAtIndexPath 中为空? 【发布时间】:2014-02-25 04:08:08 【问题描述】:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    NSInteger numberOfRows = 0;
    if (self.tableView == tableView)
    
        numberOfRows = self.allMovies.count;
        NSLog(@"NRA:%d", self.allMovies.count);
    
    else
    
        [self filterPlayers];
        numberOfRows = self.filteredMovies.count;
        NSLog(@"NRF:%d", self.filteredMovies.count);
    

    return numberOfRows;


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

    static NSString *CellIdentifier = @"SearchAndAddMovieCell";
    FFFSearchAndAddMovieCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    
        NSLog(@"Cell is nil");
        cell = [[FFFSearchAndAddMovieCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        if (cell == nil)
            NSLog(@"Still NIL");
    

    Movie *movie;
    if (self.tableView == tableView)
    
        Movie *normalMovie = (Movie *)[self.allMovies objectAtIndex:indexPath.row];
        movie = normalMovie;
        NSLog(@"normal:%@", movie);
    
    else
    
        Movie *filteredMovie = [self.filteredMovies objectAtIndex:indexPath.row];
        movie = filteredMovie;
        NSLog(@"filter:%@", movie);
    

    NSLog(@"1:%@|%@", movie.name, cell.movieName.text);
    cell.movieName.text = movie.name;
    NSLog(@"2:%@|%@", movie.name, cell.movieName.text);
    cell.genre.text = movie.genre;

这完美地填充了我的初始电影列表。但是,当我在我的 UITableViewController 的 UISearchBar 中键入一个字符时,我没有得到任何结果,尽管在我的 NSLog 中看到了可能/应该是结果。有什么想法吗?

这是 LOG 输出...

2014-02-24 17:15:24.274 FantasyFeed[2367:60b] NRF:1
2014-02-24 17:15:24.278 FantasyFeed[2367:60b] Cell is nil
2014-02-24 17:15:24.281 FantasyFeed[2367:60b] filter:The Godfather
2014-02-24 17:15:24.283 FantasyFeed[2367:60b] 1:The Godfather|(null)
2014-02-24 17:15:24.286 FantasyFeed[2367:60b] 2:The Godfather|(null)

为什么 cell.movi​​eName.text 在这里一直为空?在我在 searchBar 中输入任何内容之前,LOG 看起来像这样......

2014-02-24 17:15:22.015 FantasyFeed[2367:60b] NRA:12
2014-02-24 17:15:22.021 FantasyFeed[2367:60b] normal:The Godfather
2014-02-24 17:15:22.023 FantasyFeed[2367:60b] 1:The Godfather|Label
2014-02-24 17:15:22.024 FantasyFeed[2367:60b] 2:The Godfather|The Godfather

这些是我很好奇的粗体字。正常运行将它们列为底部 2,但 searchBar 运行将它们列为顶部 2。

2014-02-24 17:15:24.283 FantasyFeed[2367:60b] 1:教父|(null)

2014-02-24 17:15:24.286 FantasyFeed[2367:60b] 2:教父|(null)

2014-02-24 17:15:22.023 FantasyFeed[2367:60b] 1:教父|标签

2014-02-24 17:15:22.024 FantasyFeed[2367:60b] 2:教父|教父

【问题讨论】:

【参考方案1】:

您的代码表明您有两个单独的表。我怀疑它们都在您的故事板文件中,并且其中一个具有标识符为 SearchAndAddMovieCell 的原型单元,而另一个则没有。

【讨论】:

嗯。我有一个 UITableViewController。在情节提要中,它的标识符是 SearchAndAddMovieCell。在此之上,我有一个搜索栏和搜索显示控制器。我猜它确实有它自己的 tableView ......但在 Storyboard 中似乎没有一个地方可以添加标识符。应该有吗?这就是我所缺少的吗? 我改变了 FFFSearchAndAddMovieCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];到 FFFSearchAndAddMovieCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];现在它可以工作了。我假设这应该没问题,因为结果表的单元格永远不会超过 self.tableView 的原始完整表,对吗?

以上是关于为啥我的自定义 UITableViewCell 在 cellForRowAtIndexPath 中为空?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的自定义 UITableViewCell 没有显示?

为啥我的自定义 UITableViewcell 没有显示?

为啥我的自定义单元格仅在用户移开手指时突出显示?

为啥在我的自定义 UIView 类中没有调用 init(frame: CGRect)?

如何阻止我的自定义 UITableViewCell backgroundImage 可拉伸?

我的自定义 UITableViewCell 表格单元格显示为项目的空白列表