Iphone numberOfRowsInSection:在重新加载数据时未调用
我有一个Iphone numberOfRowsInSection:在重新加载数据时未调用,iphone,objective-c,uitableview,Iphone,Objective C,Uitableview,我有一个UITableView,它使用数组列出数据。这个很好用。 我还有一个ui搜索栏,用于在tableview中搜索。当TableView数组中的数据匹配时,这些行将添加到另一个可变数组,而cellForRowAtIndexPath:将显示该可变数组中的数据 但是当我调用重载数据时,numberOfRowsInSection:从未被调用。因此,当滚动时,tableview崩溃,因为它试图从可变数组中获取数据,而不是原始数组中的行(其中包含更多项) 我已经调试了很长一段时间了,但看在上帝的份上,
UITableView
,它使用数组列出数据。这个很好用。
我还有一个ui搜索栏
,用于在tableview
中搜索。当TableView数组中的数据匹配时,这些行将添加到另一个可变数组,而cellForRowAtIndexPath:
将显示该可变数组中的数据
但是当我调用重载数据时,numberOfRowsInSection:
从未被调用。因此,当滚动时,tableview
崩溃,因为它试图从可变数组中获取数据,而不是原始数组中的行(其中包含更多项)
我已经调试了很长一段时间了,但看在上帝的份上,我找不到原因。Datasource和Delegate连接在表视图中,因为它可以显示原始数组中的数据
-(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节
{
NSLog(@“isSearching:%d”,isSearching);
//返回节中的行数。
如果(!正在搜索)
返回[原始阵列计数];
NSLog(@“isSearching-返回searchCopyListOfItems”);
返回[searchCopyListOfItems计数];
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
静态NSString*CellIdentifier=@“Cell”;
UITableViewCell*单元格=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
如果(单元格==nil){
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle重用标识符:CellIdentifier];
}
如果(!正在搜索)
cell.textlab.text=[originalArray objectAtIndex:indexPath.row];
其他的
cell.textLabel.text=[searchCopyListOfItems objectAtIndex:indexPath.row];
返回单元;
}
确保不要从任何表视图的委托方法中调用重新加载数据。这将导致不可预测的行为。另外,请确保以前没有调用beginUpdates
,并且只从主线程调用reloadData
方法。如何重新加载表?
执行[表relaodData]代码>对吗?
您的桌子是否连接到nib上的IBOutlet?
重新加载时,表
是否初始化
您也可以发布碰撞信息。试试
[self.tableView reloadData];
对我来说,问题是被剔除的节数返回了0,尽管我不打算使用节,但必须有1,因为它在对象层次结构中高于行:我今天在XCode 6.1中遇到了同样的问题
在我的代码中,我设置了数据源
和委托
:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.tableView.dataSource = self;
self.tableView.delegate = self;
}
…奇怪的是,我的代码第一次加载时会填充表格。。。但它随后忽略了对重新加载数据的任何调用
在情节提要中,当我右键单击情节提要中的表视图时,它的“outlet”单选按钮是一个空圆圈
我从这个空圆圈中拖出一行到父视图UIView
,然后reloadData
工作正常
不知何故,我丢失了UITableView控件和用于填充它的.h/.m文件之间的IBOutlet
链接 对我来说,问题是我试图增加一个值,然后从numberOfSectionsInTableView
i、 e.返回someValue++
显然这是不可能的,在我的例子中,它没有从0增加到1,因此返回0个部分,因此没有理由调用numberOfRowsInSection:
如果numberOfSections
返回0
,numberOfRowsInSection
将不会被调用。只需确保在重新加载数据的过程中不会移动表,因为它可能会在您仍在更新数据时调用cellForRowAtIndexPath:
。我的解决方案是从另一个nib复制粘贴它,然后忘记重新布线dataSource
和delegate
IB中的outlets。我以前也遇到过这种情况,但我想我会将其发布在这里,以防此解决方案帮助遇到此问题的人。在重新加载表时检查表是否有内存。.谢谢您的提示。不知何故,IB断开了IBOutlet与xib中UITableView的连接。我没有注意到它没有连接,因为原始数据已成功显示。然而,事后看来,我意识到这不是因为引用出口,而是因为委托和数据源连接我犯了同样的错误,我忘记了将数据源出口连接到视图控制器。感谢有关beginUpdates
的提示!这是给我的!TYVM