为啥我的自定义 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.movieName.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 中为空?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在我的自定义 UIView 类中没有调用 init(frame: CGRect)?