【问题标题】:How to pass dynamic parameters in requst.httpBody of POST method如何在 request.http POST 方法的正文中传递动态参数
【发布时间】:2016-12-21 13:07:51
【问题描述】:

在 xcode 7.3 我更新到 xcode 8.2 和 swift 3 之前,我一直可以正常访问我的网络服务,现在我的应用程序崩溃了,这是我的代码

func jsonParsingFromURL () throws {

    let WSLink = "http://XXXXX.co/itXXXXMS/webservice.asmx/GXXXXXX"
    let url = URL(string: WSLink)
    let bodyData = "lastlogindate=\(todayDate)&CompanyId=\(compID)"  //problem is here

    let request:NSMutableURLRequest = NSMutableURLRequest(url:url!)
    request.httpMethod = "POST"
    request.httpBody = bodyData.data(using: String.Encoding.utf8);

    NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: OperationQueue.main) {(response, data, error) in

        guard let _ = data else { return }
        self.startParsing(data!)
    }
}

func startParsing(_ data :Data) {

    //Am getting error here in this line
    let dict: NSDictionary!=(try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)) as! NSDictionary  
    arrDict.removeAllObjects()

    for i in 0  ..< (dict.value(forKey: "results") as! NSArray).count {
        arrDict.add((dict.value(forKey: "results") as! NSArray) .object(at: i))
    }
}

json 文本不是以数组或对象开头,并且选项允许 片段未设置

其实我找到了错误的原因,但不知道如何解决它。

当我写为时,让 bodyData = "lastlogindate=26/11/2016&CompanyId=3" //它正在工作。

当我将参数包装在来自先前视图控制器的动态变量中时,例如

让 date = "26/11/2016",让 id = "3" 和

let bodyData = "lastlogindate=(date)&CompanyId=(id)" 然后出现错误。

所以基本上我的问题是如何在 swift 3 中将动态变量包装到 request.httpBody 中?

【问题讨论】:

  • 但在 swift 2.2 之前它工作正常
  • 昨天我更新了 xcode,今天它给出了这个错误,swift 3 有什么改变吗?
  • 那你有什么建议?
  • 我在浏览器中测试了它的工作原理
  • 尝试将序列化中的options设置为.allowFragments

标签: ios json web-services rest swift3


【解决方案1】:

我的问题是在将参数传递给bodyData时出现在这一行:

let bodyData = "lastlogindate=\(todayDate)&CompanyId=\(compID)"

//example lastlogindate = "12/24/2016" and CompanyId = 134

当我执行print(bodyData) 时,我得到的输出为 "lastlogindate=可选(12/24/2016)&CompanyId=可选(134)"

我不知道为什么在 Swift 3 中添加了 optional
在 Swift 2.2 中,它没有添加 optional

所以,我做的是

let bodyData = "lastlogindate=" + todayDate + "&CompanyId=" + compID

现在,当我执行 print(bodyData) 时,它会给我正确的输出

lastlogindate=12/24/2016&CompanyId=134.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    相关资源
    最近更新 更多