cellForRowAtIndexPath返回nil

我试图从表视图中获取特定的单元格,以便我可以更改它的标签并停止活动指示器。

我遇到的问题是cellForRowAtIndexPath返回零。

我的表格视图只有1行。

代码:

 - (id) initWithNibName: (NSString*) nibNameOrNil bundle: (NSBundle*) nibBundleOrNil { self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil]; if (self) { numberOfRows = 1; } return self; } - (NSInteger) tableView: (UITableView*) tableView numberOfRowsInSection: (NSInteger) section { return numberOfRows; } -(void) stopCellIndicator { LiveUserFeedCell* cell = (LiveUserFeedCell*)[self.liveFeed cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; [cell.activityIndicator stopAnimating]; cell.middleLabel.text = @"N/a"; } - (UITableViewCell*) tableView: (UITableView*) tableView cellForRowAtIndexPath: (NSIndexPath*) indexPath { static NSString *CellIdentifier = @"UserFeedCell"; LiveUserFeedCell *cell = (LiveUserFeedCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"LiveUserFeedCell" owner:self options:nil]; cell = (LiveUserFeedCell *)[nib objectAtIndex:0]; } [cell.imgView setImage:[TUNinePatchCache imageOfSize:cell.imgView.frame.size forNinePatchNamed:@"bg_home_newsfeed_normal"]]; if (shouldDisplayLoading == NO) { NSArray* songs = homeScreen.recentPlaybacks.songs; TWSong* song = [songs objectAtIndex:index]; cell.middleLabel.text = @""; [cell.activityIndicator stopAnimating]; UIFont *font = [UIFont fontWithName:@"Trebuchet MS" size:14]; NSString* kText =[NSString stringWithFormat:@"<b>%@</b> is listening to %@ by %@",song.user,song.title,song.artist]; for(int i = 14; i > 0; i=i-1) { // Set the new font size. font = [font fontWithSize:i]; // You can log the size you're trying: NSLog(@"Trying size: %u", i); /* This step is important: We make a constraint box using only the fixed WIDTH of the UILabel. The height will be checked later. */ CGSize constraintSize = CGSizeMake(cell.isWatching.frame.size.width, MAXFLOAT); // This step checks how tall the label would be with the desired font. CGSize labelSize = [kText sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; /* Here is where you use the height requirement! Set the value in the if statement to the height of your UILabel If the label fits into your required height, it will break the loop and use that font size. */ if(labelSize.height <= cell.isWatching.frame.size.height) break; } cell.isWatching.font = font; cell.isWatching.text = [TTStyledText textFromXHTML:kText lineBreaks:YES URLs:YES]; cell.isWatching.textAlignment = UITextAlignmentCenter; ++index; if (index == [songs count]) index=0; } else { [cell.activityIndicator startAnimating]; } return cell; } 

但是,如果我这样做,我得到一个有效的单元格:

 NSArray *indexPaths = [NSArray arrayWithObjects: [NSIndexPath indexPathForRow:0 inSection:0], nil]; numberOfRows = 0; [self.liveFeed deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft]; numberOfRows = 1; [self.liveFeed insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight]; LiveUserFeedCell* cell = (LiveUserFeedCell*)[self.liveFeed cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; [cell.activityIndicator stopAnimating]; cell.middleLabel.text = @"N/a"; 

任何想法如何解决这个问题? (也许默认的第一个单元格不在0行第0行?)

值得一提的是,如果单元格不可见,cellForRowAtIndexPath:也会返回nil。

在线程中,这可能尤其成为一个问题。

我有cellForRowAtIndexPath返回零和它的原因是,我是在UITableView不能完全初始化和填充的方法调用它。 一旦我把我的调用cellForRowAtIndexPath-(void)viewDidAppear:(BOOL)animated然后我的细胞正确返回。

我遇到了同样的问题,cellForRowAtIndexPath返回零,并出于愚蠢的原因。 在tableView:cellForRowAtIndexPath:我调用了一个调用[self.tableView cellForRowAtIndexPath:indexPath] 。 (重用现有代码,并向下游移动一些逻辑。)

事实certificate, cellForRowAtIndexPath:还没有可用cellForRowAtIndexPath:返回。 你或者需要做所有的事情修改tableView:cellForRowAtIndexPath:的单元格,或者,我猜,一起传递*cell

我和你的情况非常相似,但是我通过调用“super”函数而不是self.tableView来解决这个问题。 我不知道为什么,但至less起作用。 也许你可以尝试。

 [super tableView:self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 

你已经解决了这个问题,虽然我面临类似的情况,所以我已经做了我向你展示:

 NSArray *cells = [contactsTable visibleCells]; UITableViewCell *cell = nil; NSIndexPath *path = [param objectAtIndex:1]; for (UITableViewCell *aCell in cells) { NSIndexPath *aPath = [contactsTable indexPathForCell:aCell]; if ([aPath isEqual:path]) { cell = aCell; } } 

奇怪,但经过数小时的试验和错误后,工作良好。

尝试使用:

 [self.livFeed beginUpdates]; LiveUserFeedCell* cell = (LiveUserFeedCell*)[self.liveFeed cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; [cell.activityIndicator stopAnimating]; cell.middleLabel.text = @"N/a"; [self.liveFeed endUpdates]; 

苹果UITableView文档

显然问题是,当我查询单元格时,tableView没有被configuration。

尝试覆写:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; }