У меня есть UITableViewController в UINavigationController, который я хочу показать в popover view и заполнить поля в viewController.ios10 prepareForSegue popoverPresentationController ObjC
Раскадровка выглядит как рис. Левый VC вызывает editIdeaSeque на кнопке навигации.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"editIdeaSegue"]) {
UINavigationController *nvc = segue.destinationViewController;
if (!isIpad) {
EditIdeaTVC* edi = (EditIdeaTVC*)[nvc.viewControllers objectAtIndex:0];
if (edi != nil)
edi.editIdea = sender;
}
else {
UINavigationController* nc = (UINavigationController*)[[segue.destinationViewController popoverPresentationController] presentedViewController];
EditIdeaTVC* edi = (EditIdeaTVC*)[nc.viewControllers objectAtIndex:0];
if (edi != nil)
edi.editIdea = sender;
}
}
}
Моя готовиться Segue работает на Iphone, который похож макет раскадровки. Авария части Ipad вызывает edi - это указатель на мусор.
-[EditIssueTVC setEditIdea:]: unrecognized selector sent to instance 0x157d6c7a0
Я ожидал, что presentedViewController будет UINavigationController ...
Ну, это было первое, что я пробовал и видел, что приложение рушилось, поэтому я начал копаться в popoverPresentationController. – Gossamer
Что я говорю: удалите всю проверку iPad. Все дело в том, что эта вещь будет вести себя как на iPhone, так и на iPad. Сеге - это сегу. Пункт назначения - это пункт назначения. Ваш код будет работать одинаково на обоих устройствах без какой-либо проверки. – matt