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