0

autosavesInPlaceYES을 반환하도록 설정되고 문제가 사라지면 새 문서를 저장하지 못하는 NSPersistentDocument 기반 응용 프로그램이 있습니다. autosavesInPlace가 새 문서 저장을 실패하게합니다.

  • 내가
  • 따라서 NSSaveAsOperation을 실행하는 몇 가지 변경 사항이 저장
  • 을 확인 새 문서를 작성, 문서의 이름과 URL 변경 및 모든 잘 될 것처럼 보이지만 다음은 매우 발생합니다 저장 문서가이 NSSaveAsOperation 후 저장을 실행하려고 할 때 설명

NSPersistentStoreSaveError = 134030, // unclassified save error - something we depend on returned an error

에만 발생합니다. 다른 저장 유형은 기존 문서의 변경 사항처럼 잘 작동합니다. 재미있는 결과는 이름이나 위치를 변경하지 않으면이 문제가 발생하지 않는다는 것입니다.

frame #0: 0x00007fff988143c5 libobjc.A.dylib objc_exception_throw frame #1: 0x00007fff94c5f5f9 CoreData -[NSPersistentStore(_NSInternalMethods) _preflightCrossCheck] + 697 frame #2: 0x00007fff94c3198b CoreData -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 603 frame #3: 0x00007fff94c5aa98 CoreData -[NSManagedObjectContext save:] + 456 frame #4: 0x00007fff91baa101 AppKit -[NSPersistentDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] + 3743 frame #5: 0x0000000100002de7 ZZZZ -[ZZZZDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] + 135 at ZZZZDocument.m:209 frame #6: 0x00007fff91baabc7 AppKit -[NSPersistentDocument writeSafelyToURL:ofType:forSaveOperation:error:] + 611 frame #7: 0x0000000100002ea3 ZZZZ -[ZZZZDocument writeSafelyToURL:ofType:forSaveOperation:error:] + 115 at ZZZZDocument.m:223

어떤 아이디어가의 예외 역 추적을 받고?

답변

0

그것의 당신이 함정 NSSaveAsOperation를 시도하고 열거의 영구 저장소에 마이그레이션 할 경우에 유엔 wrappered 핵심 데이터 파일

가능한하지 ...-journal 파일의 구조로 만드는 데 실패는 샌드 박스 외부.

-(void)saveToURL:(NSURL *)url ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation completionHandler:(void (^)(NSError *))completionHandler 
{ 
    NSLog(@" save op = %ld to %@ ",saveOperation,url); 
    NSURL *targeturl = url; 

    if(saveOperation == NSSaveAsOperation) 
    { 
     //migrate pstore 
     NSPersistentStore *store = [self.managedObjectContext.persistentStoreCoordinator.persistentStores lastObject]; 
     if (store) 
     { 
      NSMutableDictionary *opts = [NSMutableDictionary dictionary]; 
      [opts setValue:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption]; 
      [opts setValue:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption]; 

      NSError *error = NULL; 

      NSPersistentStore *newstore = [self.managedObjectContext.persistentStoreCoordinator migratePersistentStore:store toURL:url options:opts withType:store.type error:&error]; 

      if(newstore == nil) 
      { 
       NSLog(@"migration error %@",[error localizedDescription]); 
      } 

      self.fileURL = url; 


     } 


    } 

    [super saveToURL:targeturl ofType:typeName forSaveOperation:saveOperation completionHandler:completionHandler]; 
} 

그래서 우리는 NSPersistentDocument 프레임 워크를 사용하여 비 사소한 번들/폴더에있는 파일을 래퍼해야합니다.

Heres가 NSManagedDocument을 기다리는 중입니다 (희망하는 API입니다)