从api调用我的文本标签中的值不会更新

时间:2016-10-24 06:40:39

标签: ios json swift

我有一个api调用,我将一个参数值传递给该api。我正在附加一个模型数据,从那里我试图在我的标签中显示。但是,当我做api调用自己并尝试打印标签名称时,它显示崩溃指数超出范围

   func showprofileapi () {

        let headers = [
            "cache-control": "no-cache",
            "postman-token": "4c933910-0da0-b199-257b-28fb0b5a89ec"
        ]

        let jsonObj:Dictionary<String, Any> = [
            "customerID" : "5"
                    ]

        if (!JSONSerialization.isValidJSONObject(jsonObj)) {
            print("is not a valid json object")
            return
        }

        if let postData = try? JSONSerialization.data(withJSONObject: jsonObj, options: JSONSerialization.WritingOptions.prettyPrinted) {
            let request = NSMutableURLRequest(url: NSURL(string: "http://MyProfile.php")! as URL,
                                              cachePolicy: .useProtocolCachePolicy,timeoutInterval: 10.0)
            request.httpMethod = "POST"
            request.allHTTPHeaderFields = headers
            request.httpBody = postData

            let session = URLSession.shared
            let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
                if (error != nil) {
                    ///print(error)
                } else {

                    DispatchQueue.main.async(execute: {

                        if let json = (try? JSONSerialization.jsonObject(with: data!, options: [])) as? Dictionary<String,AnyObject>
                        {
                            let status = json["status"] as? Int;
                            if(status == 1)
                            {
                                print("SUCCESS....")
                                if (json["myprofile"] as? NSDictionary) != nil
                                {

                                    print("SUCCESS  ......22....")
                                    print(json)

                                    DispatchQueue.main.async(execute: {

                                        print("INSIDE CATEGORIES")



                                        self.Profileddatas.append(MyProfiledData(json:json as NSDictionary))

                                      print("Product Name : ", self.Profileddatas[0].custName)    


                                    })


                                }
                            }
                        }
                    })
                }
            })

            dataTask.resume()
        }
     }

我上面的代码是我的api调用,当我尝试在我的控制台中打印它的崩溃时:

//  print("Product Name : ", self.Profileddatas[0].custName)

api调用后我的json输出是:

{
  "status": 1,
  "message": "My Profile Details are.",
  "myprofile": {
    "CustomerName": "ram",
    "CustomerEmail": "ram@gmail.com",
    "CustomerMobile": "",
    "CustomerAddress": "",
    "CustomerUsername": "",
    "CustomerPassword": " "
  }
}

我的追加数据模型类是:

class MyProfiledData
{
    var custName : String?
    var custEmail : String?
    var custMobile : String?
    var custAddress : String?
    var custUsername : String?
    var custPassword : String?

    init(json:NSDictionary)
    {
        self.custName = json["CustomerName"] as? String
        self.custEmail = json["CustomerEmail"] as? String
        self.custMobile = json["CustomerMobile"] as? String
        self.custAddress = json["CustomerAddress"] as? String
        self.custUsername = json["CustomerUsername"] as? String
        self.custPassword = json["CustomerPassword"] as? String


    }
}

请帮帮我。

由于

4 个答案:

答案 0 :(得分:1)

更改if (json["myprofile"] as? NSDictionary) != nilif let json = json["myprofile"] as? NSDictionary,因为你的'json&#39;在初始化MyProfiledData的上下文中出错了

答案 1 :(得分:1)

您通过MyMrofileData类中的错误键访问JSON数据。您可以通过

在init(json)调用中传递[&#34; myprofile&#34;] dict
_ = list(map(list.sort, lists))

或通过他们的右键访问它:

if let myProfile = json["myprofile"] as? NSDictionary {
    DispatchQueue.main.async(execute: {
        self.Profiledatas.append(MyProfileData(json:myProfile))
    })
}

答案 2 :(得分:1)

在你的init函数中,它的结构不正常,如果你只发送你的json的个人资料节点,它就会起作用

 {
    "CustomerName": "ram",
    "CustomerEmail": "ram@gmail.com",
    "CustomerMobile": "",
    "CustomerAddress": "",
    "CustomerUsername": "",
    "CustomerPassword": " "
  }

使用

self.Profileddatas.append(MyProfiledData(json:Json["myprofile"] as NSDictionary))

答案 3 :(得分:0)

if (json["myprofile"] as? NSDictionary) != nil
{
         print("SUCCESS  ......22....")
        print(json)

        DispatchQueue.main.async(execute: {

                print("INSIDE CATEGORIES")

                self.Profileddatas.append(MyProfiledData(json:json["myprofile"] as! NSDictionary))
                print("Product Name : ", self.Profileddatas[0].custName)

                self.getvalue ()

         })


}