2015-10-08 2 views
0

Что-то странное происходит. У меня есть два ViewControllers & B.Alamofire Запрос не выполняется.

В обоих из них я импортировал Alamofire с помощью следующей команды

import Alamofire 

ВОПРОС: Я зову точно такой же Alamofire запрос в обоих контроллере. В VC-A он выполняется, в VC-B - просто не выполняется. Нет никакой ошибки или чего-то еще. Когда я отлаживаю использование контрольных точек, весь код Alamofire пропускается по какой-то причине. Почему-то не получается понять.

Ниже мой Alamofire код (ЭТО ЖЕ в контролерами & B)

override func viewDidLoad() { 
    super.viewDidLoad() 
print("check1") 
Alamofire.request(.GET, hubsURL).response { request, response, result, error in 
     print(response) 
     print("check2") 
} 
print("check"3) 
} 

Приведенный выше код печатает ответ, когда ViewController А выполняется, но не для View Controller B. Для ViewController В других командах выполняются только Alamofire, которые не выполняются. В приведенном выше коде - «Check 1» & «Check 3» печатается на консоль, но не «Check 2» (для VC-B).

+0

Вы можете добавить код, окружающий вызов запроса Alamofire в VC B? Трудно сказать, что происходит без дополнительного контекста. – chimpymike

ответ

0

Может быть много проблем, мы не можем сказать, не предоставили ли вы весь код. Возможно, вы просто перепутались с другой частью кода, например

  • Это действие запускается кнопкой? Правильно ли подключена кнопка/действие в вашем коде/раскадровке?
  • Правильно ли вы установили UIViewController в Storyboard? Значение - это viewController, который вы вызываете VC-B? (Называется ли ваш метод viewDidLoad?)

И много больше возможностей, но если он работает для ВК - это не должно быть проблемой с Alamofire. Если вы все еще не можете решить рассмотреть вопрос об изменении вашего вопроса с помощью дополнительного кода.

+0

Контроллеры представлений установлены правильно. В контроллере просмотра B - выполняются другие команды. Запросы alamofire были сделаны в viewDidLoad-методах A & B –

+0

Попробуйте добавить 'print (" log ")' (или 'println (" log ")' для Swift 1.2), прежде чем вы вызовете 'Alamofire.request'. Печатается ли она? – r4id4

+0

Да .. Я пробовал до и после .. эти команды печати печатаются. Я отредактировал свой вопрос, чтобы это отразить. –

0

Код Alamofire является асинхронным, это означает, что в то время как ваши операторы печати могут выполняться успешно и синхронно, некоторые функции в viewDidLoad или viewDidAppear (или где-то еще) могут быть циклическими навсегда, не позволяя alamofire.request выполнять его закрытие.

Например, этот код будет напечатан: check1, check3, но поскольку функция func внутри viewDidAppear блокируется, Alamofire не может выполнить свой асинхронный код. Поэтому в этом примере запрос Alamofire ничего не сделает. Если вы закомментируете бесконечный цикл, код будет работать.

override func viewDidLoad() { 
    super.viewDidLoad() 
    print("check1") 
    Alamofire.request(.GET, hubsURL).response { request, response, result, error in 
     print(response) 
     print("check2") 
    } 
    print("check"3) 
} 

override func viewDidAppear(animated: Bool) { 
    while (true != nil) { 
    } 
    print("After While") 
} 

Кроме того, я хотел бы предложить переход к Alamofire 3,0 https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%203.0%20Migration%20Guide.md

Смежные вопросы