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
时它们会失效?
是否有更好的方法来替换列表中的所有对象?
答案 0 :(得分:0)
这是预期的行为。也许你混淆从Realm删除对象和从List中删除对象。 realm.delete()
执行前者。对象已从Realm中删除。然后指向对象的所有引用都将失效。
如果您要清除entry.approaches
,而不是从Realm中删除,则可以使用List.removeAll()
方法。
try realm.write {
entry.approaches.removeAll()
}
仅供参考:将所有列表项复制到数组可以写成如下所示。无需迭代列表。
let approaches = [Approach](entry.approaches)