我可以在一个应用程序中创建一个核心数据对象图,然后在另一个预设状态中使用它吗



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

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

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

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

非常感谢所有的答案^_^

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

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

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

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

我的第一个问题是:我可以在中创建对象图和数据模型吗一个小的、独立的应用程序(比如称为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];
    }
}

我的第二个问题是:是否有可能提供"首次发射"用户第一次打开我的应用程序(有5000个现成的对象,随时可以访问/询问等等。?我希望该应用程序附带.sqlite或其他什么在ObjectMaker应用程序中导出数据的格式,并使用完全不知道.plist的存在。

关于这个问题,我不理解你的目标,但我会尽力提供一些提示。首先,我不太确定用户是否会同时使用5000个对象。因此,您可以显示它们中的一组执行特别查询(NSFetchRequest),以便仅在请求时显示它们。此外,如果您需要通过表显示对象,我真的建议您使用NSFetchedResultsController。这节课就是为了这个。它允许对数据进行更多的控制,并让核心数据为您进行内存管理。例如,它允许指定要检索的对象数量(比如10个)。滚动表格,其他10个对象将被提取等等…

希望能有所帮助。如果你需要其他东西,请告诉我。

相关内容

最新更新