【问题标题】:Realm.create will it update the object with the same primary key?Realm.create 会用相同的主键更新对象吗?
【发布时间】:2016-07-13 09:43:14
【问题描述】:

我很好奇,如果我打电话给realm.create,它会自动更新realm object from the realm results吗?

// Assuming a "Book" with a primary key of `1` already exists.
try! realm.write {
realm.create(Book.self, value: ["id": 1, "price": 9000.0], update:   true)
// the book's `title` property will remain unchanged.
}

目前看来我需要再次从领域读取以获取最新对象。如果我错了,请纠正我。

谢谢

【问题讨论】:

    标签: swift realm


    【解决方案1】:

    是的,在调用Realm.create(_:value:update:) 时指定update: true 将导致现有对象被更新。

    这是一个基于您提供的代码的 sn-p 代码:

    class Book: Object {
        dynamic var id = ""
        dynamic var title = ""
        dynamic var price = 0.0
    
        override class func primaryKey() -> String? { return "id" }
    }
    
    
    let realm = try! Realm()
    let book = Book(value: ["1", "To Kill a Mockingbird", 9.99])
    try! realm.write {
        realm.add(book)
    }
    
    let results = realm.allObjects(ofType: Book.self)
    
    try! realm.write {
        realm.createObject(ofType: Book.self, populatedWith: ["id": "1", "price": 7.99], update: true)
    }
    
    print(book)
    print(results)
    

    此代码产生以下输出:

    Book {
        id = 1;
        title = To Kill a Mockingbird;
        price = 7.99;
    }
    Results<Book> (
        [0] Book {
            id = 1;
            title = To Kill a Mockingbird;
            price = 7.99;
        }
    )
    

    如您所见,现有对象的price 属性已更新为新值。

    【讨论】:

    • 感谢您的验证和详细的演示!原来我的钥匙有错字!
    【解决方案2】:

    如果有人再次偶然发现这个问题,有两种方法可以在 Swift 中为 Realm 更新插入。为了回答您的问题,两者都会导致现有对象被更新。

    如果您有对象,请使用Realm.add(_:update:) 更新插入。

    try! realm.write {
        realm.add(bookToUpsert, update: .modified)
    }
    

    如果您有 JSON,请使用 Realm.create(_:value:update:)

    try! realm.write {
        realm.add(Book.self, value: ["id": "1", "price": 7.99], update: .modified)
    }
    

    我将.modified 传递给两者,但更新需要UpdatePolicy。可以是.error.modified.all

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多