NSUndoManager
는 아이 NSManagedObjectContext
사용해야합니다 UIManagedDocument
해상도에 NSUndoManager 작동하지 자동 - 저장합니다. 이는 이 어느 시점에서든 자동 저장 될 수 있기 때문에 undo
은 아무런 영향을 미치지 않기 때문입니다. 따라서 자식 컨텍스트에서 동일한 결과를 얻을 수 있기 때문에 NSUndoManager
을 사용하여 저장/취소 기능을 구현할 필요가 없습니다.
NSUndoManager
은 자식 컨텍스트보다 구현하기가 훨씬 쉽기 때문에 슬픈 비트입니다 (후자의 경우 부모에게 자식을 객체로 복사하는 데는 existingObjectWithID
). 개인적으로 나는 groupingLevel != 0
인 경우 문서를 자동 저장하지 않아야한다고 생각했을 것입니다. Rant가 끝났어.
원래의 질문에
나는로드 데이터가 UIManagedDocument
에 코어 데이터를 사용하여 테이블 뷰 컨트롤러가 있습니다. 뷰 컨트롤러와 연결하여 테이블의 각 행을 편집합니다. 보기 컨트롤러에서 나는 취소 버튼을 저장했습니다. 내 NSManaged
개체 (self.list
아래)의 범주를 통해 NSUndoManager
을 사용하여 취소 기능을 구현합니다.
- (void)viewDidLoad
{
[super viewDidLoad];
[self.list beginEdit];
}
- (IBAction)cancel:(id)sender
{
[self.list cancelEdit];
[self close];
}
- (IBAction)save:(id)sender
{
[self.list endEdit];
[self close];
}
범주는 beginEdit
, endEdit
과 NSUndoManager 물건을 처리하기위한 cancelEdit
을 구현합니다. 아래의 코드에서 useUndo
은 NSUndoManager 사용의 영향을보기 위해 NO 또는 YES로 설정 한 상수입니다.
- (void)beginEdit
{
if (useUndo)
{
NSUndoManager *undoManager = [[NSUndoManager alloc] init];
self.managedObjectContext.undoManager = undoManager;
[undoManager beginUndoGrouping];
}
}
- (void)endEdit
{
[self.managedObjectContext save:nil];
if (useUndo)
{
NSUndoManager *undoManager = self.managedObjectContext.undoManager;
[undoManager endUndoGrouping];
self.managedObjectContext.undoManager = nil;
}
}
- (void)cancelEdit
{
if (useUndo)
{
NSUndoManager *undoManager = self.managedObjectContext.undoManager;
[undoManager endUndoGrouping];
[undoManager undo];
}
}
내가 객체를 저장할 때 홈 버튼 useUndo = NO
을 클릭하면 핵심 데이터 디버그 메시지가 변경 사항을 저지르고 보여주는 볼 수 있습니다. 그러나 useUndo = YES
을 사용하면 홈 버튼을 클릭 할 때 자동 저장되지 않습니다. 나는 몇 분을 기다렸다. 그리고 그것은 자동 저장하지 않는다. 자동 저장을 강제 할 수있는 방법이 있습니까?
누구나 undoManager를 사용하면 왜이 동작이 변경되는지 설명 할 수 있습니까?
내가 잘못된 방향으로 가고 있거나 코드에 간단한 문제가있는 것으로 의심됩니다. 어떤 도움을 주시면 감사하겠습니다.
우선, UIManagedDocument를 사용할 때'[self.managedObjectContext save : nil]'(childContext가 아닌 경우)를 호출하지 마십시오. . UIManagedDocument 객체에 항상 updateChangeCount :를 호출해야한다. 참고 자료 : [Managed Document의 Managed Object Context 사용하기] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UIManagedDocument_Class/Reference/Reference.html) –