1

我的应用程序必须为数据库中已有数据的最终用户启动,以便在他们使用应用程序时向他们显示信息。

我的问题:如何将数据加载到应用程序数据库中?

xcode 上有一个“导入...”选项(在选择 xcdatamodeld 时在编辑器上),但我无法理解所需的文件类型是什么 - 我尝试了 .xls、.csv 和 .sqlite,但没有一个是“可导入的”。

帮助!

4

2 回答 2

0

如果数据已经是 .sqlite 格式(见下面的注释),将该文件复制到项目中(将文件移动到 Xcode 项目目录,然后从 Xcode 中选择 File -> Add files to "Project name",然后找到计算机目录中的文件。

在persistentStoreCoordinator 函数下的主AppDelegate.m 文件中(请参阅本教程以在项目中设置sqlite/Core Data),如果该文件不存在,则编写从主捆绑资源复制到应用程序资源目录的代码:

NSURL *dbUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]
                                           stringByAppendingPathComponent: @"yourDBName.sqlite"]];

if (![[NSFileManager defaultManager] fileExistsAtPath:[dbUrl path]]) {
    NSURL *bundleURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"yourDBName" ofType:@"sqlite"]];
NSError* err = nil;

    if (![[NSFileManager defaultManager] copyItemAtURL:bundleURL toURL:dbUrl error:&err]) {
        NSLog(@"Could not copy main bundle data");
    }
    else { NSLog(@"Main bundle data successfully copied"); }
}

重要的是,您从主包中预加载的 .sqlite 数据库已在 Xcode 项目中正确创建(iOS 应用程序只能识别特殊格式的 .sqlite 文件)。

一旦加载,只要 Core Data 托管对象上下文将其持久存储协调器设置为此 .sqlite 文件,并且其结构与核心数据模型的结构匹配,它将被识别为应用程序的数据库。

于 2013-10-01T18:33:23.513 回答
0

当你发布你的应用程序时,将数据库添加到你的包中。在初始启动时,您会查看数据库是否位于本地文件系统中。如果不是(而且这不是您第一次启动),则将数据库从捆绑包复制到本地文件系统,打开它,然后从那里使用它。不要尝试从捆绑包中使用它,它设置为只读。

我假设您使用的是 SQLite 数据库或其他类型的文件。您可以使用以下说明将文件添加到包中:如何将文件添加到 XCode 中的资源文件夹?

于 2013-10-01T17:52:14.783 回答