[英]cellForRowAtIndexPath is not called sometimes after calling numberOfRowsInSection on calling 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 中的dataSource
和delegate
插座。 这以前发生在我身上,但我想我会把它贴在这里,以防这个解决方案帮助一些遇到这个问题的人。
尝试
[self.tableView reloadData];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.