У меня проблемы с передачей данных во второй вид из UITableView - PullRequest
2 голосов
/ 27 декабря 2011

У меня проблемы с отправкой данных в другое представление с использованием метода "prepareForSegue" ...

У меня есть табличное представление, заполненное результатами запроса sqlite. Когда я нажимаю на одну из ячеек таблицы, она направляет меня в другое представление, где у меня есть метка, которая сообщит мне идентификатор и имя

У меня есть строка NSString, которая содержит значение идентификатора из источника данных SQLite. Я хочу передать этот идентификатор во второе представление моего приложения, чтобы использовать его для получения информации из источника данных sqlite, основанного на этом идентификаторе.

Теперь я написал код, в котором он будет передавать информацию из одного представления в другое ... но по какой-то причине эта информация "не учитывается". Вот что я имею в виду, у меня есть список из 3 горных районов: Обман, Дальняя сторона и Mt. Вашингтон (указан в виде таблицы на первом взгляде). Когда я нажимаю на Mt. Вашингтон, перейдем ко второму представлению и метке, которую я настроил, чтобы сообщить мне имя выбранной ячейки ... пусто Я нажал кнопку назад на панели навигации и коснулся Mt. Снова Вашингтон, и на этот раз на этикетке отображается название «Гора Вашингтон». Теперь, когда я возвращаюсь и нажимаю «Дальняя сторона», на этикетке отображается «Гора Вашингтон». Когда я возвращаюсь и снова нажимаю «Дальняя сторона», метка меняется на «Дальняя сторона». Надеюсь, это имеет смысл.

Кто-нибудь знает, как решить проблему? Вот код, который у меня есть:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([[segue identifier] isEqualToString:@"areaIDpush"]){
      RockViewController *rockRoutes = [segue destinationViewController];
      rockRoutes.rockID = areaID_fk;
      rockRoutes.rockName = areaName_fk;
    }
}



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {    
   UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
   areaID_fk = cell.detailTextLabel.text;
   areaName_fk = cell.textLabel.text;
}

- (void)viewWillAppear:(BOOL)animated {
[areaIDLabel setText:rockID];
[areaNameLabel setText:rockName];
[super viewWillAppear:animated];

}

Надеюсь, это поможет вам понять, где у меня проблемы ... любая помощь будет отличной. Спасибо!

Ответы [ 2 ]

2 голосов
/ 31 декабря 2011

Послал мой код приятелю, и он помог мне понять, что происходит не так.

Вот правильный код:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
        if([[segue identifier] isEqualToString:@"areaIDpush"]){
        RockViewController *rockRoutes = [segue destinationViewController];
        rockRoutes.rockID = areaID_fk;
        rockRoutes.rockName = areaName_fk;

        UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:self.tableView.indexPathForSelectedRow];
        rockRoutes.rockName = cell.textLabel.text;
        rockRoutes.rockID = cell.detailTextLabel.text;
    }
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}
1 голос
/ 27 декабря 2011

Вы должны передать имя и идентификатор в didSelectRowAtIndexPath: метод .... Сначала вы инициализируете две переменные для имени и идентификатора во втором представлении и передаете значение из первого представления, как

secondview.variable1=ID;
secondview.variable2=name;

в вашем didSelectRowAtIndexPath: методе.

...