如何在Realm数据库

时间:2017-01-22 14:33:06

标签: swift realm

我开始试用Realm数据库,但我不明白如何将这个层次结构写入数据库:

class Address {
 Properties for the address object
}

class Street {
 addresses = List<Address>()
 Plus other properties
}

class Area {
  streets = List<Street>()
}

class Manager {
 areas = List<Area>()
}
  1. 如果我现在添加一个新区域,我应该拨叫realm.write { areas.append(newAreaObject) }之类的内容吗? 将其添加到数据库中。那会写出所有的街道和地址吗?

  2. 如果我只想在街道上添加十个新地址怎么办?根据文档,List.append函数只能在write语句中。我应该做些像​​

    这样的事情

    for i in 0..<10 { addAddress(address) }

  3. 然后实施

    Street.addAddress(Address)
    {
        realm.write {street.append(address)} 
    }
    

    或者我可以致电for i in 0..<10 {street.append(address)}然后致电realm.write { areas.add(newAreaObject, update: true)}

    1. 如果我更新地址名称,我是否应该在那里进行写操作?
    2. 就这样,我以正确的方式做到这一点,并没有做很多写入减慢速度。对于每个类中的每个追加都有一个写操作我感到很奇怪,例如,如果您生成一个包含十个街道的区域,每个街道就有100个地址,并且对于每个追加,都会将其写入数据库。

      最好先将所有内容添加到列表中,然后将所有内容同时写入数据库。

      我查看了文档,但我不明白。感谢您的任何评论!

1 个答案:

答案 0 :(得分:0)

关于#1和#3:

  

对象的所有更改(添加,修改和删除)必须在写入事务中完成。

对于#2:

  

由于写入事务会产生不可忽略的开销,因此您应该构建代码以最大限度地减少写入事务的数量。

这意味着最好创建一个用于将对象添加到列表的事务,而不是:

for i in 0..<10 {
    realm.write {
        street.append(address)
    }
}

你应该做

realm.write {
    for i in 0..<10 {
        street.append(address)
    }
}

请在Why using namespace std is considered harmful?了解详情。