在 tableview 中返回 1 行时应用程序崩溃

Posted

技术标签:

【中文标题】在 tableview 中返回 1 行时应用程序崩溃【英文标题】:Application crashing when returning 1 row in tableview 【发布时间】:2016-01-10 00:35:20 【问题描述】:

我有一个表格视图,其中填充了一个名为 json 的数组。如果 json 的长度为 0,我想在我的 tableview 中返回 1 行。

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  TableViewCell *cell = [self->tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
  NSDictionary *info = [json objectAtIndex:indexPath.row];
  //content is the name of label in the custom cell
  if ([json count]>0) 
    cell.content.text = [info objectForKey:@"message_text"];
  
  else
    cell.content.text = @"There are currently no messages. Please pull down to refresh";

  return cell;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
if([json count]>0)
    return [json count];
else
    return 1;


上面的代码导致我的应用程序崩溃,我不确定原因。为什么这不起作用,我该如何解决这个问题。 我收到以下错误:

* 由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:'* -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray'

【问题讨论】:

请发布您的cellForRowAtIndexPath 方法 我添加了 cellForRowAtIndexPath 方法@Andrew 【参考方案1】:

更改此代码:

NSDictionary *info = [json objectAtIndex:indexPath.row];
//content is the name of label in the custom cell
if ([json count]>0) 
  cell.content.text = [info objectForKey:@"message_text"];

else
   cell.content.text = @"There are currently no messages. Please pull down to refresh";

收件人:

//content is the name of label in the custom cell
if ([json count]>0) 
  NSDictionary *info = [json objectAtIndex:indexPath.row];
  cell.content.text = [info objectForKey:@"message_text"];

else
   cell.content.text = @"There are currently no messages. Please pull down to refresh";

希望对您有所帮助!

【讨论】:

是的。非常感谢。只是出于好奇,为什么会出现问题以及您提供的代码为什么有效。我只是想理解它。 您在检查代码之外获得了项目。当没有项目超出范围时,它会崩溃。

以上是关于在 tableview 中返回 1 行时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

当用户使用 UITableView 的后退按钮滚动到最后选定的行时

如何在 C# 中删除 TableView 中的行时从右到左单元格设置动画

iOS Swift 2 - 删除 tableView 行时出错

从 tableview 删除行时崩溃

单击tableview单元格行时如何推送新的viewcontroller?

tableView:didSelectRowAtIndexPath:在使用 setAllowsMultipleSelectionDuringEditing 时取消选择行时不会被调用