콘텐츠로 건너뛰기
Home » NSUndoManager

NSUndoManager

[Cocoa] Undo/Redo 구현하는 법

Undo 구현하기

코코아앱 (Foundation 명령줄 도구에서도 사용할 수 있다)에서 실행취소(Undo) 기능을 구현하는 방법에 대해 알아보자. 실행 취소를 구현하는 방법은 “이전 상태를 그대로 저장”하였다가 되돌리는 방법을 생각해 볼 수 있는데, “이전 상태”에 대한 명확한 범위를 정하기가 생각보다 쉽지 않다. 또한, 앱이 나중에 확장, 변형된다면 “상태”를 매번 업데이트해야 하고 이는 관리나 유지보수 측면에서도 그리 바람직한 방법이 아니다.더 보기 »[Cocoa] Undo/Redo 구현하는 법

[Objective-C] NSInvocation 과 Forward

코코아 앱의 Undo/Redo 기능을 구현하는 부분을 보면, NSUndoManager-prepareWithInvocationTarget: 메소드를 사용해서 Undo 동작시에 호출될 메소드를 기록해두는 코드가 있다. 그런데 이 메소드의 원형을 보면 좀 이상한 부분이 있다. 실제로 Undo를 지원하는 기능을 구현하고 있는 간단한 코드를 보자.

-(void) getHigher {
    // undo 관리자에 실행취소를 위한 동작을 등록
    [[undoManager prepareWithInvocationTarget:self] getLower];  
    self.height -= 1.0;
}

-(void) getLower {
    [[undoManager prepareWithInvocationTarget:self] getHigher];
    self.height += 1.0;
}

-prepareWithIvocationTarget: 메소드는 자기자신, 즉 NSUndoManager의 인스턴스를 리턴한다. 그런데 이 되돌리기 관리자에게 getLower 를 호출한다?

더 보기 »[Objective-C] NSInvocation 과 Forward