Ссылка на объект не установлена ​​на экземпляр объекта в iOS - PullRequest
0 голосов
/ 29 января 2019

Когда я вызываю API с Alamofire из iOS, получаю ошибку -

Ссылка на объект не установлена ​​на экземпляр объекта

Все остальные API работают нормально.Не знаю, это из бэкэнда или нет.

Я отлаживаю его и проверяю журнал командой po, но все параметры идут с запросом.

Кто-нибудь может предложить решение?

Любая быстрая помощь будет оценена.

Спасибо

Код приведен ниже:

let strToken: String = (USER_DEFAULT.value(forKey: "token") as? String)!
    let strQuerystring = "token=" + strToken
    let parameters: [String: String] = ["FirstName": txtFirstName.text!, "LastName":txtLastName.text!,"Gender":txtGender.text!,"DOB":strDate,"RelationId":strMemberID]

    callPostApi(fileName: postAddMember + strQuerystring, parameters: parameters) { responseObject, errorResponse in
        if(errorResponse == nil)
        {
            if let json = responseObject as? NSDictionary
            {
                let strStatus: Bool = json.value(forKey: "Status") as! Bool
                let strMessage: String = json.value(forKey: "Message") as! String
                if(strStatus == true)
                {
                    forAlert(strMessage)
                    _ = self.navigationController?.popViewController(animated: true)
                }
                else
                {
                    forAlert(strMessage)
                }
            }
            else
            {
                forAlert("noResponseMessage".localized)
            }
        }
        else
        {
            forAlert("noResponseMessage".localized)
        }
        SKActivityIndicator.dismiss()
    }
}

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Вам необходимо согласовать URLRequest с вашими параметрами в теле как Data

и создать запрос следующим образом:

    let auth = "Bearer"+token // or your Authorization type
    let url = URL.init(string:urlString)
    var request = URLRequest(url: url!)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.setValue(auth, forHTTPHeaderField: "Authorization")
    request.httpBody = try! JSONSerialization.data(withJSONObject: parameters)
    Alamofire.request(request)
           .responseJSON { response in
            // Handling your data 
    }

попробуйте это и надеемся, что это поможет вам.

вы можете увидеть: Как опубликовать вложенный json от SwiftyJson и Alamofire?

см. также: Использование manager.request с POST

0 голосов
/ 05 февраля 2019

Вам не нужно сериализовать parameters.Из Alamofire Docs параметры должны иметь тип Parameters

let parameters: Parameters = [
    "foo": "bar",
    "baz": ["a", 1],
    "qux": [
        "x": 1,
        "y": 2,
        "z": 3
    ]
]

В вашем случае import Alamofire, а затем объявить parameters вот так и не сериализовать его.

 let parameters: Parameters = [
        "FirstName": txtFirstName.text!,
        "LastName":txtLastName.text!,
        "Gender":txtGender.text!,
        "DOB":strDate,
        "RelationId":strMemberID
    ]
0 голосов
/ 29 января 2019

Объектом ответа не является json, вам необходимо сначала сериализовать его, прежде чем присваивать значения соответствующим переменным.как то так:

guard let dictionary = try? JSONSerialization.jsonObject(with:responseObject!,options: []) as! [String: AnyObject] else { return }

Надеюсь, что это работает.

...