与在核心数据中保存新对象相比,更新核心数据中的现有属性的语法是什么?



向核心数据添加新数据的语法与更新核心数据中的现有数据的语法有何不同。例如,如果我有一个核心数据实体Person和属性name:String、gender:String和last_occuration:[Int:String](其中Int对应于他们退出时的年龄(,我会混淆我已经知道应该使用这两种语法中的哪一种。

let appDelegate = UIApplication.shared.delegate as? AppDelegate
let context = appDelegate.persistentContainer.viewContext
let container = NSEntityDescription.insertNewObject(forEntityName: "Person", into: context) as! Person
//And then assigning attributes
container.name = some_string
container.gender = some_string
container.last_occupation = custom_object_that_conformsTo_codable_protocol
VS
let fetchRequest = NSFetchRequest(entityName: "Person")
let results = try context.fetch(fetchRequest)
if let container = results.first {
container.name.value = some_string
container.gender.value = some_string
container.last_occupation = custom_object
try context.save()
context.refresh(transformableContainer, mergeChanges: false)
}

我什么时候应该使用一种方法而不是另一种方法,如果我知道我将用新更新的属性替换核心数据中的现有属性,而不仅仅是更改它们的值,那么可以使用第一种方法吗?

  • 第一个语法插入一个新记录–之后必须保存上下文。

  • 第二个语法获取现有数据并更新记录。

但是,要更新特定记录,您必须添加一个谓词,而且很可能您不想更新namegender属性

let name = "John Doe"
let fetchRequest : NSFetchRequest<Person> = Person.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "name == %@", name)
let results = try context.fetch(fetchRequest)
if let container = results.first {
// container.name = some_string
// container.gender = some_string
container.last_occupation = custom_object
try context.save()
context.refresh(transformableContainer, mergeChanges: false)
}

相关内容

  • 没有找到相关文章

最新更新