2016-04-25 2 views
0

У меня есть табличный вид. Когда щелкнута ячейка таблицы, im захватывает определенное значение текстовой метки. В файле APIRequest.m у меня есть переменная shipmentReferenceNo, значение которой присваивается как значение textlabel на didSelectRowAtIndexPath.Не удалось передать значения через didSelectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath; 
{ 
    tabBar = [self.storyboard instantiateViewControllerWithIdentifier:@"TabBarController"]; 
    [self.navigationController pushViewController:tabBar animated:YES]; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    UILabel *label = (UILabel *)[cell viewWithTag:123123]; 
    self.request = [[APIRequest alloc]init]; 

    self.request.shipmentReferenceNo = label.text; 

    NSLog(@"hello %@", label.text); 

} 

Когда им пытается получить доступ к shipmentReferenceNo как следует из APIRequest.m файла следующим образом, его нулевого

NSLog(@"sd %@",self.shipmentReferenceNo); 

что может быть возможной причиной этого нулевого значения, хотя я назначил его ранее в didSelectRowAtIndexPath ?

+0

Это потому, что вы снова создаете новый экземпляр. self.request = [[APIRequest alloc] init]; Вы просто удалите его. Как вы уже объявили self.request как свойство! Также вам нужно искать self.request.shipmentReferenceNo, а не self.shipmentReferenceNo –

+0

Я попробовал, но все же im с той же проблемой – user1241241

+0

положил точку останова в методе didSelect и попытайтесь напечатать значение self.request в отладчике. –

ответ

1

Попробуйте этого код

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath; 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    UILabel *label = (UILabel *)[cell viewWithTag:123]; 
    self.request = [[APIRequest alloc]init]; 
    self.request.shipmentReferenceNo = label.text; 
    NSLog(@"hello %@", label.text); 

    dispatch_async(dispatch_get_main_queue(), ^{ 
    tabBar = [self.storyboard instantiateViewControllerWithIdentifier:@"TabBarController"]; 
    [self.navigationController pushViewController:tabBar animated:YES]; 
}); 

}

также внутри источник табличных данных:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = ; 
    [cell.label setTag:123]; 
} 

Это будет работать, но я предлагаю, чтобы сделать код более организовать путем перемещения dispatch_async код для разделения метода.

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