领域:为什么在更新对象时会丢失其子引用?

时间:2015-10-15 10:08:41

标签: ios realm

我正在为我的Realm模型编写一些单元测试但是在更新保存的Realm对象时遇到了问题。问题是在更新后丢失一对多引用。 请看下面的例子:

(我正在使用Quick,但即使你不知道它也应该是可读的)

// Create a test User.
let user = User.init()
user.account_id = 1
user.email = "foo@bar.com"
user.cards.append(Car(value: ["id": 1]))
user.cards.append(Car(value: ["id": 2]))
user.boxes.append(Box(value: ["id": 5]))
user.boxes.append(Box(value: ["id": 6]))

// Save User.
self.testRealm.write { () -> Void in
    self.testRealm.add(user, update: true)
}

// Get User.
let testUser = self.testRealm.objectForPrimaryKey(User.self, key: 1)
expect(testUser).toNot(beNil())

// Update the user by creating a new one.
let newuser = User.init()
newuser.account_id = 1
newuser.email = "fooBar@bar.com"

// Update a test User.
self.testRealm.write { () -> Void in
    self.testRealm.add(newuser, update: true)
}

// Get User again.
let testUpdatedUser = self.testRealm.objectForPrimaryKey(User.self, key: testUserId)
expect(testUpdatedUser?.email).to(equal("fooBar@bar.com"))
expect(testUpdatedUser?.boxes.count).to(equal(2)) <--- FAILS
expect(testUpdatedUser?.cards.count).to(equal(2)) <--- FAILS

我的模特:

import RealmSwift

class User: Object {

    override static func primaryKey() -> String? {
        return "account_id"
    }

    dynamic var email = ""

    // The list of Boxes that user owns.
    let boxes = List<Box>()

    // The list of Cars that user owns.
    let cars = List<Car>()
}

1 个答案:

答案 0 :(得分:1)

这是预期的行为。如果设置可选参数update: true,则具有nil值的属性将与现有值合并。列表属性可能不是零。与某些对象的列表相比,空列表也可以是合法的最新值。

您需要检索对象并根据您的意愿手动合并属性。