Imperial пытается выполнить запрос к веб-сайту с использованием alamofire, и моя проблема заключается в следующем:
Когда я использую соответствующий код в функции ViewController класса CocoaTOuch viewDidLoad (), все работает нормально. code)
super.viewDidLoad()
let loginActionUrl = url
do{
let parameters = [
"p_user":user,
"p_password": password
]
AF.request(loginActionUrl, method: .post, parameters: parameters).responseJSON
{response in
if let header = response.response?.allHeaderFields as? [String: String],
let responseUrl = response.request?.url{
let sessionCookies = HTTPCookie.cookies(withResponseHeaderFields: header, for: responseUrl)
......
Если я повторяю один и тот же код внутри закрытой функции в быстром (не касающемся какао) классе, то у меня нет ответа, при отладке он пытается выполнить задачу запроса дважды, а затем выпрыгивает из {ответа в блоке кода.
Код следующий:
private func checkInWithAeA(withLogIn: String, password: String) -> (Bool){
var companyUSerRecognized: Bool = false
var startIndex: String.Index!
let loginActionUrl = url
do{
let parameters = [
"p_user" : withLogIn,
"p_password": password
]
AF.request(loginActionUrl, method: .post, parameters: parameters).responseJSON
{response in
if let header = response.response?.allHeaderFields as? [String: String],
let responseUrl = response.request?.url{
let sessionCookies = HTTPCookie.cookies(withResponseHeaderFields: header, for: responseUrl)
companyUSerRecognized = true
......
Сейчас я не понимаю, что происходит, но у меня второй раз такая же проблема. Я стараюсь избегать установки большого количества кода в viewController, используя другие классы поддержки, следуя рекомендациям, но я уже пытался сделать это с помощью firebase, и у меня та же проблема, запрос только к базе данных работал в классах UIViewcontroller (в некоторых случаях) и теперь работает так же, я не могу получить никакого результата, когда выполняю код в чистом файле swift.
Есть ли какие-либо ограничения на это. Почему я не могу сделать что-либо вроде запроса alamofire или запроса firebase к базе данных реального времени из класса UIViewController?
Здесь я добавляю некоторую информацию:
var myConnectionController: ConnectionController = ConnectionController()
let (companyUSerRecognized, error) = myConnectionController.chekUserIDandPassWord(forTheCompany: self.companyName, logInName: self.companyLogIn, password: self.companyPassword)
Этот вызов к классу ConnectionController (это быстрый простой класс) просит подключения к веб-странице. Если ответ хороший, то получается истина и процесс продолжается.
Вызываемая функция имеет оператор switch:
public func chekUserIDandPassWord(forTheCompany: String, logInName: String, password: String) -> (Bool, String){
var companyUSerRecognized: Bool!
var error: String!
switch forTheCompany {
case "(AEA)":
companyUSerRecognized = checkInWithAeA(withLogIn: logInName, password: password)
break
.....
Это то, что называется Check In With AeA. (Функция, которую я только что упомянул ранее). То, что я хочу, это получить куки соединения в ответ, проверить их, и если они в порядке, возвращается true.
Я уже сделал это в функции viewDidLoad () ViewController, на самом деле я могу проанализируйте ответ с помощью SwiftSoup, et c. Но если я сделаю это таким образом, я не смогу это сделать.
Еще раз спасибо