这是我目前的代码:
if (tableView == nearbyTV) {
return numberOfObjects;
}
else {
if (tableView == self.searchDisplayController.searchResultsTableView) {
return [searchResults count];
}
else {
return [users count];
}
}
正如您所看到的,我正在尝试根据表视图或表视图搜索显示来反映不同的索引。当用户单击按钮时,将显示第二个视图控制器。此时,如果第二个表格视图的索引超过了第一个表视图的索引,它就会崩溃,不幸的是熟悉:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 13 beyond bounds [0 .. 12]'
如何更新第二个表的行数?我也是一些如何在滚动时从其他表视图中获取信息。很沮丧。任何帮助都将非常感激。感谢。
修改
的cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView == friendsTV || tableView == self.searchDisplayController.searchResultsTableView) {
static NSString *simpleTableIdentifier = @"SimpleTableCell";
SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}else{
cell.propic.image=nil;
cell.flashBack.backgroundColor=[UIColor whiteColor];
[cell.button1 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
}
if (tableView == self.searchDisplayController.searchResultsTableView) {
cell.fullName.text = [searchResults objectAtIndex:indexPath.row];
}
return cell;
}else{
static NSString *simpleTableIdentifier = @"nearbyTableCell";
nearbyTableCell *cell = (nearbyTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"nearbyTableCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}else{
cell.propic.image=nil;
cell.flashBack.backgroundColor=[UIColor whiteColor];
[cell.button2 setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
}
// NSLog(@"%@",[searchResults objectAtIndex:indexPath.row]);
if (tableView == self.searchDisplayController.searchResultsTableView) {
cell.fullName.text = [searchResults objectAtIndex:indexPath.row];
}else if (tableView==nearbyTV){
NSString *requestCombine = [NSString stringWithFormat:@"/%@",[[json objectAtIndex:indexPath.row] objectForKey:@"fbID"]];
[FBRequestConnection startWithGraphPath:requestCombine
parameters:nil
HTTPMethod:@"GET"
completionHandler:^(
FBRequestConnection *connection,
id result,
NSError *error
) {
cell.fullName.text=[result objectForKey:@"name"];
}];
cell.fbIDLabel.text = [[json objectAtIndex:indexPath.row] objectForKey:@"fbID"];
}
return cell;
}
}
答案 0 :(得分:7)
问题不在于在一个类中使用多个UITableView
。
从错误日志中:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 13 beyond bounds [0 .. 12]'
很明显,在cellForRowAtIndexPath
方法中创建单元格时,您尝试访问索引为13的对象,而数组的长度为13,即最后一个索引为12.因此尝试调试数组并检查机制在创建单元格时从数组访问对象。可能是您正在为numberOfRowsInSection
表格nearbyTV
返回额外的点数。
编辑1:在项目中设置Exception Breakpoint
始终是一个不错的选择,因为它会告诉您崩溃的确切代码位置。设置异常断点以跟踪发生崩溃的数组,同时访问元素以跟踪真正的问题。
编辑2:从您的cellForRowAtIndexPath
方法看,searchResults
和json
是两个阵列,您从中拾取要显示的对象细胞。从numberOfRowsInSection
返回的行计数必须与searchResults
和json
数组中的对象数匹配,以使代码正常工作。问题在于其中一个阵列。调试以查看searchResults
和json
数组中存在的对象数以及从numberOfRowsInSection
方法返回的行数。
答案 1 :(得分:0)
试试这段代码我希望它可能对你有用..
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if ([tableView isEqual:nearbyTV])
{
return [Your nearbyTVarray's count];
}
elseIf ([tableView isEqual:nearbyTV])
{
return [searchResults count];
}
return [users count];
}
答案 2 :(得分:0)
检查返回的是哪个tableview,
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
{
if(tableView == firstTableView){
return 10;
}
return 15;
}
它返回第一个tableView 10个单元格和其他tableviews 15个单元格。 使用你拥有的tableView修改else条件。
答案 3 :(得分:-1)
试试这个
(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if ([tableView isEqual:firstTableVIew])
{
return [array1 count];
}
elseIf ([tableView isEqual:secondTableView])
{
return [array2 count];
}
}
并确保在if([tableView isEqual:yourTableVIew]
中添加cellForRowAtIndexPath
的检查
答案 4 :(得分:-1)
还假设每个表视图都分配了自己的部分:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (section)
{
case 0: return [array1 count]; break;
case 1: return [array2 count]; break;
default: // Handle others
break;
}
}