在我的cocoa应用程序中,我使用核心数据来维护我的所有数据。但是有一段时间,我得到了下面给出的问题。
问题:
CoreData: error: (14) I/O error for database at /Users/my-mac/Documents/FileT.sqlite. SQLite error code:14, 'unable to open database file'
这里我给出了persistentStoreCoordinator的代码参考:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
stringByAppendingPathComponent: @"FileT.sqlite"]];
NSError *error = nil;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:[self managedObjectModel]];
options = @{
NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES
};
if(![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil URL:storeUrl options:options error:&error]) {
/*Error for store creation should be handled in here*/
}
return _persistentStoreCoordinator;
}
有谁可以建议我在这里缺少什么?
答案 0 :(得分:3)
您的应用程序可能正在移动或更改WAL日志文件或SQLite文件,或者可能已假设文件结构对于未使用WAL的Core Data版本有效。
您的SQLite数据库也可能已损坏,错误14是SQLite在Core Data打开时尝试修复该文件。如果在发生写入时应用程序未正确关闭,则可能发生此损坏 - and many other circumstances。没有正确关闭是Apple平台上最常见的情况 - 例如,如果Core Data正在编写记录而操作系统因应用程序没有响应而杀死应用程序。这可能会导致腐败。