2013-10-20 48 views
0

這裏是我的問題的變化:填充新NSPersistentDocuments與種子對象/丟棄在靠近

我有一個基於文檔的應用程序,全部採用核心數據寫入。當創建新文檔時(在應用程序啓動時,或者使用File> New或Cmd + N),我需要使用初始種子對象填充此文檔。假設我的文檔是一個筆記本,所以我希望新文檔在創建時包含一個空的筆記。 因此,我無辜地插入我的對象(-[NSEntityDescription initWithEntity: insertIntoManagedObjectContext:),它的工作原理。

我的問題在於,該文檔在打開後似乎是編輯。這是一個糟糕的用戶體驗。此外,在不添加任何更改的情況下關閉此文檔時,會提示用戶保存該文檔(超級煩惱!)。

所以我試圖到目前爲止解決這個問題,在我的撤消經理的行動爲丟棄設置(-[NSUndoManager setActionIsDiscardable:]YES[myDocument undoManager])。但它不會改變任何事情。

要進行調試,我將覆蓋-[NSDocument isDocumentEdited]並始終返回NO。它修復了部分問題。當然,我不想處理那些東西,我想它應該固定在撤銷管理器/持久性文檔/管理對象上下文一側。

任何人都面臨同樣的問題?

非常感謝大家!

+0

我假設你正在使用NSPersistentDocument,如果是這樣,那麼新文件在內存中創建,所以用戶必須在關閉文檔之前保存到文件名或者所有東西都會丟失。還有一個特定的方法被調用,它專門用於設置初始數據。它只會被新文檔調用。我不記得它是什麼,但如果你需要它,我可以查找它。你想要解決什麼問題? –

+0

謝謝:)我實際上找不到這種允許設置初始數據的神奇方法。這正是我想要做的:使用一些種子數據製作新文檔。我想我找到了使用'NSUndoManager'的方法。我會就此發表一個答案。如果你記得這個方法,請告訴我!謝謝。 Micha –

回答

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]; 
} 

它修復了我的所有問題,使文件不會被提示保存,不顯示編輯菜單關閉在標題上並且不允許用戶撤消種子插入操作。

+1

上面的initWithType方法是我所指的。 –

+0

是的,但即使您在此方法中添加種子對象,它也會污染您的撤消堆棧。這就是爲什麼我必須拿出'removeAllActions'。不過謝謝! –