2014-09-29 73 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

相關問題