删除期间Swift数组对象无效

时间:2016-10-06 05:00:21

标签: realm swift3

Swift 3,Xcode 8,Realm 2.0.0

我有一个Realm对象,它有一个List属性,如下所示:

class Entry: Object{
  let approaches = List<Approach>()
  //...
}

我提取了一个Entry列表中包含Approach列表的对象,以便entry.approaches是一个方法列表。 然后我用列表加载我自己的单独数组,以便我可以使用Approach个对象来操作它的内容。

var approaches = [Approach]()
for approach in entry.approaches{
  approaches.append(approach)
}

在保存对Entry的一些修改之前,我想删除所有现有的approaches并将其替换为我在代码中其他地方放入approaches数组的新元素。

try realm.write {
  print(approaches) //This prints out my Approach objects
  realm.delete(entry.approaches) //Clear out existing items in list
  print(approaches) //-!- This prints [[invalid object], [invalid object]]
}

如果我手动将Realm对象放在我自己的approaches数组中,为什么在删除entry.approaches时它们会失效?

是否有更好的方法来替换列表中的所有对象?

1 个答案:

答案 0 :(得分:0)

这是预期的行为。也许你混淆从Realm删除对象和从List中删除对象。 realm.delete()执行前者。对象已从Realm中删除。然后指向对象的所有引用都将失效。 如果您要清除entry.approaches,而不是从Realm中删除,则可以使用List.removeAll()方法。

try realm.write {
    entry.approaches.removeAll()
}

仅供参考:将所有列表项复制到数组可以写成如下所示。无需迭代列表。

let approaches = [Approach](entry.approaches)