numberOfRowsInSection:未在 reloadData 上调用

Posted

技术标签:

【中文标题】numberOfRowsInSection:未在 reloadData 上调用【英文标题】:numberOfRowsInSection: not called on 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;
    

【问题讨论】:

重新加载时检查表是否有内存.. 【参考方案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://***.com/a/26632808/1449799

【讨论】:

【参考方案7】:

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

return someValue++

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

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

试试

[self.tableView reloadData];

【讨论】:

以上是关于numberOfRowsInSection:未在 reloadData 上调用的主要内容,如果未能解决你的问题,请参考以下文章

对成员 '(_:numberOfRowsInSection:)' 的模糊引用

如何返回 numberOfRowsInSection?

数组未与 tableView(numberOfRowsInSection) 方法连接

numberOfRowsInSection:核心数据和多个部分的方法

numberOfRowsInSection 多次调用但 cellForRowAtIndexPath 从未调用

RxSwift TableView - 如何设置 numberOfRowsInSection?