2012-12-05 2 views
0

핵심 데이터가없는 앱을 만들었습니다. 응용 프로그램에는 제스처, 색상 및 텍스트로보기를 조작하는 등의 많은 기능이 있습니다.코어 데이터없이 NSUndoManager를 사용할 수 있습니까?

내가 원했던 것은 실행 취소 및 다시 실행 기능을 사용하는 것입니다.
Core Data와 NSUndoManager에 대한 모든 것을 읽었으며 이해하려고하는 데 문제가 있습니다. 내가하려는 모든 작업이 작동하지 않기 때문에.

제 질문은 핵심 데이터없이 NSUndoManager를 사용할 수 있습니까?
그리고보기에 대해 어떻게 취소 할 수 있습니까?

한 작업은 내가 UndoManager에의 정보를 등록 aView (있는 UIImageView)라고 내 객체 을 변경할 수 있습니다

편집

- (IBAction)rotationDetected:(UIRotationGestureRecognizer *)gestureRecognizer { 

    static CGFloat initialRotation; 
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan){ 
     initialRotation = atan2f(gestureRecognizer.view.transform.b, gestureRecognizer.view.transform.a); 
    } 
    CGFloat newRotation = initialRotation + gestureRecognizer.rotation; 
    aView.transform = CGAffineTransformMakeRotation(newRotation); 

    //undo 
    [self.undoManager registerUndoWithTarget:self selector:@selector(rotationDetected:)object:aView]; 
    [self.undoManager setActionName:NSLocalizedString(@"viewChanged",@"title undo")]; 
} 

그리고 클릭 된 버튼에 의해 호출되는 실행 취소 방법에 대해 설명한다 여기에 :

-(void)undo: (id) sender{ 

    [aView.undoManager undo]; 
    [[self undoManager] undo]; 
} 

if 절을 삽입하면 undoManag er.canUndo == 예, undoManager가 실행 취소 할 수 없다는 것을 리턴합니다.
즉, undoManager가 nil이라는 의미입니다.하지만 그 이유는 무엇입니까? 내가 뭔가를 놓쳤습니까?

답변

0

예, 코어 데이터와 별도로 NSUndoManager을 사용할 수 있습니다. NSUndoManager에 대한 많은 정보 out there.

당신은 더 많은 독서를하고 어떤 NSUndoManager 캔을 이해할 필요하고 당신을 위해 할 그리고 그것은 아마도 잠시 코어 데이터 잊고 NSUndoManager에 집중 UIViews 등에 딱 맞는 볼 수 없습니다.

"노력하고있는 모든 것 ... 작동하지 않기 때문에"- 특정 문제가 발생하면 여기에 대해 StackOverflow에서 질문 할 수 있습니다. "작동하지 않는다"고 말하면 우리는 구체적으로 당신을 도울 수 없습니다.

NSUndoManager의 세부 사항 외에도 실행 취소 및 재실행과 관련된 디자인 패턴이 있습니다 (예 : 명령 패턴). 예 : Best design pattern for "undo" feature.

+0

감사합니다. 내 게시물을 편집했습니다 ... – Studie

+0

그냥 코드가 충분하지 않습니다 - 당신은 당신이 무슨 일이 일어날 것으로 예상 말할 필요합니다. 문제를 볼 수있는 올바른 스 니펫을 게시하는 훌륭한 방법이 있습니다. – occulus

+0

전화가 걸려 오는 시간을 NSLogs에 넣었습니까? – occulus