У меня есть три viewController в моей раскадровке и три класса viewController для каждого из них. Из моего основного viewController я открываю навигационный viewController в режиме модального типа segue, который представляет собой многошаговую форму и содержит два представления. Когда пользователь нажимает кнопку «Готово» в последнем (втором) окне, модальный режим закрывается, и пользователь возвращается к главному экрану.
Я делаю это с делегатами. и код для кнопки «Готово» также находится в делегате и помещается в файл реализации основного viewController. Для достижения этого я передал делегата из основного вида в первый вид навигации, а затем из первого вида, нажав кнопку «Далее», передал делегат во второй (последний) вид (который имеет кнопку «Готово»).
передача делегата с главной страницы на первую страницу навигации выглядит следующим образом:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"CreateCast"])
{
UINavigationController *navigationController = segue.destinationViewController;
CreateCastStepOneVC *createCastStepOneVC = [[navigationController viewControllers] objectAtIndex:0];
createCastStepOneVC.delegate = self;
}
}
передача делегата из первого представления навигации во второе представление выглядит следующим образом:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ToCastStepTwo"])
{
CreateCastStepTwoVC *createCastStepTwoVC =
segue.destinationViewController;
createCastStepTwoVC.delegate = delegate;
}
}
Все сделано хорошо, и делегат выполняет свою работу в соответствии с требованиями. Но появляется предупреждение, которое вызывает беспокойство:
Передача '_weak id' параметру
несовместимый тип 'id'
Объявление свойства в первом виде навигации выглядит следующим образом:
@property (nonatomic, weak) id <CreateCastStepOneVCDelegate> delegate;
Объявление свойства второго вида навигации выглядит так:
@property (nonatomic, weak) id <CreateCastStepTwoVCDelegate> delegate;