У меня есть контроллер A, который нажимает контроллер для сканирования кода. Когда код сканируется, он использует делегат для отправки строки обратно на контроллер A. Сразу после этого появляется контроллер сканирования. На данный момент нет проблем.Делегат посылает значение назад и толкает контроллер pop view
Но в делегате контроллера A мне нужно проверить результат и использовать эти данные. В некоторых случаях другой контроллер B должен быть нажат. Это не работает. Экран остается на контроллере сканирования, он просто мерцает 1 или менее.
Из того, что я понимаю, делегат нажимает контроллер B, когда контроллер сканирования находится на экране, и после этого вызывается вызов контроллера сканирования.
У меня есть это в моем контроллере сканирования:
if ([self.delegate respondsToSelector:@selector(QrcodeHasFound:)]) {
[self.delegate QrcodeHasFound:[metadataObj stringValue]];
}
[self.navigationController performSelectorOnMainThread:@selector(popViewControllerAnimated:) withObject:nil waitUntilDone:NO];
И это в моем делегатом:
- (void)QrcodeHasFound:(NSString *)value{
// do some data use
ArticleController *mController = [self.storyboard instantiateViewControllerWithIdentifier:@"articleController"];
[self.navigationController pushViewController:mController animated:YES];
}
Как я должен исправить это?
С вашим кодом экран больше не мерцает, и я вижу, что контроллер вызова делегата B, но сразу же возвращается обратно в контроллер сканирования. Если я инвертирую две строки, чтобы иметь первый popViewControllerAnimated и вызвать делегата после этого, он работает нормально. Но я не знаю, можно ли после этого вызвать делегата. – Kamax
Это будет совершенно безопасно. Хорошее наблюдение за заказом - рад, что исправил ваш второй вопрос. –