コアデータは、問題を引き起こしている変更されたオブジェクトを自動的に更新し、必要以上に混乱させます。コアデータオブジェクトのコピーを作成する方法(手を触れないでください)
は、私はこのコードのビットを持って言う:
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いいえ、これの横には危険です。 –