如何将预先存在的sqlite文件导入核心数据iOS 7.1

时间:2014-04-17 19:00:02

标签: ios objective-c sqlite core-data

我创建了一个新的核心数据项目并设置了我的核心数据模型。然后我在模拟器中运行它,然后保存上下文。然后,我使用Core Data Editor 5打开并查看我的数据库。我添加并编辑了新的权限,保存了文件,然后我进入模拟器检查它是否有效并且所有内容都已添加并且看起来很好。我现在想要将此数据库添加到我的项目包中,并让应用程序加载此bata基础作为其默认核心数据数据库。有了新的沃尔玛系统,我似乎无法让它发挥作用。我想知道是否有人知道如何解决它。我听说你必须添加所有3个文件(.sqlite,wal,shm),但我不知道在哪里保存它或通过什么过程来完成它。

1 个答案:

答案 0 :(得分:2)

将所有三个作为资源添加到iOS应用程序中。然后

NSURL *storeURL = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"myfilename" ofType:@"myfileextension"]];

并在NSPersistentStoreCoordinator的调用中将其传递给-addPersistentStoreWithType:configuration:...

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    NSURL *storeURL = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"myfilename" ofType:@"myfileextension"]];

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                   configuration:nil
                                                             URL:storeURL
                                                         options:@{NSReadOnlyPersistentStoreOption : @YES,
                                                                   NSSQLitePragmasOption: @{ @"journal_mode" : @"WAL"}}
                                                           error:&error]) {
        /*
         Replace this implementation with code to handle the error appropriately.
        */

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return _persistentStoreCoordinator;
}

虽然给了你这个片段,但这不是我做的方式,而且我不知道它会起作用。相反,如果我创建一个静态数据存储区以用作只读数据,那么当我创建数据存储区(在另一个工具或程序中)时,我会使用旧的DELETE日志模式在我的实际iOS应用程序中。这意味着更改options:参数(在创建代码和读取代码上)。

              options:@{NSReadOnlyPersistentStoreOption : @YES,
                        NSSQLitePragmasOption: @{ @"journal_mode" : @"DELETE"}}

http://www.sqlite.org/draft/wal.html状态"无法打开只读WAL数据库。"在http://www.sqlite.org/draft/wal.html#readonly进一步讨论。