-1

autosavesInPlace我有一个基于 NSPersistentDocument 的应用程序,当设置为 return时无法保存新文档YES,returnNO并且问题消失了。

  • 我创建一个新文档
  • 做一些改变
  • 保存它,这样运行NSSaveAsOperation,文档的名称和 URL 发生了变化,一切看起来都很好,但是下一次保存会抛出一个非常具有描述性的内容

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

这仅在文档尝试在NSSaveAsOperation. 任何其他保存类型都可以正常工作,就像对现有文档的更改一样。有趣的效果是,如果我不更改名称或位置,我也不会遇到这个问题。

我得到一个异常回溯

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

有任何想法吗?

4

1 回答 1

0

未包装的核心数据文件不可能

如果您尝试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框架非常重要的包/文件夹中。

Heres等待NSManagedDocument(那是一个许愿API)

于 2012-12-26T11:39:39.347 回答