0

저장하기 전에 업데이트해야하는 핵심 데이터 데이터베이스에 계산 된 값이 있습니다. 기본적으로 나는 그들 사이의 네비게이션을 쉽게하기 위해 몇몇 엔티티의 번호를 매기 고있다.NSPersistentDocument로 최신 관리자 실행 취소 관리자

현재 나는 NSManagedObjectContextWillSaveNotification을 관찰 중이며이 번호 매기기를 시도하고 있습니다. 내가 한 변경 사항은 저장되지만 실행 취소 관리자는 여전히 수정 된 것으로 보입니다. 이렇게하면 관리 대상 객체 컨텍스트에 (hasChanges)이 없다고 표시 되어도 문서에 변경 사항 (닫기 버튼에 표시)이있는 것처럼 보입니다. 한 번 실행 취소하면 변경 사항이없는 것처럼 보이지만 관리 객체 컨텍스트는 변경됩니다.

실행 취소 관리자가 어떻게 든 잘못된 위치에서 재설정되었거나 잘못된 것이 있습니까?

업데이트

있는 나는이 번호를 다시 매기를하고있어 다소 난독 화 코드는 다음과 같습니다

- (void)managedObjectContextWillSave:(NSNotification *)notification 
{ 
    // Force the content view controller to save any pending changes. 
    [_contentViewController saveChanges]; 

    NSArray *itemSortDesc = [self sortDescriptorsForSomeItem]; 
    NSArray *items = [SomeItem findAllObjectsInContext:self.managedObjectContext 
              andSortBy:itemSortDesc]; 
    NSUInteger i = 0; 
    for (SomeItem *i in items) 
    { 
     i.uid = [NSNumber numberWithUnsignedInteger:i++]; 
    } 
} 

_contentViewControllerSomeItem의 여러 인스턴스에 구문 분석하는 텍스트 필드를 포함 .

+0

해당 이벤트를 처리하는 코드를 게시 하시겠습니까? – paulmelnikow

답변

0

번호 매기기가 실행 취소 스택에 영향을 미칩니다.

NSManagedObjectContextWillSaveNotification을 사용하는 대신 NSManagedObject willSave을 처리하려고합니다. 문제가 해결되지 않을 것으로 생각됩니다.

이 작업을 시도 할 수 :

[[self.managedObjectContext undoManager] disableUndoRegistration]; 

// do the renumbering 

[self.managedObjectContext processPendingChanges]; 
[[self.managedObjectContext undoManager] enableUndoRegistration]; 

내가 초기화하는 동안 새로운 문서를 더럽 히지 않도록하려면이 옵션을 사용합니다. 저축을 위해 제대로 작동하는지 확신 할 수 없지만 시도해 볼만한 가치가있을 수 있습니다.

+0

감사합니다. 그러나 저장 후 하나 또는 두 개의 비어있는 실행 취소 단계가 있지만 어떤 경우에도 항목의 uid가 변경되지 않아도 다시 매겨지기 때문에 번호 매기기 작업과 관련이있을 수 있습니다. 필자는 텍스트 필드 구문 분석 후 바로 번호를 다시 매기는 것을 고려할 것입니다. – mkko