用于未声明的标识符" indexPath"

时间:2017-09-30 08:16:51

标签: ios objective-c uitableview segue

我会尝试使用segue方法在两个控制器之间传递数据,但它会给我一个错误

  

用于未声明的标识符" 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.
    }
}

3 个答案:

答案 0 :(得分:2)

根据抛出的异常,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];
    }
}

答案 1 :(得分: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回答也是实现这一目标的好方法。

答案 2 :(得分:0)

下面..

var s = 'foo bar fum i am sparticus 23!!';

console.log(s.replace(/\b\w/g, function(s){return s.toUpperCase()}));

您正在使用destViewController.receiptName = [self.nameListArray objectAtIndex:indexPath.row]; // here display the error. 并声明indexpath,因此您需要更改var名称,如...

index

然后将其用作

NSIndexPath *indexPath = (NSIndexPath *)sender;

请确保destViewController.receiptName = [self.nameListArray objectAtIndex:indexPath.row]; sender种。