【问题标题】:numberOfRowsInSection: not called on reloadDatanumberOfRowsInSection:未在 reloadData 上调用
【发布时间】:2012-07-13 10:46:16
【问题描述】:

我有一个UITableView,它使用数组来列出数据。这工作正常。 我还有一个UISearchBar 用于在那个tableview 中搜索。当 tableviews 数组中的数据匹配时,这些行被添加到另一个可变数组中,cellForRowAtIndexPath: 显示来自该可变数组的数据。

但是当我调用 reloadData 时,永远不会调用 numberOfRowsInSection:。因此,tableview 在滚动时崩溃,因为它试图从可变数组中获取数据,但是对于原始数组中的行(其中包含更多项)

我已经调试了很长时间,但看在上帝的份上,找不到原因。 Datasource 和 Delegate 在tableview 中挂钩,因为它可以显示原始数组中的数据。

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
         NSLog(@"isSearching: %d", isSearching);
         // Return the number of rows in the section.
         if(!isSearching)
            return [originalArray count];

         NSLog(@"isSearching - Return searchCopyListOfItems");
         return [searchCopyListOfItems count];
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
         static NSString *CellIdentifier = @"Cell";
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

         if(cell == nil) {
             cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
         }

         if(!searching)
             cell.textLabel.text = [originalArray objectAtIndex:indexPath.row];
         else
             cell.textLabel.text = [searchCopyListOfItems objectAtIndex:indexPath.row];

         return cell;
    }

【问题讨论】:

  • 重新加载时检查表是否有内存..

标签: iphone objective-c uitableview


【解决方案1】:

如果numberOfSections 返回0,则不会调用numberOfRowsInSection

【讨论】:

  • 这是给我的! TYVM
【解决方案2】:

确保不要从任何表视图的委托方法中调用reloadData。这将导致不可预测的行为。另外,请确保您之前没有调用过beginUpdates,并且您只在主线程中调用了您的reloadData 方法。

【讨论】:

  • 感谢有关beginUpdates的提示!
【解决方案3】:

你如何重新加载你的表? 做[table relaodData]; 对吗? 您的桌子是否连接到您笔尖上的 IBOutlet? 在重新加载时,table 是否已初始化?

您也可以发布崩溃信息。

【讨论】:

  • 感谢您的提示。不知何故,IB 已将 IBOutlet 与 xib 中的 UITableView 断开连接。我没有注意到它没有连接,因为原始数据显示成功。然而,事后看来,我意识到这不是因为引用出口,而是因为委托和数据源连接
  • 我犯了同样的错误,我忘记将数据源出口连接到视图控制器。
【解决方案4】:

我今天在使用 XCode 6.1 时遇到了同样的问题

在我的代码中,我设置了 dataSourcedelegate

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.tableView.dataSource = self;
    self.tableView.delegate = self;
}

...奇怪的是,我的代码在第一次加载时填充表格...但随后它忽略了对reloadData的任何调用。

在情节提要中,当我右键单击情节提要中的表格视图时,它的“出口”单选按钮是一个空圆圈。

我从这个空圆圈拖了一条线到父UIView,然后然后reloadData 工作正常。

不知何故,我丢失了 UITableView 控件和用于填充它的 .h/.m 文件之间的 IBOutlet 链接。

【讨论】:

    【解决方案5】:

    还要确保您在重新加载数据的过程中没有移动表,因为它可能会在您仍在更新数据时调用cellForRowAtIndexPath:

    【讨论】:

      【解决方案6】:

      对我来说问题是,被截断的节数返回 0,即使我不打算使用节,也必须有 1,因为它在对象层次结构中高于行:https://stackoverflow.com/a/26632808/1449799

      【讨论】:

        【解决方案7】:

        对我来说,问题是我试图增加一个值numberOfSectionsInTableView返回它

        return someValue++

        显然这是不可能的,在我的例子中,它没有将 someValue 从 0 增加到 1,因此返回 0 个部分,因此没有理由调用 numberOfRowsInSection:

        【讨论】:

          【解决方案8】:

          我的解决方案是我从另一个笔尖复制粘贴它,忘记重新连接 IB 中的 dataSourcedelegate 插座。我以前也遇到过这种情况,但我想我会把它贴在这里,以防这个解决方案帮助一些遇到这个问题的人。

          【讨论】:

            【解决方案9】:

            试试

            [self.tableView reloadData];
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-06-21
              • 1970-01-01
              • 2021-07-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多