这是我的问题:
我有一个基于文档的应用程序,都是使用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上修复。
任何人都面临同样的问题?
非常感谢你们!
答案 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];
}
它解决了我的所有问题,允许在不提示保存的情况下关闭文档,不在标题上显示已编辑的菜单,并且不允许用户撤消种子插入操作。