gpt4 book ai didi

ios - 如何更正更新 Realm 具有一对多关系的对象?

转载 作者:行者123 更新时间:2023-11-30 14:19:05 25 4
gpt4 key购买 nike

如何更正更新 Realm 具有一对多关系的对象?

想象一下,我有 UIViewController 可以以某种方式显示用户的个人资料。它是一个具有以下接口(interface)的 RLMObject:

class RDBUserProfile: RLMObject {
dynamic var name = ""
dynamic var places = RLMArray(objectClassName: "RDBPlace")
}

用户可以编辑个人资料。当用户想要更改位置时,我会显示模式 UITableViewcontroller 及其列表。这个 UITableViewcontroller 的界面如下:

class PlacesListViewController: UITableViewController {
private var dataSource = [[RDBPlace]]()
var choosenPlaces: [RDBPlace]?
...
}

我将 RLMArray 转换为 Array 并将其从初始 viewController 传递到 PlacesListViewController 的属性“choosenPlaces”,如下所示:

func placesList() -> [RDBPlace] {
var result = [RDBPlace]()
for object in RDBUserProfile.currentProfile().places {
let place = objects as! RDBPlace
result.append(place)
}
return result
}

在 PlacesListViewController 中,我以某种方式用 RDBPlace 数组填充“dataSource”(但不存储在 Realm 中)。

如果“choosenPlaces”中的 RDBPlace 等于“dataSource”中的 RDBPlace,我将其标记为“choosen”。

用户可以根据需要取消标记或标记任何新标记。然后他点击“完成”,我关闭 PlacesListViewController 并将新的 RDBPlace 数组传递给 UIViewController。

如果用户想要保存更改,请点击“保存”。我像这样更新 RDBUserProfile:

let userProfile = RDBUserProfile.currentProfile()
let realm = RLMRealm.defaultRealm()
realm.transactionWithBlock {
realm.deleteObjects(RDBPlace.allObjects())
userProfile.places.addObjects(places)
}

当用户选择同一组位置或向现有位置添加新位置时,会发生错误(崩溃)。我从 Realm 中删除 if 并尝试在同一事务中添加相同的对象。

如何正确删除所有未连接到 userProfile 的 RDBPlace?

最佳答案

此处的问题是您正在删除尝试添加到 RLMArray 中的对象。

您可以执行以下操作来避免异常:

realm.deleteObjects(Set(RDBPlace.allObjects()).subtract(places)

关于ios - 如何更正更新 Realm 具有一对多关系的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30708012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com