如何更新Core Data中的现有对象?

时间:2015-02-15 12:18:19

标签: ios swift core-data nsmanagedobject

我想更新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()

我的func用于加载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
}

保存CoreData:

let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
let entityDescription = NSEntityDescription.entityForName("TaskModel", inManagedObjectContext: managedObjectContext!)
let task = TaskModel(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext!)
task.task = labelText

3 个答案:

答案 0 :(得分:5)

您只需更新Core数据对象的任何属性,并在NSManagedObjectContext上调用save。您还可以使用hasChanges方法检查任何更改。

 managedObject.setValue("newValue", forKey: "propertyName") 

像上面一样更新您的对象或直接调用分配并执行以下操作

if let moc = self.managedObjectContext {
   var error: NSError? = nil
   if moc.hasChanges {
       !moc.save(&error)
   }
}

答案 1 :(得分:4)

更新CoreData中的对象与创建新对象非常相似。 首先,您必须使用fetchRequest从CoreData获取对象。之后,您可以编辑获取的对象并更新其属性。 之后,只需使用managedObjectContext保存回来。

答案 2 :(得分:1)

你可以这样做,对我有用。

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)")

        }

你不必写'结果[0]为! NSManagedObject&#39;因为你有类型为Account的NSFetchRequest和常量&#34;更新&#34;知道这一点。

相关问题