swift - Realm.create 会用相同的主键更新对象吗?

标签 swift realm

我很好奇,如果我调用 realm.create,它会自动从 Realm 结果更新 Realm 对象吗?

// 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.
}

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

谢谢

最佳答案

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

这是一个基于您提供的代码的片段,用于演示这一点:

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 属性已更新为新值。

关于swift - Realm.create 会用相同的主键更新对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348051/

相关文章:

swift - map View 上的倒圆圈叠加(MapKit、MKOverlay、Swift)

swift - iOS : Sharing image in social network Swift

ios - 将 UIWebView 添加到 MKPinAnnotationView.detailCalloutAccessoryView

java - Realm 中的条件 WHERE

java - Realm 实例已经关闭,无法使用

swift - 传递数据时向后滑动以关闭子 VC

ios - 在 Haneke 和 SwiftyJSON 之间转换 JSON

ios - Realm.io 删除 Realm 文件

swift - Realm Sandbox OS X 问题

ios - key 更改后的 RLMException - 已使用不同的加密 key 打开