如何更新核心数据中的现有对象?
How to Update existing objects in Core Data?
我想更新 Core Data 中的一个对象。这是我的代码:
var detailTaskModel: TaskModel!
detailTaskModel.date = dateFromDP //update value
let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
appDelegate.saveContext()
我正在使用 NSFetchedResultsController 和 Swift。
更新:
var fetchedResultsController: NSFetchedResultsController = NSFetchedResultsController()
我用于加载 CoreData 数据的函数:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: TaskCell = tableView.dequeueReusableCellWithIdentifier("myCell") as TaskCell
let thisTask = fetchedResultsController.objectAtIndexPath(indexPath) as TaskModel
cell.textLabel?.text = thisTask.task
return cell
}
保存核心数据:
let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
let entityDescription = NSEntityDescription.entityForName("TaskModel", inManagedObjectContext: managedObjectContext!)
let task = TaskModel(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext!)
task.task = labelText
您只需更新任何 属性 核心数据对象并在 NSManagedObjectContext 上调用保存。您还可以使用 hasChanges 方法检查是否有任何更改。
managedObject.setValue("newValue", forKey: "propertyName")
像上面那样更新您的对象或直接调用分配并执行以下操作
if let moc = self.managedObjectContext {
var error: NSError? = nil
if moc.hasChanges {
!moc.save(&error)
}
}
更新 CoreData 中的对象与创建新对象非常相似。
首先,您必须使用 fetchRequest
从 CoreData 获取您的对象。之后,您可以编辑获取的对象并更新它的属性。
之后,只需使用 managedObjectContext
.
将其保存回来
你可以做到这一点,对我有用。
if let container = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer{
let context = container.viewContext
let fetchRequest = NSFetchRequest<Account>(entityName: "Account")
let name = self.txtAccount.text
fetchRequest.predicate = NSPredicate(format: "name == %@", name!)
do {
let results = try context.fetch(fetchRequest)
if (results.count > 0){
for result in results{
id = result.id
number = result.number
}
actualNumber = (number + 1)
//Update the account balance
let update = results[0]
update.number = actualNumber
try context.save()
return id
}
}catch let error {
print("Error....: \(error)")
}
您不必编写 'result[0] as! NSManagedObject',因为您拥有类型为 Account 的 NSFetchRequest,常量 "update" 知道这一点。
我想更新 Core Data 中的一个对象。这是我的代码:
var detailTaskModel: TaskModel!
detailTaskModel.date = dateFromDP //update value
let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
appDelegate.saveContext()
我正在使用 NSFetchedResultsController 和 Swift。
更新:
var fetchedResultsController: NSFetchedResultsController = NSFetchedResultsController()
我用于加载 CoreData 数据的函数:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: TaskCell = tableView.dequeueReusableCellWithIdentifier("myCell") as TaskCell
let thisTask = fetchedResultsController.objectAtIndexPath(indexPath) as TaskModel
cell.textLabel?.text = thisTask.task
return cell
}
保存核心数据:
let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
let entityDescription = NSEntityDescription.entityForName("TaskModel", inManagedObjectContext: managedObjectContext!)
let task = TaskModel(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext!)
task.task = labelText
您只需更新任何 属性 核心数据对象并在 NSManagedObjectContext 上调用保存。您还可以使用 hasChanges 方法检查是否有任何更改。
managedObject.setValue("newValue", forKey: "propertyName")
像上面那样更新您的对象或直接调用分配并执行以下操作
if let moc = self.managedObjectContext {
var error: NSError? = nil
if moc.hasChanges {
!moc.save(&error)
}
}
更新 CoreData 中的对象与创建新对象非常相似。
首先,您必须使用 fetchRequest
从 CoreData 获取您的对象。之后,您可以编辑获取的对象并更新它的属性。
之后,只需使用 managedObjectContext
.
你可以做到这一点,对我有用。
if let container = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer{
let context = container.viewContext
let fetchRequest = NSFetchRequest<Account>(entityName: "Account")
let name = self.txtAccount.text
fetchRequest.predicate = NSPredicate(format: "name == %@", name!)
do {
let results = try context.fetch(fetchRequest)
if (results.count > 0){
for result in results{
id = result.id
number = result.number
}
actualNumber = (number + 1)
//Update the account balance
let update = results[0]
update.number = actualNumber
try context.save()
return id
}
}catch let error {
print("Error....: \(error)")
}
您不必编写 'result[0] as! NSManagedObject',因为您拥有类型为 Account 的 NSFetchRequest,常量 "update" 知道这一点。