Core data 无法读回使用-migratePersistentStore写入的SQLite文件,类型为:NSInMemoryStoreType

Core data 无法读回使用-migratePersistentStore写入的SQLite文件,类型为:NSInMemoryStoreType,core-data,Core Data,我的问题与类似,只是我没有使用UndoManager,而且建议的解决方案对我不起作用 我的应用程序从第三方应用程序导入数据并将其存储在内存中,直到用户将其保存。导入会定期将:'保存到后台线程上自己的managedObjectContext。此MOC使用其父NSPersistentDocument MOC的持久存储协调器。为了避免写入磁盘上的临时文件,使用NSInMemoryStoreType类型添加了一个持久存储。当用户希望实际将数据保存到磁盘上的文件时,将在NSPersistentDocume

我的问题与类似,只是我没有使用UndoManager,而且建议的解决方案对我不起作用

我的应用程序从第三方应用程序导入数据并将其存储在内存中,直到用户将其保存。导入会定期将:'保存到后台线程上自己的managedObjectContext。此MOC使用其父NSPersistentDocument MOC的持久存储协调器。为了避免写入磁盘上的临时文件,使用NSInMemoryStoreType类型添加了一个持久存储。当用户希望实际将数据保存到磁盘上的文件时,将在NSPersistentDocument中的writeToURL重写中调用类型为NSInMemoryStoreType的migratePersistentStore

只要我在下面代码的//1和//2处使用NSXMLStoreType进行写和读,这一切都可以正常工作

一旦切换到NSSQLiteStoreType,写入时会生成一个包含所有正确数据的有效SQLite文件,但读回该文件失败,出现以下错误:

CoreData: error: Encountered exception I/O error for database at /a/b/c.dat.  SQLite error code:14, 'unable to open database file' with userInfo {
NSFilePath = "/a/b/c.dat";
NSSQLiteErrorDomain = 14;
} while checking table name from store: <NSSQLiteConnection: 0x6080001e3300>

CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///a/b/c.dat options:{
    NSMigratePersistentStoresAutomaticallyOption = 1;
    NSReadOnlyPersistentStoreOption = 1;
} ... returned error Error Domain=NSCocoaErrorDomain Code=256 "The file couldn’t be opened." UserInfo=0x60800006df40 {NSSQLiteErrorDomain=14, NSUnderlyingException=I/O error for database at /a/b/c.dat.  SQLite error code:14, 'unable to open database file'} with userInfo dictionary {
    NSSQLiteErrorDomain = 14;
    NSUnderlyingException = "I/O error for database at /a/b/c.dat.  SQLite error code:14, 'unable to open database file'";
一个典型的数据库由30k个对象组成,当使用XML时,这些对象的写入和读取需要很长时间,所以我确实需要使用SQLite类型


欢迎提出任何建议。

我使用-writeToUrl方法中的以下dict解决了这个问题:

NSDictionary *opts = @{NSSQLitePragmasOption: @{@"journal_mode":@"DELETE"}};
NSDictionary *opts = @{NSSQLitePragmasOption: @{@"journal_mode":@"DELETE"}};