我知道这个问题非常基本,但作为一名java程序员,我很困惑为什么这个值变为零?我有UITableView,我试图将选定的行号发送到目标UIViewController。但是,这甚至在发送此值之前,它在prepareForSegue
NSNumber* val;
/*segue*/
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
//Perform a segue.
[self performSegueWithIdentifier:@"toInfo"
sender:[items objectAtIndex:indexPath.row]];
val = [[NSNumber alloc] init];
val = [NSNumber numberWithInt:indexPath.row];
NSLog(@"val111 === %@",val); >>>Here prints 2
}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// [self performSegueWithIdentifier:@"toInfo" sender:sender];
NSLog(@"inside segue");
NSLog(@"val222 === %@",val); >>> Here prints null
InfoViewController *vc = [segue destinationViewController];
vc.journeyId = val;
}
答案 0 :(得分:1)
这是因为您正在调用performSegueWithIdentifier:sender:
(在之前调用prepareForSegue:sender:
,您已初始化val
,就像在Java中一样,val
在那时将成为nil
。只需将performSegueWithIdentifier:sender:
电话移至tableView:didSelectRowAtIndexPath
的结尾 - 或者更好但是,摆脱tableView:didSelectRowAtIndexPath
,而只是创建一个从表行到目标视图控制器的segue。
此外,您不需要val = [[NSNumber alloc] init];
行,因为以下行会创建并返回NSNumber
个实例。