更新领域列表会删除其他名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新领域列表会删除其他名称相关的知识,希望对你有一定的参考价值。

我正在尝试更新领域列表,但出于某种原因,它删除了最后一个,而只添加了新的。

这就是我在做的事情:

if !RealmService.shared.ifPortfolioExists(name: newPortfolio.name){//Check if portfolio with given name already exists
            newPortfolio.transactions.append(newTransaction)//Add new transaction to the portfolio's transactions list
            newTransaction.portfolio = newPortfolio//Link portfolio to transaction

            RealmService.shared.create(newPortfolio)
            RealmService.shared.create(newTransaction)

        }else{
            newPortfolio.transactions.append(newTransaction)
            newTransaction.portfolio = newPortfolio
            RealmService.shared.create(newTransaction)

        }

这是创建功能:

func create<T: Object>(_ object: T){
        do {
            try realm.write{
                realm.add(object, update: true)
            }
        } catch {
            post(error)
        }
    }

我也有文件中提到的primaryKeys()

我做错了什么,有人可以解释一下吗?

答案

根据Realm class description,对象必须有一个主键才能使更新生效。既然你没有提到这一点,我认为你的领域对象缺乏它。

如果对象具有主键,则仅传递true以进行更新。如果Realm中没有对象具有相同的主键值,则插入该对象。否则,使用任何更改的值更新现有对象。

另一答案

解决方案是我必须首先获得所有当前的。

这是我应用的逻辑:

let currentTransactions = RealmService.shared.realm.objects(Transaction.self).filter("portfolio_name = '(selectedPortfolioName)'")
        if !RealmService.shared.ifPortfolioExists(name: newPortfolio.name){
            for transaction in currentTransactions{
                newPortfolio.transactions.append(transaction)
            }
            newPortfolio.transactions.append(newTransaction)
            newTransaction.portfolio = newPortfolio

            RealmService.shared.create(newPortfolio)
            RealmService.shared.create(newTransaction)

        }else{
            for transaction in currentTransactions{
                newPortfolio.transactions.append(transaction)
            }
            newPortfolio.transactions.append(newTransaction)
            newTransaction.portfolio = newPortfolio
            RealmService.shared.create(newTransaction)

        }

以上是关于更新领域列表会删除其他名称的主要内容,如果未能解决你的问题,请参考以下文章

从 SwiftUI 列表和领域中删除记录时出错

从列表视图中删除一行后刷新片段

领域:删除过时的对象

如何从 SwiftUI 列表和领域中删除数据

从活动更新视图页面中片段中的列表视图

小程序各种功能代码片段整理---持续更新