17

我有一个UITableView使用数组列出数据的。这工作正常。我也有一个UISearchBarfor search in that tableview。当 tableviews 数组中的数据匹配时,这些行将添加到另一个可变数组中,并cellForRowAtIndexPath:改为显示来自该可变数组的数据。

但是numberOfRowsInSection:当我调用 reloadData 时永远不会调用它。因此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;
    }
4

9 回答 9

17

如果numberOfSections返回0numberOfRowsInSection将不会被调用。

于 2017-04-15T13:13:56.560 回答
10

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

于 2012-07-13T10:53:41.543 回答
5

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

您也可以发布崩溃信息。

于 2012-07-13T11:03:02.350 回答
1

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

在我的代码中,我设置了dataSourceand delegate

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

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

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

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

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

在此处输入图像描述

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

于 2014-12-01T10:41:28.963 回答
1

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

于 2018-06-09T19:26:01.103 回答
0

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

于 2014-10-29T14:34:17.883 回答
0

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

IEreturn someValue++

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

于 2016-07-30T21:15:03.283 回答
0

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

于 2019-01-11T10:00:31.197 回答
-3

尝试

[self.tableView reloadData];
于 2012-07-13T16:32:10.997 回答