0

저는 Core Data를 사용하는 앱을 가지고 있으며 UIManagedObject를 사용하여 ManagedObjectContext를 가져옵니다. 읽기에서 나는 컨텍스트를 직접 저장하지 않는 것을 보았습니다. 오히려 UIManagedObject의 자동 저장에 의존하거나 saveToURL을 사용해야합니다. 내 문제는 내 엔티티에 저장된 데이터의 유효성을 검사하려고한다는 것입니다. 문자열 속성의 최소 길이를 1로 지정하는 엔티티에 대한 제약 조건이 있습니다. 그러나 새 개체를 만들고 해당 속성의 빈 문자열을 할당 한 다음 파일을 저장할 수 있습니다. saveToURL의 완료 처리기에서 ... ... 항상 실제 성공 값을가집니다. 그런 다음 내 엔티티의 name 속성에 대한 자체 유효성 검사기를 만들었습니다. 내가 코어 데이터 프로그래밍 가이드에서 샘플 코드를 사용 -UIManagedDocument - 핵심 데이터 엔티티 유효성 검사

-(BOOL)validateName:(id *)ioValue error:(__autoreleasing NSError **)outError 

{ 
    if (*ioValue == nil) 

    { 
     if (outError != NULL) 

     { 
      NSString *errorStr = @"nil error"; 

      NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorStr 

       forKey:NSLocalizedDescriptionKey]; 

      NSError __autoreleasing *error = [[NSError alloc] initWithDomain:@"domain" 

       code:1 

       userInfo:userInfoDict]; 

      *outError = error; 

     } 

     return NO; 

    } 

    else if([*ioValue length] == 0) 

    { 

     if (outError != NULL) { 

      NSString *errorStr = @"length error"; 

      NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorStr 

       forKey:NSLocalizedDescriptionKey]; 

      NSError __autoreleasing *error = [[NSError alloc] initWithDomain:@"domain" 

       code:1 

       userInfo:userInfoDict]; 

      *outError = error; 

     } 

     return NO; 

    } 

    else 

    { 

     return YES; 

    } 

} 

이 실행되면, 나는 ioValue 0 길이가 있다는보고가 NO 반환,하지만 내 완료 핸들러가 호출되지 않습니다. 어떤 도움이라도 좋을 것입니다.

UIManagedDocument를 사용하여 오류를 저장하는 방법을 처리하지 못했습니다. 특히 정보를 저장하는 동안 오류가 발생했다는 것을 호출 코드에 알리는 방법이 있습니다.

답변

0

기본적으로 saveToURL을 호출하여 새로운 파일을 만들어야합니다. 자동 저장이 나머지 작업을 수행하도록하십시오.

또한 귀하의 질문에 답할 수 있는지 잘 모르겠습니다. 저장 실패에 대해 아는 방법을 묻는다면 모든 저장은 백그라운드 스레드에서 이루어 지므로 알림을 등록하는 것이 가장 좋습니다. 직접 문서에서

:

UIDocument 객체의 수명주기의 모든 순간에 특정 상태를 가지고있다. documentState 특성을 조회하여 현재 상태를 점검 할 수 있습니다. 또한 UIDocumentStateChangedNotification 알림을 관찰하여 문서 상태의 변경 사항을 알릴 수 있습니다.