SQLite错误代码:14,'无法打开数据库文件'

时间:2014-07-19 10:02:19

标签: macos sqlite cocoa core-data

在我的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;

}

有谁可以建议我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

查看Technical Q&A 1809: New default journaling mode for Core Data SQLite stores in iOS 7 and OS X Mavericks

您的应用程序可能正在移动或更改WAL日志文件或SQLite文件,或者可能已假设文件结构对于未使用WAL的Core Data版本有效。

您的SQLite数据库也可能已损坏,错误14是SQLite在Core Data打开时尝试修复该文件。如果在发生写入时应用程序未正确关闭,则可能发生此损坏 - and many other circumstances。没有正确关闭是Apple平台上最常见的情况 - 例如,如果Core Data正在编写记录而操作系统因应用程序没有响应而杀死应用程序。这可能会导致腐败。