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

如何将预先存在的sqlite文件导入核心数据iOS 7.1,ios,objective-c,sqlite,core-data,Ios,Objective C,Sqlite,Core Data,我创建了一个新的核心数据项目,并建立了我的核心数据模型。然后我在模拟器中运行它,然后保存上下文。然后,我使用核心数据编辑器5打开并查看我的数据库。我添加并编辑了新的授权,保存了文件,然后我进入模拟器检查它是否工作,所有内容都添加了,看起来很好。现在我想将此数据库添加到我的项目包中,并让应用程序加载此bata数据库作为其默认核心数据库。有了新的wal系统,我似乎无法让它工作。我想知道是否有人知道如何修复它。我听说你必须添加所有3个文件(.sqlite、wal、shm),但我不知道具体保存在哪里,或

我创建了一个新的核心数据项目,并建立了我的核心数据模型。然后我在模拟器中运行它,然后保存上下文。然后,我使用核心数据编辑器5打开并查看我的数据库。我添加并编辑了新的授权,保存了文件,然后我进入模拟器检查它是否工作,所有内容都添加了,看起来很好。现在我想将此数据库添加到我的项目包中,并让应用程序加载此bata数据库作为其默认核心数据库。有了新的wal系统,我似乎无法让它工作。我想知道是否有人知道如何修复它。我听说你必须添加所有3个文件(.sqlite、wal、shm),但我不知道具体保存在哪里,或者通过什么过程来保存。

将这三个文件作为资源添加到你的iOS应用程序中。然后

NSURL *storeURL = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"myfilename" ofType:@"myfileextension"]];
并在调用
-addPersistentStoreWithType:configuration:…
时将其传递给您的
NSPersistentStoreCoordinator

- (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;
}
但是,给了你这个片段,我不是这样做的,我也不知道它会起作用。相反,如果我要创建一个用作只读数据的静态数据存储,那么在创建数据存储(在另一个工具或程序中)以及在实际的iOS应用程序中读取数据时,我将使用旧的
DELETE
journal模式。这意味着更改
选项:
参数(在创建代码和读取代码上)

声明“不可能打开只读的WAL数据库。”进一步讨论见

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