撤消CoreData中的操作

时间:2016-09-26 07:47:22

标签: ios swift core-data

我想撤消上一次操作。我正在使用此代码。但我无法做到这一点。请帮忙。任何帮助都会得到帮助

首先我保存记录

@IBAction func save(sender: AnyObject) {
    let appDelegate =
    UIApplication.sharedApplication().delegate as! AppDelegate        

    let managedContext = appDelegate.managedObjectContext
    let entity =  NSEntityDescription.entityForName("Person",
        inManagedObjectContext:managedContext)
    entity!.uniquenessConstraints = [["name"]]
    let person = NSManagedObject(entity: entity!,
        insertIntoManagedObjectContext: managedContext)

    //3
    person.setValue(first.text, forKey: "name")
    person.setValue(second.text, forKey: "age")

    //4
    do {
        try managedContext.save()
        //5
        people.append(person)

    } catch let error as NSError  {
        print("Could not save \(error), \(error.userInfo)")
    }        
}

然后我想重做

  let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate   
  appDelegate.managedObjectContext.undo()

1 个答案:

答案 0 :(得分:0)

NSManagedObjectContext需要撤消管理器才能启用撤消操作。在iOS上,默认情况下(出于性能原因),它没有。

即使它 (您可以创建并分配一个),您的代码也无法正常工作 - 撤消撤消最新的未提交更改。在您的示例中,您已保存了上下文 - 没有内置的撤消支持。

考虑到iOS上大多数编辑/插入操作的模态性质,通常更容易创建一个新的上下文用作编辑暂存器并将其扔掉(如果用户点击或取消)或保存它(如果用户点击保存或完成或等等)。