未声明的标识符“indexPath”

问题描述:

我将尝试使用赛格瑞方法二控制器之间传递数据的使用,但它给我的错误,如未声明的标识符“indexPath”

未声明的标识符“indexPath”

检查我的代码的使用:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showRecipeDetail"]) { 
     NSIndexPath *index = (NSIndexPath *)sender; 
     NameViewController *destViewController = [segue destinationViewController]; 
     destViewController.receiptName = [self.nameListArray objectAtIndex:indexPath.row]; // here display the error. 
    } 
} 
+0

分享你如何调用performSegue withIdentifier .. – Bharath

+0

你明白我的问题代码@Bharath –

+0

我只需拨打[self.nameListArray objectAtIndex:指数]所以它正常工作,但总是在下一个控制器上返回相同的值 –

根据抛出的异常,sender显然是表视图单元而不是索引路径。 ?

然后,你必须写

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showRecipeDetail"]) { 
     NSIndexPath *indexPath = [self.tableView indexPathForCell: (UITableViewCell*)sender]; 
     NameViewController *destViewController = [segue destinationViewController]; 
     destViewController.receiptName = self.nameListArray[indexPath.row]; 
    } 
} 
+0

它正常工作。谢谢。 –

重命名的变量名称如下,

NSIndexPath *indexPath = (NSIndexPath *)sender; 

代替

NSIndexPath *index = (NSIndexPath *)sender; 

这就解决了未声明的标识符问题。

现在来到你的第二组的问题, 正如你在你不使用didSelect按你所提到的指导我们的谈话中提到,请read the documentation little in depth,因为他们都提到使用indexPathForSelectedRow

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showRecipeDetail"]) { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     NameViewController *destViewController = [segue destinationViewController]; 
     destViewController.receiptName = self.nameListArray[indexPath.row]; 
    } 
} 

供参考:@vadian答案也是实现这一目标的好方法。

+0

更改应用程序后将崩溃并显示如下错误:终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [UITableViewCell行]:无法识别的选择器发送到实例0x7f861307 –

+0

一个问题,prepareForSegue如何调用是通过使用“用tableView didSelect在indexPath处执行带标识符的搜索“或者你在故事板中以某种方式使用segue? – Bharath

+0

为什么不打电话?我没有更多关于segue的细节,因为我在几天之前开始学习ios。 –

这里..

destViewController.receiptName = [self.nameListArray objectAtIndex:indexPath.row]; // here display the error. 

您正在使用indexpath并且声明index,所以你需要改变变量名称就像...

NSIndexPath *indexPath = (NSIndexPath *)sender; 

,然后用它作为

destViewController.receiptName = [self.nameListArray objectAtIndex:indexPath.row]; 

请确保sender是一种NSIndexPath 或不。

+0

更改应用程序后将崩溃并显示如下错误:终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [UITableViewCell row]:无法识别的选择器发送到实例0x7f861307 –

+0

请参阅编辑的答案。 –