У меня есть UICollectionView
, и когда пользователь нажимает на ячейку, я представляю другой контроллер вида в UINavigationController
, используя раскадровку.segue.destinationViewController при подаче UINavigationController modal
- (void)collectionView:(UICollectionView *)collectionView
didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"editBookIPad"
sender:indexPath];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue
sender:(id)sender
{
// Did not include code for other segues, but I check which is the current one properly
UINavigationController *dest = segue.destinationViewController; // This is nil!
dest.modalPresentationStyle = UIModalPresentationFormSheet;
DetailsViewController *detailsVC = (id)[dest topViewController];
detailsVC.stack = self.stack;
detailsVC.editingMode = 1;
detailsVC.bookToEdit = [self.fetchedResultsController objectAtIndexPath:sender];
[self.collectionView deselectItemAtIndexPath:sender
animated:YES];
}
Теперь моя проблема заключается в том, что segue.desinationViewController
возвращает nil
(как комментарий в фрагменте кода говорит).
Просто для отладки, я изменил UINavigationController
на другой контроллер представления, и у меня не было проблем. Я не знаю, поможет ли переход от модального к нажатию, поскольку стиль перехода поможет, так как невозможно нажать UINavigationController
(произошел сбой, который говорит, что это так).
Я очистил проект и папку сборки и перезапустил компьютер (и, следовательно, Xcode).
Это то, что он выглядит, когда работает приложение:
При поиске подобных проблем я не нашел ничего об этом. Большинство других вопросов касалось свойств, заданных на контроллере представления назначения, который равен нулю (например, this).
Я использую Xcode 5.1.1 и имею iOS 7.0 в качестве цели разработки.
Edit1
Та же проблема происходит во всех частях моего приложения сейчас (везде UINavigationController
представлено модально). Однако, это случается только в некоторых случаях, но каждый раз segue.destinationViewController
по-прежнему nil
.
Edit2
Я заменил prepareForSegue
код с этого (делать это вручную):
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard"
bundle:nil];
UINavigationController *navCon = [storyboard instantiateViewControllerWithIdentifier:@"AllBooksVCDetails"]; // The problematic navigation controller
navCon.modalPresentationStyle = UIModalPresentationFormSheet;
BKSBookDetailsViewController *detailsVC = (id)[navCon topViewController];
detailsVC.stack = self.stack;
detailsVC.editingMode = 1;
detailsVC.bookToEdit = [self.fetchedResultsController objectAtIndexPath:indexPath];
[self presentViewController:navCon
animated:YES
completion:nil];
[self.collectionView deselectItemAtIndexPath:indexPath
animated:YES];
И это работает. Поэтому я думаю, что проблема кроется в раскадровке.
Я проверил мой код, и я использовал ** SEGUE **. Спасибо за ответ, хотя – user3956212