xcode 4.2 iOS Tableview使用故事板

时间:2011-12-13 19:50:53

标签: ios tableview storyboard

我使用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上没有错误,因为如果我尝试从按钮推送它,它的工作原理。我需要关于这个问题的建议,我现在对这个问题非常感兴趣。谢谢大家。

2 个答案:

答案 0 :(得分:6)

请注意这是多么有益..但就在今天,我在点击行后无法从一个tableview移动到另一个视图..

我完全远离DidSelectRowAtIndexPath。相反,我使用了segue(这是我的目标)。

此代码剪切来自Apple使用表格的故事板示例。

http://developer.apple.com/library/ios/#samplecode/SimpleDrillDown/Listings/Classes_RootViewController_m.html#//apple_ref/doc/uid/DTS40007416-Classes_RootViewController_m-DontLinkElementID_10

- (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从单元格拖出到目标视图。