无法将 JSON 响应添加到领域

Posted

技术标签:

【中文标题】无法将 JSON 响应添加到领域【英文标题】:Cannot add JSON response to realm 【发布时间】:2016-05-25 02:53:23 【问题描述】:

我正在尝试将我的 POST 响应添加到领域,但我抛出了这个错误:

无法将“字符串”类型的值转换为预期的参数类型“对象”

这是我的代码:

     Alamofire.request(.POST, Data.loginEndpoint, parameters: parameters)
        .responseObject  (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.name, update: true)
                

                catch let err as NSError 
                    print("Error with realm: " + err.localizedDescription)
                

            
            else
            
                print("JSON data is nil. 123")
            
    

更新

我收到这个错误

致命错误:在展开可选值时意外发现 nil

user.name = result["name"]!.string

另外,我想从我的 do catch 中删除 !,但 swift 不允许我这样做。我如何解决它?

我的代码:

Alamofire.request(.POST, Data.loginEndpoint, parameters: parameters)
        .responseObject  (response: Response<Particulars, NSError>) in

            print(response.request)
            print(response.response)
            print(response.result)



            if let result = response.result.value
            

                do
                    let user = Particulars()
                    user.name = result["name"]!.string
                    user.apiToken = result["api_token"]!.string
                    let realm = try Realm()
                    realm.add(user, update: true)
                    print(Realm.Configuration.defaultConfiguration.fileURL)
                

                catch let err as NSError 
                    print("Error with realm: " + err.localizedDescription)
                

            
            else
            
                print("JSON data is nil. 123")
            
    

【问题讨论】:

我对 Realm 不是很熟悉,但看起来 Realm 想要一个继承自其“Object”类型的类对象。我想你必须创建一个类对象,其中包含你需要的所有属性(姓名、电子邮件等)在收到响应时设置这些属性,然后将该对象保存到 Realm。 【参考方案1】:

以下 sn-p 直接来自 Realm 文档。领域需要一个继承自其“对象”类型的类对象。您必须创建一个具有所有您需要的属性(姓名、电子邮件等)的类对象,当您收到响应时设置这些属性,然后将该对象保存到 Realm。

class Dog: Object 
  dynamic var name = ""
  dynamic var age = 0

class Person: Object 
  dynamic var name = ""
  dynamic var picture: NSData? = nil // optionals supported
  let dogs = List<Dog>()


// Use them like regular Swift objects
let myDog = Dog()
myDog.name = "Rex"
myDog.age = 1
print("name of dog: \(myDog.name)")

// Get the default Realm
let realm = try! Realm()

// Query Realm for all dogs less than 2 years old
let puppies = realm.objects(Dog).filter("age < 2")
puppies.count // => 0 because no dogs have been added to the Realm yet

// Persist your data easily
try! realm.write 
   realm.add(myDog)

【讨论】:

嗨@Richmond 我已经尝试过了,但我遇到了一些错误(请参阅更新后的帖子)。你能帮帮我吗? 看起来您的 JSON 中没有“名称”键的值。我建议阅读Optionals。你必须使用'!'因为 `result["name"]` 是一个 Optional。这意味着它可以是 nil 也可以不是 nil。在你的情况下,它是零。当你使用'!'您是在告诉它显示其真正价值。在您的情况下,该值为 nil,但您仍在调用 .string。由于您在 nil 对象上调用 .string,因此会引发异常 但是当我打印结果时我能够得到一个输出,所以它不应该是 nil

以上是关于无法将 JSON 响应添加到领域的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AlamofireObjectMapper 将 JSON 字典添加到领域

如果从已保存在数据库(领域)中更改,则观察 JSON 响应

创建新的领域列表并添加项目

如何将 MongoDB 领域应用程序用户添加到 Atlas 集合?

信息领域热词分析的-质量属性战术-可用性战术

如何将 MKAnnotation 添加到领域 [关闭]