Вопрос по Realm

realm

#1

Ситуация такова - есть база данных с ключем и логикой определения номера ключа

   override static func primaryKey() -> String? {
    return "messageId"
}
func IncrementaID() -> Int{
    let realm = try! Realm()
    return (realm.objects(messages.self).max(ofProperty: "messageId") as Int? ?? 0)+1
}

При инициализации приложения с Firebase скачиваются данные и закладываются в realm

 func messageInitial() {
    
    self.ref = Database.database().reference(withPath: "messages")
 
        self.ref.observe(.value, with: {[weak self] (snapshot) in
             realm = try! Realm()
            for item in snapshot.children {
                let messangeBase = MessagesFireBase(snapshot: item as! DataSnapshot)
                messagesFirebase.append(messangeBase)
                let messageForRealm = messages()
                messageForRealm.messageText = messangeBase.messageText
                messageForRealm.messageId = messangeBase.messageId
                try! realm.write({
                    realm.add(messageForRealm)
                  
                })
                
            } 

Проблема что при первом добавление элемента приложение краситься, ибо определитель ключа func IncrementaID() не понимает что в нем есть элементы и выдает ошибку, что не может создать ключ значение 1, но при этом в базу добавляется правильный номер и элемент.

Вопрос - куда копать??


#2

Попробуйте так

let realm = try! Realm()
if let realmObject = realm.objects(messages.self) {
    return (realmObject.max(ofProperty: "messageId") as Int? ?? 0)+1
}

return 1