为什么NSNumber从一个函数变为另一个函数?

时间:2014-09-29 04:44:11

标签: ios objective-c uitableview segue nsnumber

我知道这个问题非常基本,但作为一名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;

     }

1 个答案:

答案 0 :(得分:1)

这是因为您正在调用performSegueWithIdentifier:sender:(在之前调用prepareForSegue:sender: ,您已初始化val,就像在Java中一样,val在那时将成为nil。只需将performSegueWithIdentifier:sender:电话移至tableView:didSelectRowAtIndexPath的结尾 - 或者更好但是,摆脱tableView:didSelectRowAtIndexPath,而只是创建一个从表行到目标视图控制器的segue。

此外,您不需要val = [[NSNumber alloc] init];行,因为以下行会创建并返回NSNumber个实例。