如何更正具有一对多关系的更新领域对象?
想象一下,我有UIViewController以某种方式显示用户的个人资料。
它是具有以下接口的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)
}
当用户选择同一组地点或向现有地点添加新地点时,会发生错误(崩溃)。
我从领域中删除if并尝试在同一事务中添加相同的对象。
如何正确删除所有未连接到userProfile的RDBPlace?
最佳答案
这里的问题是您要删除要添加到RLMArray
中的对象。
您可以执行以下操作以避免出现异常:
realm.deleteObjects(Set(RDBPlace.allObjects()).subtract(places)