我是ios世界的新手,我有一个被Apple拒绝的应用程序,因为从api加载数据需要很长时间(大量记录保存到我的数据库中)。所以我决定使用预先填充的sqlite数据库来交付我的应用程序,以防止初始加载对象。
首先,我检查了这个网站,了解如何在我的项目中插入我的数据库。 Site
我认为网站没有更新,因为在ios7中创建的数据库在缓存文件夹中附带了3个不同的文件
我应该使用哪一个导入? 第二,我应该如何读取数据库文件并从那里复制/创建我的数据库? 我当前的数据库是使用CoreData创建的,当我尝试复制/创建导入的数据库时会出现问题吗?
欢迎使用教程和代码片段:)
答案 0 :(得分:1)
您需要记住的第一件事是您真的应该使用Core Data创建这个预先填充的数据库。
要避免使用三个文件,创建数据库的工具需要正确关闭它。以下是SQLite website的更多信息。
如果您正确拆除Core Data堆栈,我不知道Core Data是否会这样做,但它可能应该这样做。如果不这样做,请尝试打开和关闭使用sqlite实用程序创建的Core Data数据库。
如何在应用中使用它取决于您的应用。如果这是用户应该继续填充数据库的初始状态,则可以在初始化Core Data堆栈之前将文件复制到适当的位置(如Application Data子文件夹)。
另一种情况是,这个数据库是一个示例数据库,就像照片库那样,用户在开始使用应用程序时不应该保留这些照片。在这种情况下,我建议将此数据库与用户的数据库分开。
第三种情况是这个数据库是什么东西的大目录。并且用户向其添加其他条目。您可能希望不时更新此目录而不触及用户的条目。在这种情况下,我还建议不要将用户数据与此目录混合。
答案 1 :(得分:1)
经过一些研究和测试后,我设法做到了。
所以我根据我的问题中的链接将sqlite数据库添加到项目中。 我发现这个有用的帖子几乎完成了这项工作。 Post
所以我在AppDelegate上修改了persistentStoreCoordinator方法,添加了这段代码 和我在旧数据库中使用的数据库请求没有问题。
NSDictionary *options = @{ NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"} };
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyDB.sqlite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]])
{
NSURL *preloadURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"MyDB" ofType:@"sqlite"]];
NSError* err = nil;
if (![[NSFileManager defaultManager] copyItemAtURL:preloadURL toURL:storeURL error:&err])
{
NSLog (@"Error - Could not preload database.");
}
}