swift - 撤消麻烦 : Initialise `NSPersistentDocument` programmatically without "edited" flag in title bar

标签 swift cocoa core-data nsdocument

我有一个使用核心数据和 NSPersistentDocument 的小应用程序。对于新文档,我使用单个 Settings 元素初始化文档。我已经可以抑制初始化生成的撤消条目,但是...

奇怪的行为是这样的:文档开始时窗口标题中没有“已编辑”标志。 我一点击“编辑”菜单,“已编辑”标志就会出现,并且突然可以进行撤消操作。

这是我的 init() 代码:

class Document: NSPersistentDocument {
    var settings: Settings! = nil
    override init() {
        super.init()
        do {
            let fetchSettings = NSFetchRequest(entityName: "Settings")
            let settingsList = try self.managedObjectContext!.executeFetchRequest(fetchSettings)
            precondition(settingsList.count < 2, "Too many settings object in the core data store.")
            if settingsList.count == 1 {
                settings = settingsList[0] as? Settings
                precondition(settings != nil)
            } else {
                managedObjectContext!.undoManager!.disableUndoRegistration()
                settings = NSEntityDescription.insertNewObjectForEntityForName("Settings", inManagedObjectContext: self.managedObjectContext!) as? Settings
                precondition(settings != nil)
                // Here setup the "settings" object...
                settings.xxx = //...
                settings.yyy = //...
                managedObjectContext!.undoManager!.enableUndoRegistration()
            }
        } catch {
            preconditionFailure("Could not retrieve/create settings object because of an unknown core data error.")
        }
    }
    // ... more methods ...
}

问题是,一旦这个撤销条目出现,用户就可以撤销初始 Settings 对象的创建,这会导致很多麻烦。

这是一个已知问题吗?我怎样才能防止这种情况发生?

这里有一个演示效果的视频:https://youtu.be/O4lURxLAelE

最佳答案

打电话

[self.managedObjectContext processPendingChanges];

disableUndoRegistrationenableUndoRegistration 之前。

关于swift - 撤消麻烦 : Initialise `NSPersistentDocument` programmatically without "edited" flag in title bar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36431244/

相关文章:

objective-c - 文本字段显示一个值,该值是操作的计算结果,如何将该值绑定(bind)到核心数据

ios - 以编程方式获取应用程序支持文件夹的路径

objective-c - 高效的核心数据递归

ios - 如何子类化自定义 UITableViewCell?

ios - 使用 Swift 多次触摸 UIButton?

ios - 在 Swift 中动画字符串淡入/淡出

swift - 快速保存 NSManagedObjectContext 时出错

ios 如何快速更改不同 View Controller 中另一个 View Controller 的内容

objective-c - 图层支持 View 和闪烁控件

database - 在 ios7 中读取预填充的 Sqlite.db