我使用xcode 4.2和storyboard创建了一个iOS选项卡式应用程序。我在其上添加了一个带有自定义单元格的tableviewcontroller,单击该行时,我想打开一个tableviewcontroller,我使用下面的代码
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
categoryClass *cc = [datas objectAtIndex:indexPath.row];
[tableView deselectRowAtIndexPath:indexPath animated:NO];
iSubProducts *subProducts = [[iSubProducts alloc] init];
subProducts.title = cc.categoryName;
subProducts.catID = cc.categoryID;
[[self navigationController] pushViewController:subProducts animated:YES];
[subProducts release];
}
但是当我点击该行时,它会给我以下错误:
*由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'UITableView dataSource必须从tableView返回一个单元格:cellForRowAtIndexPath
在我的iSubProducts tableviewcontroller上,我有以下内容:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"myCell2";
iSubProductsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
productSubClass *cc = [datas2 objectAtIndex:indexPath.row];
NSLog(@"Product Name: %@", cc.productName);
cell.txtProductName.text = cc.productName;
cell.txtProductDesc.text = cc.productDesc;
return cell;
}
我认为这是发生错误的地方,单元格返回一个nil值。当我尝试使用或从按钮附加iSubProducts tableviewcontroller时,一切正常,但是如果点击它来自行,则会出现此错误。
我是iOS开发的新手,也许从tableviewcontroller打开tableviewcontroller时出现错误,上面有自定义单元格。我已经连续两天呆了脑子并且用Google搜索了很多,不幸的是我找不到任何解决方案。我很确定iSubProducts tableviewcontroller上没有错误,因为如果我尝试从按钮推送它,它的工作原理。我需要关于这个问题的建议,我现在对这个问题非常感兴趣。谢谢大家。
答案 0 :(得分:6)
请注意这是多么有益..但就在今天,我在点击行后无法从一个tableview移动到另一个视图..
我完全远离DidSelectRowAtIndexPath。相反,我使用了segue(这是我的目标)。
此代码剪切来自Apple使用表格的故事板示例。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"ShowSelectedPlay"]) {
NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];
DetailViewController *detailViewController = [segue destinationViewController];
detailViewController.play = [dataController objectInListAtIndex:selectedRowIndex.row];
}
}
这一切都让您开始使用故事板功能中的segues,并确保使用segues的标识符。
答案 1 :(得分:0)
您必须首先在设计器中创建一个原型单元格,以便您可以将segue从单元格拖出到目标视图。