Я не размещаю весь код, потому что он действительно слишком большой. Во всяком случае, это регистрация пользователя, построенная таким образом.Capture self никогда не использовался
Существует модальный, чей ребенок является pageViewController:
- первая страница для входа в систему;
- вторая страница для регистрации;
От пользователя Вы можете связаться с Регистрацией и, после регистрации, на страницеViewController должен автоматически перейти на первую страницу, чтобы пользователь мог войти в систему со своими новыми учетными данными.
Процесс регистрации пользователя управляется кнопкой и Alamofire: после нажатия кнопки значения, введенные пользователем в текстовые поля, проверяются, затем я начинаю почтовый запрос, отправляя данные на сервер и получая данные JSON назад через некоторое время.
Это что-то очень простое (жаль говорить слишком много), но в конце концов, после того, как я получаю JSON, что-то странное происходит здесь:
let j = JSON as! NSDictionary
let userStatus = j.object(forKey: "status")!
if((userStatus as! Int) == 0){
//
print("user registerd")
let alert = UIAlertController(title: "Registration ok", message: "Registration OK", preferredStyle:UIAlertControllerStyle.alert)
let okAlert = UIAlertAction(title:"OK", style: .default, handler: {action in v.scrollToPreviousViewController() })
alert.addAction(okAlert)
self.present(alert, animated: true, completion: nil)
Что должен делать этот код? Как только пользователь нажмет кнопку предупреждения, диспетчер просмотра страницы должен вернуться с анимацией на экран входа в систему.
Что происходит? Он возвращается обратно, но без анимации.
Это привело меня к мысли, что я должен избегать «загрязнения» глобальной нити, зарезервированной для графического интерфейса. И, фактически, я попытался поместить весь код внутри a:
DispatchQueue.main.async { [unowned self] in
без каких-либо успехов.
Затем я попробовал другую вещь:
let okAlert = UIAlertAction(title:"OK", style: .default, handler:
{action in DispatchQueue.main.async { [unowned self] in v.scrollToPreviousViewController() }})
Я не вполне понимаю, почему, но это практически работает и устраняет проблему с анимацией.
Но в этом unowned self
появляется предупреждение: «Захват самости никогда не использовался». Что я делаю не так?
Это работает. И он также работает, оставляя только v.scrollToPreviousViewController(). Но, это правильный способ сделать то, что я делаю? :-) –
Да, это прекрасно. Пожалуйста, примите ответ, если вы согласны. – Satheshkumar
Я принимаю ответ завтра, если между тем кто-то не публикует что-то интересное :-) –