新对象数据未在域中更新

时间:2018-04-22 13:21:49

标签: ios swift realm

使用存储到域中的Alamofire解析Json数据并显示到表中工作正常。什么时候向多个对象添加到领域应用程序崩溃

杰森:

{ 
"worldpopulation": 
    [
         {
         "rank":1,"country":"China",
         "population":"1,354,040,000",
         "flag":"http://www.androidbegin.com/tutorial/flag/china.png"
         }, 

         {
         "rank":2,"country":"India",
         "population":"1,210,193,422",
         "flag":"http://www.androidbegin.com/tutorial/flag/india.png"
         }, 

         {
         "rank":3,"country":"United States",
         "population":"315,761,000",
         "flag":"http://www.androidbegin.com/tutorial/flag/unitedstates.png"
         }, 

         {
         "rank":4,"country":"Indonesia",
         "population":"237,641,326",
         "flag":"http://www.androidbegin.com/tutorial/flag/indonesia.png"
         }, 
         ] 
} 

我第一次只在表格视图中显示国家/地区名称 模型类

class Item : Object
{
    @objc dynamic var name = ""

}

接下来,当我将该类添加到下一个对象后,我可以将填充添加到表视图中

class Item : Object
{
    @objc dynamic var name = ""
    @objc dynamic var population = ""

}

这是代码更新并显示数据

var realm: Realm!
     var objectsArray: Results<Item> {
        get {
            return realm.objects(Item.self)
        }
    }

解析数据

func jsonparsing()
    {
        let url = URL(string:"http://www.androidbegin.com/tutorial/jsonparsetutorial.txt")

        realm = try! Realm()

        Alamofire.request(url!, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: nil)
            .responseJSON(completionHandler: {
                response in
                let res = response.result.value as! [String:Any]
                let arrayvalue = res["worldpopulation"] as! [[String:AnyObject]]
                for imagearray in arrayvalue
                {
                    let item = Item()
                    try! self.realm.write {
                        item.name = imagearray["country"] as! String
                       item.population =  imagearray["population"] as! String
                        self.realm.add(item)
                        }
                    self.reloaddata()
                }
             }).resume()

    }

如何将多个对象更新到领域,显示到表视图中

2 个答案:

答案 0 :(得分:0)

将现有对象添加或更新到Realm中。 如果对象具有主键,则仅传递true以进行更新。如果Realm中没有对象具有相同的主键值,则插入该对象。否则,使用任何更改的值更新现有对象。

你应该使用

  

self.realm.add(item,update:true)

您应该将主键添加到对象

答案 1 :(得分:0)

您必须在班级中提供主键。

来自领域文档的信息https://realm.io/docs/swift/latest/#objects-with-primary-keys

  

如果您的模型类包含主键,则可以使用Realm   根据主键智能地更新或添加对象   值使用Realm()。add(_:update :)。

// Creating a book with the same primary key as a previously saved book
let cheeseBook = Book()
cheeseBook.title = "Cheese recipes"
cheeseBook.price = 9000
cheeseBook.id = 1

// Updating book with id = 1
try! realm.write {
    realm.add(cheeseBook, update: true)
}
  

如果已存在主键值为“1”的Book对象   数据库,然后该对象将被更新。如果没有   存在,然后将创建并添加一个全新的Book对象   数据库。