2013-03-31 60 views
1

我的核心數據應用程序(不是基於文檔)有兩個窗口。每個窗口都包含一個表視圖,其中包含來自同一個NSManagedObjectContext的(不同)數據。我用這個代碼在這兩個窗口控制器,以啓用撤消支持:多個窗口的核心數據和單獨的撤銷管理器?

- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window { 
    return [[(AppDelegate *)[NSApp delegate] managedObjectContext] undoManager]; 
} 

這種方法的缺點是用戶將撤消他在一個窗口中所做的更改,而他是在另一個窗口工作。即使用戶選擇關閉其中一個窗口,撤消管理器仍將撤消關閉窗口中的更改。這個問題的明顯解決方案是使用兩個單獨的NSUndoManager對象,但我不知道如何執行此操作。我已經使用NSManagedObjectContexts「-setUndoManager:」他想用每一個窗口單獨的撤消管理器,但我無法找到一個合適的地方把代碼,所以我想這:

- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window { 
    [[(CAppDelegate *)[NSApp delegate] managedObjectContext] setUndoManager:self.myUndoManager]; 
    return self.myUndoManager; 
} 

它沒有工作很好。 (撤消步驟在窗口之間切換時消失。)

這樣做的正確方法是什麼?

回答