ビューコントローラーといくつかのサブビューコントローラーがあるという複雑な状況があります。
状況 A:サブ ビュー コントローラーを変更すると、変更が NSUndoManager に記録され、サブ ビュー コントローラーで undo メソッドが呼び出され、正常に動作します。
-(void)setElementTransform:(NSString *)transform
{
NSUndoManager *undoManager = [Global sharedGlobalInstance].undoMgr;
[undoManager registerUndoWithTarget:self selector:@selector(setElementTransform:) object:self.element.transform];
self.element.transform = transform;
self.view.transform = CGAffineTransformFromString(transform);
}
状況 B:これはもう少し複雑です。サブ ビュー コントローラーを削除すると、NSUndoManager に (メイン ビュー コントローラーの) 元に戻すメソッドが記録されます。その削除を元に戻すと、NSUndoManager はメイン ビュー コントローラーで undo メソッドを呼び出し、サブ ビュー コントローラーを再作成します。それもうまくいきます。
問題は、状況 A の後に状況 B を実行すると、アンドゥ スタックに 2 つあることです。状況 B を元に戻すことはできますが、状況 A には存在しないサブ ビュー コントローラーの元に戻すメソッドへの参照があります (状況 B で削除して元に戻すことによって削除され、再作成されました)。
古いサブビューコントローラーへの参照を変更できるように NSUndoManager を更新する方法はないと思いますか?
他にどうすればこれに対処できますか?