topViewController错误(iOS7 - 适用于iOS8)

时间:2015-01-25 17:58:30

标签: objective-c ios7 ios8

在我的旧iPhone 4(iOS 7.1.2)上进行一些测试时,我遇到了从初始collectionView到tableView执行segue的错误。

在iOS 8上一切正常,但我在iOS 7上遇到以下错误:

*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [ListaPlatosTableViewController topViewController]:无法识别的选择器发送到实例0x17df3c70'

我的prepareForSegue方法如下:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

UINavigationController *nav = [segue destinationViewController];
ListaPlatosTableViewController *listaPlatosVC = (ListaPlatosTableViewController *)nav.topViewController;
[listaPlatosVC setPlatosCarta:platosCarta];

//I have set selectedCell in the method where I call performSegueWithIdentifier
[[[segue destinationViewController]topViewController]setTitle:selectedCell];

}

//更新: 这是调用segue的代码,以防我忽略了什么

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
selectedCell = [tiposCarta objectAtIndex:indexPath.row];
[self ponerPlatosEnCarta]; // I prepare platosCarta with this method
[self performSegueWithIdentifier:@"ListaPlatos" sender:self];
}

有没有人遇到过这个?

2 个答案:

答案 0 :(得分:1)

topViewControllerUINavigationController的属性。

这是问题:enter image description here 然后有一个segue到ListaPlatosTableViewController。您的代码应如下所示:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    ListaPlatosTableViewController *listaPlatosVC = (ListaPlatosTableViewController *)segue.destinationViewController;

    listaPlatosVC.platosCarta = platosCarta;
    listaPlatosVC.title = selectedCell;
}

答案 1 :(得分:0)

我的解决方案: 以编程方式执行segue,而不是使用故事板中的control-click。 我不知道我是否在故事板上做错了,或者它是否是Xcode-ios7的错误(因为它适用于iOS8) 我怎么做,我做的是:

断开在Storyboard中出现问题的视图,并从以下方法准备+启动它们:

我的自定义tableview从collectionView:

启动
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
selectedCell = [tiposCarta objectAtIndex:indexPath.row];
[self ponerPlatosEnCarta];
ListaPlatosTableViewController *listaPlatosVC = [self.storyboard instantiateViewControllerWithIdentifier:@"listaPlatosVC"];
[self.navigationController pushViewController:listaPlatosVC animated:YES];
[listaPlatosVC setPlatosCarta:platosCarta];
[listaPlatosVC setTitle:selectedCell];
}

从tableView:

启动的“详细信息”视图
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

 PlatoHormigueroViewController *dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"];
 dvc.elPlato = [self.platosCarta objectAtIndex:indexPath.row];
 [tableView deselectRowAtIndexPath:indexPath animated:NO];
 [self.navigationController pushViewController:dvc animated:YES];

}

这种方式在iOS 7上的工作方式与8相同。

感谢所有在此主题中回复的人! :)