Вы вызываете [self bookDes] из viewDidLoad ... Этот метод вызывается после того, как контроллер представления загрузил свои связанные представления в память. Как вы создаете BookDetailViewController? Если вы создаете его только один раз, а затем повторно используете контроллер каждый раз, когда пользователь нажимает название книги, метод viewDidLoad также будет вызываться только один раз.
Если у вас уже есть название книги в родительском контроллере, почему бы вам просто не установить свойство оттуда, когда вы помещаете дочерний элемент в контроллер навигации?
bookDetailsController.titleLabel.text = selectedBook.title;
ИЗМЕНИТЬ ИЗ КОММЕНТАРИИ:
Да, BookDetailsViewController создается один раз, затем сохраняется ... поэтому viewDidLoad вызывается только один раз.
Одна вещь, которую вы можете попробовать, это установить метку в родительском методе didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic -- create and push a new view controller
if(bdvController == nil)
bdvController = [[BookDetailViewController alloc] initWithNibName:@"BookDetailView" bundle:[NSBundle mainBundle]];
Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];
bdvController.aBook = aBook;
bdvController.titleLabel.text = aBook.title;
[self.navigationController pushViewController:bdvController animated:YES];
}
есть более эффективные способы сделать это, например, переопределить сеттер на контроллере деталей и установить метку ... но вы должны сделать это простым и заставить его работать первым.
Надеюсь, это поможет