Я создал меню, в котором пользователь может получить доступ к нескольким кнопкам, чтобы повернуть и изменить статус документа. Каждый раз, когда пользователь выбирает кнопку, изменения записываются в базу данных realm .
//changes the status of the dc
case "changeStatus" :
if let marker = documentationMarkers.first(where: {$0.documentationId == doc.id}) {
let nav = UINavigationController()
let ctrl = StatusPickerViewController()
ctrl.delegate = self
nav.pushViewController(ctrl, animated: true)
nav.modalPresentationStyle = .popover
self.present(nav, animated: true)
nav.popoverPresentationController?.permittedArrowDirections = .any
nav.popoverPresentationController?.sourceView = marker
nav.popoverPresentationController?.sourceRect = marker.bounds
}
//rotates the document
case "rotateMarker" :
if let marker = documentationMarkers.first(where: {$0.documentationId == doc.id}) {
marker.rotate()
let documentation = documentations.first(where: {$0.id == marker.documentationId})
var rotation = documentation?.rotation.value ?? 0
rotation = (rotation + 15) % 360
_ = self.updateRotation(documentation: documentation!, rotationAngle: rotation)
}
updateRotation метод находится в расширении хранилища и записывает изменения в БД:
func updateRotation(documentation: Documentation, rotationAngle: Int) throws {
if let realm = try? Realm() {
try realm.write {
documentation.updated = Date()
documentation.rotation.value = rotationAngle
}
return
}
throw MobiplanError.invalidStateError(message: "Opening the database failed")
}
Моя кнопка подтверждения на данный момент пуста, потому что я не знал, как ее реализовать, чтобы изменения были зафиксированы в базе данных, когда ее и не каждый раз, когда выбирается другая кнопка.
Так, например, когда вы нажимаете кнопку вращения 100 раз, база данных изменяется 100 раз. Он должен изменить его только один раз при нажатии кнопки подтверждения.
Я думал о struct с обнуляемыми типами с вращением и статусом
struct DocumentationChanges {
var statusId: String
var rotation: Int
}