ios - 来自alamofire swift3的失败响应
问题描述
你好,我被 alamofire 困住了。
let keys = [CNContactPhoneNumbersKey, CNContactGivenNameKey]
let request = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor])
let contactStore = CNContactStore()
do {
try contactStore.enumerateContacts(with: request) {
(contact, stop) in
// Array containing all unified contacts from everywhere
self.contacts.append(contact)
}
}
catch {
print("unable to fetch contacts")
}
var contactArray = [[String:String]]()
for i in 0..<contacts.count{
var mobiles = ""
for num in contacts[i].phoneNumbers {
mobiles = num.value.stringValue
}
var theDict = ["contact_id": "\(i)", "full_name": contacts[i].givenName, "mobile_number": "\(mobiles)"]
contactArray.append(theDict)
}
dictParams["contacts"] = dictContacts
let theParams = ["contacts":contactArray] as [String:AnyObject]
print("dict theParams: \(theParams)")
这是打印的参数
dict theParams: ["contacts": <Swift._SwiftDeferredNSArray 0x604000233280>(
{
"contact_id" = 0;
"full_name" = Kate;
"mobile_number" = "62123123";
},
{
"contact_id" = 1;
"full_name" = Daniel;
"mobile_number" = "621231123";
},
{
"contact_id" = 2;
"full_name" = John;
"mobile_number" = "625435345";
}
)
]
我用这个代码把它发送到alamofire
func sendFriendList(dictContacts: [String:AnyObject] ,successBlock:((_ isSuccess: Bool, _ theFriendsResponse: FriendsResponse)->Void)?,errorBlock:((_ errorString:String)->Void)? )-> Void
{
Alamofire.request("url/ListRetrieve",
method: .post,
parameters: dictContacts,
encoding: URLEncoding.default,
headers: headers)
.responseJSON { response in
print("this is response retrieve \(response)")
以及来自alamofire的回应:
this is the response = retrieve FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 1." UserInfo={NSDebugDescription=Invalid value around character 1.}))
但是如果我更改参数只有这样的字符串 ["contacts":"test contact"]
alamofire 响应成功,它的工作。
请帮助我:)谢谢
解决方案
使用responseString
而不是responseJSON
. 然后用于JSONSerialization
将响应转换为JSON。
就像是 :
JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
func convertToDictionary(text: String) -> [String: Any]? {
if let data = text.data(using: .utf8) {
do {
return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
} catch {
print(error.localizedDescription)
}
}
return nil
}
推荐阅读
- python - 如何在 Python 中读取文件夹中的特定文件(范围内的文件)
- azure-pipelines - 是否可以在单个 Azure 管道中同时提取 SVN 和 Git?
- sql - SQL 查询时间
- bash - 使用 bash 生成人员/字符串的排列
- javascript - Mocha 测试超时,尽管 post 客户端运行良好
- node.js - 使用 Nodejs-Restify-Passport 每个用户一个会话
- email - Apps 脚本不会发送包含指向给定 G Suite 域上的 Google Drive 文件链接的电子邮件,没有错误消息
- dataweave - Dataweave 从 XML Mulesoft 中选择准确的标签
- mysql - hbm2ddl 不适用于旧声称的工作源代码中的某些实体类
- templates - 循环问题的烧瓶模板