【发布时间】:2015-01-25 17:58:29
【问题描述】:
在我的旧 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];
}
有人遇到过吗?
【问题讨论】:
-
iOS7 和 8 都使用相同的情节提要,这是针对完全相同的测试(所以相同的 segue)?
-
你能检查一下 nav 是否是 ListaPlatosTableViewController 的类型。我认为它是 UINavigationController,或者 ListaPlatosTableViewController 没有名为 topViewController 的属性。
-
@Wain - 我在两台设备上测试完全相同的代码,选择相同的集合视图单元格,它在一个上工作,而在另一个上失败......
-
topViewController是导航控制器的属性,而不是表格视图控制器,因此 segue 应该指向导航控制器以使您的代码正常工作。如果使用相同的故事板,那么代码应该在两种情况下都可以工作或失败,您需要在这两种情况下进行调试以查看发生了什么。 -
topViewController 只是 UINavigationController 的任何子类的属性。所以你不能将它与 UITableViewController 一起使用
标签: objective-c ios7 ios8