2014-09-29 97 views
0

我知道这个问题是非常基本的,但作为一个java程序员,我很困惑为什么这个值变成了零?我有UITableView,我试图将选定的行号发送到目标UIViewController。然而,这是即使在prepareForSegue为什么NSNumber从一个函数变为零到另一个函数?

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

因为您在执行完毕后为val指定了值valueIdIndntifier – 2014-09-29 04:50:33

回答

1

这是因为你调用performSegueWithIdentifier:sender:发送此值变为零之前(这反过来又要求你初始化valprepareForSegue:sender:过,所以就像在Java中,val的将是nil在这一点上,只要你performSegueWithIdentifier:sender:呼叫转移到的tableView:didSelectRowAtIndexPath年底--or更好,但摆脱tableView:didSelectRowAtIndexPath,而是刚刚创建的表行一个SEGUE到目的地视图控制器。

而且,你不需要这个val = [[NSNumber alloc] init];行,因为以下行创建并返回NSNumber实例。

+0

非常感谢您。首先我没有alloc和init。我犯了一个愚蠢的错误。 – 2014-09-29 04:52:58

相关问题