Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我是否可以在一个应用程序中创建核心数据对象图,然后从预设状态在另一个应用程序中使用它?_Ios_Objective C_Core Data_Object Graph - Fatal编程技术网

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

Ios 我是否可以在一个应用程序中创建核心数据对象图,然后从预设状态在另一个应用程序中使用它?,ios,objective-c,core-data,object-graph,Ios,Objective C,Core Data,Object Graph,我的应用程序现在有一个大约5000个字典的.plist,在运行时,我用它来创建5000个自定义类的对象。每一个都包含一些字符串、一些布尔值等。这是一个相当快速的过程,最多需要几秒钟,但使用.plist处理数千个对象有点笨拙 我将迁移到核心数据(我以前从未使用过),因此第一步是将.plist中的数据获取到这些自定义对象中,然后将它们保存在上下文中。我看了视频之类的,我想我会没事的 我的第一个问题是:我是否可以在一个单独的小应用程序(比如称为ObjectMaker)中创建对象图和数据模型,然后将其保

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

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

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

我的第二个问题是:是否可以提供用户在第一次打开我的应用程序时将获得的对象图的“首次启动状态”(这5000个对象已经准备好,可以访问/查询,等等?我希望该应用程序附带.sqlite或我在ObjectMaker应用程序中导出数据的任何格式,并在不知道.plist存在的情况下专门使用它们

非常感谢您的回答^_^

我的第一个问题是:我可以在中创建对象图和数据模型吗 一个单独的小应用程序(比如称为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];
    }
}
我的第二个问题是:是否可以提供“首次发射” 用户第一次打开my时将获得的对象图的“状态” 应用程序(其中5000个对象已准备就绪,可以访问/ 我希望这个应用程序附带.sqlite或其他什么 将数据导出到ObjectMaker应用程序中的格式,并使用该格式 唯一的,永远不知道.plist的存在

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


希望这能有所帮助。如果您还需要其他信息,请告诉我。

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

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

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


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

因此我尝试这种方法,但我得到了“reason=”用于打开存储的模型与用于创建存储的模型不兼容“我已尝试清除Xcode/sim/deriveddata,但每次都会出现此错误。听起来您更改了数据模型,但没有对其进行正确的版本控制。您需要删除现有数据库或删除最近的更改…正确增加数据模型的版本,然后重新应用更改。