我有一个使用数组列出数据的UITableView。这很好用。 我还有一个用于在该tableview中搜索的UISearchBar。当tableviews数组中的数据匹配时,这些行被添加到另一个可变数组中,而cellForRowAtIndexPath:则显示来自该可变数组的数据。
但是当我调用reloadData时,从不调用numberOfRowsInSection :.因此,滚动时tableview崩溃,因为它试图从可变数组中获取数据,但是对于原始数组中的行(具有更多项)
我已经调试了很长一段时间了,但不能为上帝的爱找到原因。数据源和代理连接在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;
}
答案 0 :(得分:10)
请确保不要在任何表格视图的委托方法中调用reloadData
。这将导致不可预测的行为。此外,请确保您之前没有致电beginUpdates
,并且只从主线程中调用reloadData
方法。
答案 1 :(得分:10)
如果numberOfSections
返回0
,则不会调用numberOfRowsInSection
。
答案 2 :(得分:5)
[table relaodData];
对吧?
您的桌子是否已连接到笔尖上的IBOutlet?
在重新加载时,table
被初始化了吗?
你也可以发布崩溃信息。
答案 3 :(得分:1)
我今天遇到了与XCode 6.1相同的问题
在我的代码中,我设置了dataSource
和delegate
:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.tableView.dataSource = self;
self.tableView.delegate = self;
}
...奇怪的是,我的代码会在第一次加载时填充表格...但它会忽略对reloadData
的任何调用。
在故事板中,当我右键点击故事板中的表格视图时,它是"出口"单选按钮是一个空白圈。
我将这一空白圆圈中的一条线拖到父UIView
上,然后 reloadData
确实可以正常工作。
不知何故,我丢失了我的UITableView控件和用于填充它的.h / .m文件之间的IBOutlet
链接。
答案 4 :(得分:1)
还要确保在重新加载数据的过程中没有移动表格,因为它可能会在您仍在更新数据时调用cellForRowAtIndexPath:
。
答案 5 :(得分:0)
对我来说问题是截断的节数返回0,即使我不打算使用节,也必须是1,因为它在对象层次结构中比行更高:{{3} }
答案 6 :(得分:0)
对我来说,问题是我试图增加一个值并且从numberOfSectionsInTableView
即。 return someValue++
显然这是不可能的,在我的情况下,它没有将someValue
从0递增到1,因此返回0个部分,因此numberOfRowsInSection:
没有理由叫!
答案 7 :(得分:0)
对我来说,解决方案是我将其复制粘贴到另一个笔尖,却忘记了重新布线IB中的dataSource
和delegate
插座。这以前发生在我身上,但我想我将其发布在这里,以防这种解决方案对遇到此问题的人有所帮助。
答案 8 :(得分:-2)
尝试
[self.tableView reloadData];