CoreData 中的撤消操作

Posted

技术标签:

【中文标题】CoreData 中的撤消操作【英文标题】:Undo Operation In CoreData 【发布时间】:2016-09-26 07:47:22 【问题描述】:

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

首先我要保存记录

@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】:

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

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

鉴于 iOS 上大多数编辑/插入操作的模态性质,通常更容易创建一个新上下文以用作编辑暂存器,然后将其丢弃(如果用户点击关闭或取消)或保存它(如果用户点击保存或完成或其他)。

【讨论】:

谢谢先生...请发送一些代码sn-p。我是 iOS 新手 哪一部分? 精确保存操作 我不确定代码 sn-p 是否能帮助您。你想做什么? 不要为每个插入保存。仅在需要时保存。这样你就可以撤消了。

以上是关于CoreData 中的撤消操作的主要内容,如果未能解决你的问题,请参考以下文章

使用 2 个链接的 ManagedObjectContext 应用程序撤消 CoreData 更改

如何使用 CoreData 为某些操作/实体禁用 NSUndoManager?

CoreData NSUndoManager 关系问题

何时在 iPhone 开发中使用 CoreData

更新当前的 CoreData 条目

了解在“便签本”中创建和更新的 CoreData 实体