Область.будет ли он обновлять объект с тем же первичным ключом?


Мне просто любопытно, если я позвоню 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.
}

В настоящее время мне кажется, что мне нужно снова прочитать из realm, чтобы получить последний объект. Делать поправьте меня, если я ошибаюсь.

Спасибо

1 3

1 ответ:

Да, указание update: true при вызове Realm.create(_:value:update:) приведет к обновлению существующего объекта.

Вот фрагмент, основанный на предоставленном вами коде, который демонстрирует это:

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 существующих объектов обновилось до нового значения.