我会尝试使用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.
}
}
答案 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
种。