2

我的应用程序现在有一个包含大约 5,000 个字典的 .plist,在运行时,我用它来创建自定义类的 5,000 个对象。每个都包含一些字符串,一些布尔值等。这是一个相当快的过程,需要几秒钟,但使用 .plist 包含数千个对象有点笨拙。

我将迁移到 Core Data(我以前从未使用过),因此第一步是将 .plist 中的数据获取到这些自定义对象中,然后将它们保存在上下文中。我看过视频之类的,我想我会没事的。

我的第一个问题是:我可以在一个小的独立应用程序(例如,称为 ObjectMaker)中创建对象图和数据模型,然后将其保存在那里,然后导入 .sqlite 或任何我将数据导出到实际应用程序中的格式正在制作?从那里,我将执行所有获取请求,进一步编辑和保存数据等。

我的第二个问题是:是否可以提供用户第一次打开我的应用程序时会得到的对象图的“首次启动状态”(这 5,000 个对象是现成的并且可以访问/查询等?我'希望应用程序附带 .sqlite 或我在 ObjectMaker 应用程序中导出数据的任何格式,并专门使用它,而不知道 .plist 存在。

非常感谢任何和所有的答案^_^

4

2 回答 2

4

我们经常使用我们的许多应用程序这样做。在开发过程中,我们构建了数据模型,但经常需要导入一堆主数据并执行一些默认的应用程序配置,以达到我们将与产品一起发布的 sqlite 数据库的“初始状态”。

在应用程序委托中,我们有一个#define(或变量),您可以使用它来切换“数据库创建和导入”模式。在运行创建模式时,我们删除任何现有的 .sqlite 文件,重新初始化 Core Data 堆栈,然后运行导入例程将我们的 .plist 和 .csv 数据转换为所需的 Core Data 对象。

我们使用模拟器并构建和运行。导入数据并配置应用程序的默认选项后,我们导航到包含您正在执行的应用程序的模拟器文件夹,然后复制数据库并将其放回项目文件中。

当“数据库创建和导入”模式未启用时,它首先检查是否在正确的位置有数据库。如果没有,它会将默认数据库从主包复制到设备上的正确位置。

于 2013-02-23T18:29:08.397 回答
2

我的第一个问题是:我可以在一个小的独立应用程序(例如,称为 ObjectMaker)中创建对象图和数据模型,然后将其保存在那里,然后导入 .sqlite 或任何我将数据导出到实际应用程序中的格式正在制作?从那里,我将执行所有获取请求,进一步编辑和保存数据等。

当然。您可以在您的 ObjectMaker 应用程序中创建您的 sql 存储。完成后,您可以在应用程序的主包中获取该商店并复制(您必须自己做)。

启动时,应用程序会将商店复制到主文件夹中,如下所示。持久存储必须指向该文件夹存储。

NSString *storePath = [[self applicationDocumentsDirectory] 
    stringByAppendingPathComponent: @"yourStore.sqlite"];
NSURL *storeUrl = [NSURL fileURLWithPath:storePath];

NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:storePath]) {
    NSString *defaultStorePath = [[NSBundle mainBundle] 
        pathForResource:@"yourStore" ofType:@"sqlite"];
    if (defaultStorePath) {
        [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
    }
}

我的第二个问题是:是否可以提供用户第一次打开我的应用程序时会得到的对象图的“首次启动状态”(这 5,000 个对象是现成的并且可以访问/查询等?我'希望应用程序附带 .sqlite 或我在 ObjectMaker 应用程序中导出数据的任何格式,并专门使用它,而不知道 .plist 存在。

关于这个问题,我不明白你的目标,但我会尝试提供一些提示。首先,我不太确定用户是否会一次性使用 5,000 个对象。因此,您可以显示一组执行临时查询 ( NSFetchRequest) 以仅在请求时显示它们。此外,如果您需要通过表格显示对象,我真的建议使用NSFetchedResultsController. 这门课就是为了这个。它允许对数据进行更多控制,并让 Core Data 为您进行内存管理。例如,它允许指定要检索的对象数量(比如 10 个)。滚动表格,将获取其他 10 个对象,依此类推...

希望有帮助。如果你需要别的东西,请告诉我。

于 2013-02-23T18:24:14.617 回答