我看到这个标题的几个崩溃报告:核心数据崩溃 - 该NSPersistentStoreCoordinator没有持久性存储(损坏的文件)
的NSPersistentStoreCoordinator没有持久性存储(损坏的文件)。它不能执行保存操作。我添加了持久性存储协调代码是在这里:
NSURL *applicationDocumentsDirectory = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask].lastObject;
NSURL *storeURL = [applicationDocumentsDirectory URLByAppendingPathComponent:@"myDatabase.sqlite"];
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"myDataModel" withExtension:@"momd"];
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
NSDictionary *storeOptions = @{NSInferMappingModelAutomaticallyOption:@YES,
NSMigratePersistentStoresAutomaticallyOption:@YES,
NSSQLitePragmasOption:@{@"synchronous": @"OFF"}};
// Create the persistent store.
self.persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];
NSError *error = nil;
if (![self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:storeOptions
error:&error])
{
}
我已经登录所散发出来的“addPersistentStoreWithType”调用的错误,它是:
NSCocoaErrorDomain 259
NSSQLiteErrorDomain = 11;
NSUnderlyingException = "Fatal error. The database at <path> is corrupted. SQLite Error code:11, 'database disk image is malformed'
我承担这意味着核心数据库在不可恢复的情况下受到损害。是这样吗?我有一个脱离核心数据库并从我的服务器重新填充的备份计划,但我想知道它是否绝对无法恢复,如果有任何问题,我可以做,找出原因可能发生的原因。
一些额外的信息:
的崩溃报告指出RAM可用3-6%,磁盘可用57%,运行iOS 10.开始看到这些报告的应用程序的版本较新的模型手机也是第一个版本作为其中的一部分,它有一个轻量级的核心数据迁移,我不确定这是否有所作为。我知道有98%的用户成功升级到该版本,并没有任何问题进行迁移。这是来自报告的堆栈跟踪。尽管它说的是“device_locked”,但我知道,无论何时我尝试保存到持久存储区,即使用户在应用程序中,都会发生崩溃。
“NSSQLitePragmasOption”选项的目标是什么?@ {@“synchronous”:@“OFF”}'? –
写入磁盘的速度。你认为这可能会导致腐败? – haplo1384
绝对。从http://sqlite.org/pragma.html#pragma_synchronous:“如果运行SQLite的应用程序崩溃,数据将是安全的,但数据库可能会损坏我感谢乔恩,”但我是“应用程序运行sqlite”我的 –