繁体   English   中英

numberOfRowsInSection:未在 reloadData 上调用

[英]numberOfRowsInSection: not called on reloadData

我有一个使用数组列出数据的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;
    }

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

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

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

您也可以发布崩溃信息。

我今天在 XCode 6.1 上遇到了同样的问题

在我的代码中,我设置了dataSource源和delegate

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

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

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

在 Storyboard 中,当我右键单击 Storyboard 中的 Table View 时,它的“outlet”单选按钮是一个空心圆圈。

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

在此处输入图像描述

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

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

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

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

return someValue++

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

我的解决方案是我从另一个 nib 复制粘贴它,忘记重新连接 IB 中的dataSourcedelegate插座。 这以前发生在我身上,但我想我会把它贴在这里,以防这个解决方案帮助一些遇到这个问题的人。

尝试

[self.tableView reloadData];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM