我有一个POST请求,其中包含我想要接收的某些数据。但是,当我使用responseArray
时,我会抛出此错误
json数据为零
但是当我使用responseJSON
时,一切都会好的。为什么会这样?
此代码不起作用:
Alamofire.request(.POST, Data.todoEndpoint, parameters: parameters)
.responseArray { (response: Response<[Particulars], NSError>) in
print(response.request)
print(response.response)
print(response.result)
if let result = response.result.value
{
do{
print(Realm.Configuration.defaultConfiguration.fileURL)
let realm = try Realm()
realm.add(result, update: true)
}
catch let err as NSError {
print("Error with realm: " + err.localizedDescription)
}
}
else
{
print("JSON data is nil.")
}
}
但这很好:
Alamofire.request(.POST, Data.todoEndpoint, parameters: parameters)
.responseJSON { response in
print(response.request)
print(response.response)
print(response.result)
if let result = response.result.value
{
print(result)
}
else
{
print("JSON data is nil.")
}
}
我需要responseArray
以便我可以(response: Response<[Particulars], NSError>)
并将我的JSON响应存储到领域
更新
这是我要连接的Particulars类。我试图根据本文https://blog.hyphe.me/realm-and-alamofire-in-a-effective-harmony/
将我的JSON对象映射到Realmimport Foundation
import RealmSwift
import ObjectMapper
class Particulars: Object, Mappable {
dynamic var name = ""
dynamic var email = ""
dynamic var id = ""
dynamic var profilePicture = ""
dynamic var username = ""
dynamic var apiToken = ""
override static func primaryKey() -> String? {
return "id"
}
//Impl. of Mappable protocol
required convenience init?(_ map: Map) {
self.init()
}
func mapping(map: Map) {
id <- map["id"]
name <- map["name"]
email <- map["email"]
profilePicture <- map["profile_picture"]
username <- map["username"]
apiToken <- map["api_token"]
}
}
这是JSON的回应:
[
"name" : "Jonny Walker",
"api_token" : "qwertyuiop1234567890",
"profile_picture" : "http:default_profile_picture.jpg",
"id" : 10,
"email" : "jwalker@gmail.com",
"username" : "jonny"
]
更新2
我的完成处理程序与responseObject
一起正常运行,但我的realm.add xxx
正在抛出此错误
无法转换类型&#39;字符串&#39;的值预期参数类型&#39;对象&#39;
我的代码可在此处找到https://codeshare.io/v4M9M(第19-25行)
答案 0 :(得分:1)
Alamofire页面显示了如何处理响应,但未列出responseArray方法。 https://github.com/Alamofire/Alamofire#response-serialization
您可以使用responseJSON获取JSON并转换为您想要的数组。它看起来像这样,(根据你的JSON响应对其进行更改)
Alamofire.request(.POST, Data.todoEndpoint, parameters: parameters)
.responseJSON { response in
guard response.result.isSuccess else
{
//handle error
return
}
guard let value = response.result.value as? [String: AnyObject],
particularsArrayJson = value["particulars"] as? [[String: AnyObject]]
else{
//Malformed JSON, handle this case
}
var particulars = [Particulars]()
for particularsDict in paricularsArrayJson{
particulars.append(Pariculars(json:particularsDict))
}
}
您必须在您的详细信息中使用初始化程序,该初始化程序将从提供的JSON初始化。
更新:
realm add方法接受一个从Object扩展的类的实例 Object是Realm提供的类。因此,您可能需要阅读更多文档。
你应该这样做
realm.add(particulars, updated:true)