核心數據,自動更新導致問題的已更改對象,並使事情變得比需要的更混亂。如何製作核心數據對象的副本,保持不變
說我有這段代碼:
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不,在這旁邊很危險。 –