사용자가 항목을 추가 할 수있는 iPhone 응용 프로그램을 만들려고합니다. 그가 새 항목을 누르면 상자에 정보가 있는지 묻는 팝업이 나타납니다. 그런 다음 "취소"또는 "저장"을 눌러 데이터를 버리거나 디스크에 저장하십시오.NSUndoManager가 코어 데이터로 작업하지 않습니다.
저축을 위해, 나는 꽤 잘 작동하는 핵심 데이터 프레임 워크를 사용하고 있습니다. 그러나 "취소"버튼을 사용할 수 없습니다. 정보를 묻는 창이 나타나면 관리 대상 객체 컨텍스트 (MOC)에 새 객체를 만듭니다. 그런 다음 사용자가 취소를 누르면 MOC에 속한 NSUndoManager를 사용하려고합니다.
중첩 된 그룹이있을 수 있으므로 중첩 된 실행 취소 그룹을 사용하여이 작업을 수행하고 싶습니다.
이것을 테스트하려면 간단한 응용 프로그램을 작성했습니다. 응용 프로그램은 핵심 데이터가 활성화 된 "Window 기반 응용 프로그램"템플릿 일뿐입니다. 핵심 데이터 모델의 경우, 정수 속성 "x"를 갖는 "Entity"라는 단일 엔티티를 작성합니다. 그런 다음 applicationDidFinishLaunching 내부에 다음 코드를 추가합니다.
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after app launch
unsigned int x=arc4random()%1000;
[self.managedObjectContext processPendingChanges];
[self.managedObjectContext.undoManager beginUndoGrouping];
NSManagedObject *entity=[NSEntityDescription insertNewObjectForEntityForName:@"Entity"
inManagedObjectContext:self.managedObjectContext];
[entity setValue:[NSNumber numberWithInt:x] forKey:@"x"];
NSLog(@"Insert Value %d",x);
[self.managedObjectContext processPendingChanges];
[self.managedObjectContext.undoManager endUndoGrouping];
[self.managedObjectContext.undoManager undoNestedGroup];
NSFetchRequest *fetchRequest=[[NSFetchRequest alloc] init];
NSEntityDescription *entityEntity=[NSEntityDescription entityForName:@"Entity"
inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entityEntity];
NSArray *result=[self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
for(entity in result) {
NSLog(@"FETCHED ENTITY %d",[[entity valueForKey:@"x"] intValue]);
}
[window makeKeyAndVisible];
}
아이디어가 간단합니다. 새 Entity 객체를 삽입하고 실행 취소 한 다음 MOC에있는 모든 Entity 객체를 가져 와서 인쇄하십시오. 모든 것이 올바르게 작동하면 끝에는 아무 것도 없어야합니다. 나는 그것의 생성을 취소하려고 후
[Session started at 2010-02-20 13:41:49 -0800.]
2010-02-20 13:41:51.695 Untitledundotes[7373:20b] Insert Value 136
2010-02-20 13:41:51.715 Untitledundotes[7373:20b] FETCHED ENTITY 136
당신이 볼 수 있듯이, 객체가 MOC에 존재 :
그러나,이 출력을 얻을. 내가 뭘 잘못하고 있는지에 대한 제안이 있으십니까?
안녕 임 매우 똑같은 문제가 있습니다. 해결책을 찾았습니까? "undoNestedGroup"대신 "undo"를 사용해 보셨습니까? 감사합니다. gonso – gonso