2015-01-04 2 views
0

У меня есть развязка, которую я использую, и затем у меня есть подготовка к segue, которую я использую для ввода данных. Мне нужно размотать segue, чтобы подтолкнуть данные, но у меня возникают проблемы с их объединением. Вот размотки код Segue -Нажатие данных с развязкой segues

- (IBAction)unwindFromDetailViewController:(UIStoryboardSegue *)segue { 
    // ViewController *detailViewController = [segue sourceViewController]; 
    NSLog(@"%@", segue.identifier); 
} 

А вот готовиться к SEGUE кода -

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showRecipeDetail"]) { 
     NSIndexPath *indexPath = nil; 
     Recipe *recipe = nil; 
     if (self.searchDisplayController.active) { 
      indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow]; 
      recipe = [searchResults objectAtIndex:indexPath.row]; 
     } else { 
      indexPath = [self.tableView indexPathForSelectedRow]; 
      recipe = [recipes objectAtIndex:indexPath.row]; 
     } 

     PersonDetailTVC *destViewController = segue.destinationViewController; 
     destViewController.recipe = recipe; 

     [self dismissViewControllerAnimated:YES completion:nil]; 
    } 
} 

А вот то, что я пытался, который разматывания SEGUE, но не толкая данные.

- (IBAction)unwindFromDetailViewController:(UIStoryboardSegue *)segue { 
    if ([segue.identifier isEqualToString:@"CustomTableCell"]) { 
     NSIndexPath *indexPath = nil; 
     Recipe *recipe = nil; 
     if (self.searchDisplayController.active) { 
      indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow]; 
      recipe = [searchResults objectAtIndex:indexPath.row]; 
     } else { 
      indexPath = [self.tableView indexPathForSelectedRow]; 
      recipe = [recipes objectAtIndex:indexPath.row]; 
     }  

     PersonDetailTVC *destViewController = segue.destinationViewController; 
     destViewController.recipe = recipe; 

     [self dismissViewControllerAnimated:YES completion:nil]; 
    } 
} 
+1

Вы продолжаете повторять тот же вопрос, но я уже направил вас на этот пост со многими ответами по одной и той же точной теме - «Могу ли я возвращать данные, когда я разматываю segue?» http://stackoverflow.com/q/13038622/2274694. Я предлагаю вам проверить это. –

+0

И если ваш вопрос не отвечает, вместо того, чтобы повторять тот же самый точный вопрос 3 раза, я предлагаю вам работать над ним, чтобы сделать его более ясным. –

+1

Вы специально установили идентификатор для своего * разматывания segue *? Я подозреваю, что вы просто используете свой идентификатор * segue * и что ваш 'if ([segue.identifier isEqualToString: @" showRecipeDetail "])' в 'prepareForSegue' возвращает false и, следовательно, блок вообще не выполняется. (Эта строка: '[self rejectViewControllerAnimated: YES complete: nil];' совершенно не нужно.) –

ответ

1

Ваш вопрос довольно неполными, так что я могу ответить только на основании предположений ...

Во-первых, этот метод должен быть в контроллере представления вы возвращающегося в.

- (IBAction)unwindFromDetailViewController:(UIStoryboardSegue *)segue { 

} 

Во-вторых, использовать prepareForSegue: метод, а не ваш unwindFromDetailViewController: метод (который принадлежит в первом контроллере представления), чтобы передать данные из этого второго контроллера представления. Я считаю, что, хотя вы используете идентификатор вашего прямого segue, а не ваш идентификатор unde segue в своем заявлении if ([segue.identifier isEqualToString:@"showRecipeDetail"]), он поэтому возвращает false, и поэтому весь блок в вашем методе prepareForSegue: не выполняется вообще. (Эта линия: [self dismissViewControllerAnimated:YES completion:nil]; завершена ненужными, поскольку размотки происходит автоматически, пока все в подключил правильно.) Так что попробуйте удалить условную сейчас просто чтобы увидеть, если данные передаются, как и ожидалось, например:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    NSIndexPath *indexPath = nil; 
    Recipe *recipe = nil; 
    if (self.searchDisplayController.active) { 
     indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow]; 
     recipe = [searchResults objectAtIndex:indexPath.row]; 
    } else { 
     indexPath = [self.tableView indexPathForSelectedRow]; 
     recipe = [recipes objectAtIndex:indexPath.row]; 
    } 

    PersonDetailTVC *destViewController = segue.destinationViewController; 
    destViewController.recipe = recipe; 
} 

Если вы хотите повторно добавить условное обозначение проверки для вашего идентификатора segue, вы должны установить идентификатор специально для , разматывать segue.

+0

Я попробовал подготовленный вами метод, который вы предложили, но он все еще не передает информацию с помощью разворачивания segue, я не знаю, если им просто не понятно что вы говорите или что. Но он все еще ничего не делает. –

+0

Как я уже сказал, ваш вопрос неполный, например: Is 'unindFromDetailViewController:' в диспетчере представлений, на который вы отключаетесь? Вы уверены, что ваш segue настроен правильно? Вы уверены, что вызывается 'prepareForeSegue'? Вы поставили контрольную точку или nslog для проверки? И как вы определяете, что данные не были переданы? Ваша потребность предоставить путь больше информации ... –

+0

У меня есть развязка в контроллере представления, который я разворачиваю и готовлю для просмотра в контроллере представления, с которого я отключаюсь, но без push-segue, как я должен передавать информацию из от второго до первого с помощью разматывания? \ –

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