Понимание функции executeSegueWithIdentifier
Может ли кто-нибудь более осведомлен, чем я объясняю performSegueWithIdentifier:sender:
для меня? Мне нужно переключать представления (и классы), а также переносить несколько NSStrings и ID на этот класс представления. Мне было интересно, возможно ли это с помощью performSegueWithIdentifier:sender:
Спасибо!
Ответы
Ответ 1
Сначала вы должны настроить segue в своем раскадровке и присвоить ему соответствующий идентификатор. (Нажмите на сегмент (левая панель), затем нажмите "Атрибуты" (правая панель).
Затем вы можете связать это с кнопками или выбором строк таблицы из раскадровки, или вы можете вызвать его в коде с помощью performSegueWithIdentifier:sender:
.
После этого вашему контроллеру будет отправлено сообщение prepareForSegue:sender:
. Вы переопределите этот метод в подклассе контроллера вида и можете настроить контроллер целевого представления следующим образом:
TargetViewController *targetVC = (TargetViewController*)segue.destinationViewController;
targetVC.string1 = string1;
И так далее. sender
в этом методе будет объектом, который вы используете как sender
в исходном вызове метода.
Ответ 2
Большинство сеансов инициируются автоматически в результате взаимодействия с пользователем. Например, если у вас есть segue, который переводится с одной кнопки на сцену в раскадровке, при нажатии кнопки происходит автоматический запуск segue.
Иногда имеет смысл запускать программный вызов segue - например, вы имеете сцену с высокими показателями, которая отображается, когда пользователь выигрывает раунд игры. Невозможно выразить концепцию выигрыша в самой раскадровке, поэтому вместо этого вы можете создать segue, назначить ему идентификатор и вызвать -performSegueWithIdentifier:sender:
во время выполнения.
Другой связанный с segue метод в UIViewController, -prepareForSegue:sender:
, - это метод, который вы должны переопределить для выполнения любой настройки на контроллере представления назначения.
Ответ 3
В prepareForSegue:sender:
вы получите возможность настроить destinationViewController
: то, где вы передадите ему нужные ему данные. Он обсуждался в Cocoa Компетенции приложений для iOS.
Ответ 4
Сегодня я столкнулся с проблемой performSegueWithIdentifier: не выполнялся из-за того, что не задал очередь делегатов в сеансе URL.
Таким образом, проверьте, действительно ли вы устанавливаете очередь делегатов при создании URLSession, иначе URLSession создаст его.
urlSession = [NSURLSession sessionWithConfiguration:sessionConfigObject
delegate:self
delegateQueue:[NSOperationQueue mainQueue]];
Я упоминаю об этом здесь, потому что довольно часто вижу, что обработка URLSession заканчивается вызовом какой-то связанной с пользовательским интерфейсом деятельности. И performSegue должен выполняться на основном, иначе он ничего не сделает.