У меня есть RESTfulAPI, из которого я извлекаю большой набор данных. Я сохраняющиеся его локально с помощью Realm и следующий вызов:Управление сделками с недвижимым имуществом
func addObjectType(object: ObjectType){
// Check for existence of data
if (realm.object(ofType: ObjectType.self, forPrimaryKey: object.id) == nil) {
// Persist your data easily
try! realm.write {
realm.add(object)
}
}
}
Приложение имеет функцию, чтобы удалить данные локально. Я осуществил это как следующий:
func deleteAllData() {
if(!realm.isEmpty){
do{
if(!realm.isInWriteTransaction) {
realm.beginWrite()
realm.deleteAll()
try! realm.commitWrite()
}
}
NotificationCenter.default.post(name: Notification.Name("updateUI"), object: nil)
}
}
Однако, глядя на Realm документации я вижу следующее:
Обозначает ли Realm в настоящее время в операции записи.
Предупреждение
Не просто проверить это свойство, а затем начать транзакцию запись всякий раз, когда объект должен быть создан, обновлены или удалены. Выполнение этого может привести к созданию большого количества транзакций записи, снижение производительности. Вместо этого всегда предпочитайте выполнять несколько обновлений во время одной транзакции.
Является ли моя реализация правильной?
Я чувствую, что не хватает некоторых проверки .. Общее правило эмпирическое
Вы должны всегда «commitWrite» после того, как закончите добавление/обновление, нет необходимости проверять 'isInWriteTransaction', и область, о которой говорилось выше, не требуется проверять, так как она снизит производительность. – Tj3n
Должен ли я сделать это и при добавлении нового объект через запись? (см. первый метод addObjectType) – mm24
Вам не нужно вызывать его, если вы используете закрытие записи, но проверка 'isInWriteTransaction' в большинстве случаев является чрезмерной осторожностью, поскольку у них есть закрытие записи – Tj3n