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

时间:2015-06-08 11:30:11

标签: ios swift realm

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

想象一下,我有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中,我以某种方式填充" dataSource"使用RDBPlace数组(但不存储在Realm中)。

如果RDBPlace来自" choosenPlaces"等于来自" dataSource"的RDBPlace;我将其标记为"选择"。

如果需要,用户可以解除标记或标记任何新内容。然后他点击"完成",我关闭PlacesListViewController并传递给UIViewController新的RDBPlace数组。

如果用户想要保存更改,他会点击"保存"。 我像这样更新RDBUserProfile:

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

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

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

1 个答案:

答案 0 :(得分:0)

此处的问题是,您要删除要添加到RLMArray的对象。

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

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