2011-01-14 3 views
0

내 아이폰 앱에 NSNumber의 여러 멤버가있는 관리 객체를 만들었습니다. 나는이 값들을 초기화한다. 또한 하위 오브젝트 멤버를 만듭니다. 그런 다음, 실행 취소 관리자를 작성하여 초기화 된 매개 변수에 영향을주는 실행 취소없이 하위 오브젝트에 실행 취소 조작을 수행 할 수 있습니다. 그러나 내 앱을 시작하고 전화를 걸 때 ...왜 NSUndoManager canUndo예요?

[undoManager canUndo]; 

... "예"입니다. 어떻게 이럴 수있어? 최상위 데이터 멤버는 0으로 다시 설정됩니다. 그뿐 아니라 sub-objet의 managedObjectContext는 nil입니다. 실행 취소 관리자 작성 이전에 하위 오브젝트가 작성 될 때 어떻게 될 수 있습니까? 실행 취소 관리자는 역 활동입니까? 실행 취소 관리자를 만들기 전에 이러한 데이터 멤버가 설정 되더라도 전체 관리 대상 개체의 실행 취소를 허용하는 것으로 보입니다.

모든 의견에 감사드립니다.

+0

NSManagedObjectContext는 자체 실행 취소 관리자를 만듭니다. disableUndoRegistration 및 enableUndoRegistration을 사용하여 특정 작업을 실행 취소하지 못하게하십시오. – ughoavgfhw

+0

@ughoavgfhw : iOS 플랫폼에서는 사실이 아닙니다! – Felix

+0

iPhone 용 CoreDataBooks 예제를 따랐습니다. CanUndo는 실행 취소 관리자를 만든 후 NO를 반환하고 viewWillAppear 메서드에서 NO를 반환합니다 (객체에 영향을주는 다른 코드를 주석 처리했습니다). 그러나 실행 취소 버튼을 탭하면 '예'가 반환됩니다. 어떻게 이럴 수있어? – Christopher

답변

1

관리되는 개체가 저장되지 않으면 NSUndoManager의 생성이 개체의 존재대로 개체에 적용되고 개체의 변경 내용을 취소 할 수있는 것으로 보입니다. 개체가 다양한 화면의 옵션에서 만들어지기 때문에보기가 나타나기 전에 단순히 개체를 저장하면됩니다. 개체를 저장 한 후 실행을 취소하려고하면 CanUndo가 예상대로 NO를 반환합니다.

또 다른 옵션은보기가 나타난 후에 실행 취소 관리자에서 removeAllActions를 호출하는 것입니다.하지만 너무 많은 진입 점이 있기 때문에 문제가 될 수 있습니다. 객체가 저장되었으므로 사용자가 취소하면 삭제합니다.

앞으로 도움이되기를 바랍니다.

0

실행 취소 관리자에서 변경 사항 등록이 연기됩니다. 실행 취소 관리자를 설정할 때까지 변경 사항이 처리되었는지 확인해야합니다. processPendingChanges 메소드를 사용할 수 있습니다. 여기 작은 예제 :

// create initial objects 
[managedObjectContext processPendingChanges]; 

// enable undo 
managedObjectContext.undoManager = undoManager;