2014-09-29 1 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 после выполнения функцииSegueWithIdentifier –

ответ

1

Это потому, что вы звоните performSegueWithIdentifier:sender: (который, в свою очередь, вызывает prepareForSegue:sender:перед тем вы инициализируется val, так же как и в Java, val «собирается быть nil в этой точке. Просто переместите performSegueWithIdentifier:sender: вызов к концу tableView:didSelectRowAtIndexPath -OR, еще лучше, чтобы избавиться от tableView:didSelectRowAtIndexPath и вместо того, чтобы просто создать SEGUE из строки таблицы в контроллере представления назначения.

Кроме того, вам не нужно val = [[NSNumber alloc] init];, так как следующая строка создает и возвращает экземпляр NSNumber.

+0

Спасибо вам большое. сначала у меня не было alloc и init. Я просто сделал глупую ошибку. –

 Смежные вопросы

  • Нет связанных вопросов^_^