核心数据,自动更新导致问题的已更改对象,并使事情变得比需要的更混乱。如何制作核心数据对象的副本,保持不变
说我有这段代码:
let fetchRequest = Track.fetchRequest()
//update it
do {
let tracksFound = try self.managedObjectContext.fetch(fetchRequest) as! [Track]
print("retrieved")
let trackToUpdate = tracksFound[0]
trackToUpdate.locality = "please dont have updated"
do {
try self.managedObjectContext.save()
print("saved")
}
catch {
fatalCoreDataError(error)
}
for t in tracksFound {
print(t.locality)
}
}
catch {
fatalCoreDataError(error)
}
你可以看到它取一个[Track]
对象数组,然后将其更新的第一要素适当locality
与please dont have updated
。然后它保存这个对象。最后它读取在开始时定义的tracksFound
数组。我曾预期tracksFound
保持不变,对象tracksFound[0].locality
已更改为please dont have updated
。
如何阻止核心数据更新我的对象?我基本上想要制作一个tracksFound
的副本,它将保持不变,所以我可以稍后将它用于决策。
感谢
简单如果你没有调用save()方法的意思,你的对象将不会变化。 –
代码'let trackToUpdate = tracksFound [0]'获取*引用*到该元素,而不是副本。因此,当你改变'trackToUpdate'时,你实际上正在改变'tracksFound [0]'。 – Michael
@Karthick不,在这旁边很危险。 –