블록 코드에 일부 실행 취소/다시 실행 (NSOpenPanel에서 일부 파일 가져 오기)을 추가하려고합니다. 코드가 블록에서 시작되는 한 주 코드는 작동하지만 NSUndoManager 코드는 저장되지 않습니다. 어떤 오류도주지 않는다. 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 */
여기에 냉소적이지 않습니까? "작품"이 조금 더 구체적으로 무엇을 의미하는지 설명해 주시겠습니까? 또한 didnt 작업 블록에서 undomanager 코드를 버렸습니다. 이전에 작성한 인스턴스를 사용하려는 경우 또는 블록 내부에서 [undoManager undoManager]를 호출하는 경우 알려주지 않음 (팩토리 메소드는 그대로 사용하도록되어 있으며 기본 인스턴스를 유지하는 데 별다른 의미가 없음) 변수가 작은 호출을 제외하고는 코드 명확성이 향상됩니다. –