0

我有一個NSPersistentDocument基於應用程序,它失敗時autosavesInPlace設置返回YES,返回NO,問題消失,保存新文檔。autosavesInPlace導致保存新文檔失敗

  • 我創建一個新文檔
  • 進行一些更改
  • 保存它,從而運行NSSaveAsOperation,該文件的名稱和URL的變化和所有似乎很好,但接下來的節省將拋出一個非常描述

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

這僅當文檔嘗試運行NSSaveAsOperation後保存情況。任何其他保存類型都可以正常工作,如現有文檔的更改。有趣的是,如果我不改變名稱或位置,我也不會得到這個問題。

即時得到的

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

其爲未wrappered核心數據文件

在您嘗試陷阱NSSaveAsOperation並做了該枚舉持久存儲在遷移的事件不可能的...-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框架。

繼承人等待NSManagedDocument(這是一個許願井API)