初始化文档并将其标记为"unchanged"

Initialize a document and mark it as "unchanged"

我正在尝试在 Swift 中编写我的第一个核心数据驱动的面向文档的 OSX 应用程序,因为我想更多地了解 Mac 编程。这些文档应该只保存为 XML 个文件,我已经成功配置了这些文件。

问题是我想在初始化时预先向文档添加一些信息,而实际上 "modifying" 文档。该信息只是必需的,应该在文档中,但如果用户创建并立即关闭文档,则不应要求他保存。

我已经定义了我的 Core Data 数据模型,并且我已经从我的模型中创建了 NSManagedObject 个子类。在我文档的 init 方法中,我这样做:

override init() {
    super.init()

    // Add your subclass-specific initialization here.
    let newItem = NSEntityDescription.insertNewObjectForEntityForName("MyItem", inManagedObjectContext: self.managedObjectContext) as! MyItem;
    newItem.descriptionText = "Item number 1";
    newItem.itemNumber = 1;
}

这确实在我的文档中添加了一个新项目,当我保存并重新加载时,我可以验证该项目是否存在。但是,这样做时,文档被标记为 "dirty" 并且在关闭它时,要求用户保存更改。

如何在不实际将文档标记为已编辑的情况下执行数据模型的初始化?

对于那些感兴趣的人,我设法解决了这个问题以适用于我的情况。首先,我将初始化代码移至

convenience init?(type typeName: String, error outError: NSErrorPointer)

那我暂时停止撤消功能:

self.managedObjectContext.processPendingChanges();
self.undoManager.disableUndoRegistration();

进行更改后,我重新启用撤消功能:

self.managedObjectContext.processPendingChanges();
self.undoManager.enableUndoRegistration();

到目前为止效果很好。