使用种子对象填充新的NSPersistentDocument /关闭时放弃更改

时间:2013-10-20 01:32:25

标签: cocoa nsundomanager nspersistentdocument

这是我的问题:

我有一个基于文档的应用程序,都是使用Core Data编写的。创建新文档时(在应用程序启动时,或使用文件> New或Cmd + N),我需要使用初始种子对象填充此文档。假设我的文档是笔记本,所以我希望新文档在创建时包含空注释。 所以我无辜地插入我的对象(-[NSEntityDescription initWithEntity: insertIntoManagedObjectContext:),它有效。

我的问题是,文档在打开后似乎是已编辑。这是一个糟糕的用户体验。此外,在关闭此文档而不添加任何进一步更改时,系统会提示用户保存(超级麻烦!)。

所以我到目前为止尝试解决此问题的方法是将操作设置为 discardable ,在我的撤消管理器上-[NSUndoManager setActionIsDiscardable:] YES [myDocument undoManager]-[NSDocument isDocumentEdited] )。但它没有改变任何东西。

要进行调试,我会覆盖NO并始终返回{{1}}。它部分解决了这个问题。当然,我不想处理那些东西,我想它应该在undo-manager / persistent document / managed object context side上修复。

任何人都面临同样的问题?

非常感谢你们!

1 个答案:

答案 0 :(得分:0)

我终于想出了一种使用撤消管理器的removeAllActions

的方法
- (id)initWithType:(NSString *)typeName error:(NSError *__autoreleasing *)outError`
{
    // Add your seed data in Core Data

    // Erase all actions to make the document appear as new
    [[self undoManager] removeAllActions];
}

它解决了我的所有问题,允许在不提示保存的情况下关闭文档,不在标题上显示已编辑的菜单,并且不允许用户撤消种子插入操作。