ブロックコードに元に戻す/やり直しを追加しようとしています(NSOpenPanelからいくつかのファイルをインポートします)。コードがブロックに由来する限り、メインコードは機能しますが、NSUndoManagerコードは保存されず、エラーは発生しません。NSUndoManagerコードは、ブロック内にない限り、他の場所でも機能します
NSUndoManagerコードの例は次のようになります。
// Undo Work
id undoObject = [NSApp targetForAction:@selector(undoManager) to:nil from:self];
NSUndoManager *undoManager = [undoObject undoManager];
[[undoManager prepareWithInvocationTarget:self] deleteImages];
[undoManager setActionName:@"import images"];
以下は、コードが機能する場所と機能しない場所を示しています。
/* NSUndoManager code works */
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel beginSheetModalForWindow:[self.windowController window]
completionHandler:^(NSInteger result) {
if (result == NSFileHandlingPanelOKButton) {
/* NSUndoManager code does not work,
it also does not work inside importImages: */
[self importImages:[openPanel URLs]];
} else {
[openPanel close];
}
}];
/* NSUndoManager code works */