let params = ["first":"string", "second":["any":""]] as [String: Any]
let serverUrl = URL(string: "https://example.execute-api.ap-southeast-2.amazonaws.com/prod")!
var request = URLRequest(url:serverUrl)
request.httpMethod = "POST"
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("secret", forHTTPHeaderField: "X-Api-Key")
do {
request.httpBody = try JSONSerialization.data(withJSONObject: params, options: [])
} catch _ as NSError {
return
}
这在第8行的新ios模拟器上崩溃了,但是当再次尝试工作时。我测试了不同的假设,但似乎无法找出原因。
我测试过了:
崩溃错误消息是'Thread 1:EXC_BAD_ACCESS(code = EXC_i386_GPFLT)'。我已经检查了线程是否有任何错误,但是我的中央调度似乎正在以正确的顺序输出正确的数据。
任何线索?
此问题仅限于模拟器还是会出现在物理ipad中?
编辑:进一步的谷歌搜索表明这是一个问题,空字符串以某种方式有助于返回零。我可以将空字符串强制为空值,但是我仍然感到困扰的是,上面的代码只能在一个新的模拟器中崩溃,但之后可以完美地运行。
答案 0 :(得分:0)
好吧,也许你需要用你的参数编码你的urlRequest。首先,您必须将字典转换为[String : Any]
,然后编辑您的编码。例如,您可以这样做:
let params : [String : Any] = ["first":"string", "second":["any:""]]
do {
request = try URLEncoding.default.encode(urlRequest, with: params)
} catch _ as NSError {
return
}
现在,如果您的请求有POST或PUT方法,您必须通过http正文和标题指定您的设置:
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters,
options: [.prettyPrinted])