Сбой при назначении значения новому свойству с помощью Realm - PullRequest
0 голосов
/ 24 октября 2018

Я в основном хочу увеличить значение при выполнении действия.Итак, что я делаю - когда действие выполняется в первый раз, я присваиваю значение 1 новому свойству в Realm, а затем добавляю его в базу данных области.

Во второй раз, когда действие выполняетсяпосле выполнения, максимальное значение берется из всех значений в свойстве, и это максимальное значение увеличивается на 1, а затем добавляется в базу данных.

Но что происходит, это первый раз, когда я достигаю строки realm.add(chatMsgObj) происходит сбой, говоря: Can only add, remove, or create objects in a Realm in a write transaction - call beginWriteTransaction on an RLMRealm instance first.

Это код ..

func incrementID() -> Int {

let realm = try! Realm()
var myvalue = realm.objects(ChatMessage.self).map{$0.mainId}.max() ?? 1
myvalue = myvalue + 1
chatMsgObj.mainId = myvalue
realm.add(chatMsgObj) //CRASH HERE

return myvalue

}

1 Ответ

0 голосов
/ 24 октября 2018

Можно только добавлять, удалять или создавать объекты в области в транзакции записи - сначала вызовите beginWriteTransaction для экземпляра RLMRealm.

Вам нужно открыть область, а затем написать.

Узнайте больше о сфере здесь , и этот код должен работать для вас сейчас.

try! realm.write {
    realm.add(chatMsgObj)
}

РЕДАКТИРОВАТЬ : из приведенных ниже комментариев у вас возникла другая проблема: при записи по тому же первичному ключу загляните в документацию по области снова и это может быть проблемой конфигурации, однако,

вы можете попытаться удалить приложение из (симулятора / устройства), которое вы тестируете на нем, и снова запустить приложение.

Ивы наткнулись на

Попытка создать объект типа 'ChatMessage' с существующим значением первичного ключа '0'

, поэтому в этом новом сбое у вас есть 2опции.

1 - изменить PrimaryKey нового объекта, на котором оно написано.

2 - получить объект этого PrimaryKey и изменить его.

Теперь для извлечения и изменения части взгляните на этот код, у вас должна быть идея.

let realm = try! Realm()
let myChatObject = realm.objects(Dog.self).filter("youPrimaryKey == 1").first
try! realm.write {
    myChatObject!.something = newValue
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...