我正在为我的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>()
}
答案 0 :(得分:1)
这是预期的行为。如果设置可选参数update: true
,则具有nil值的属性将与现有值合并。列表属性可能不是零。与某些对象的列表相比,空列表也可以是合法的最新值。
您需要检索对象并根据您的意愿手动合并属性。