使用在一个项目中创建的核心数据作为另一个项目的输入

时间:2014-11-21 22:10:10

标签: ios core-data swift

我发现了几个类似的问题,但没有任何东西能满足我的需求。我在Swift中开发了一个简单的数字化应用程序,它可以显示图像,并允许我使用模拟器将图像中的特定点数字化。

我使用Core Data来保存数据。一个实体(“Coursemap”)具有图像(二进制数据)和一些元数据(字符串)的属性。 Coursemap实体与“Points”实体具有一对多关系。 Points实体定义图像中特定点的x / y坐标的属性。数字化仪应用程序运行良好;我可以使用Core Data数字化并保存多个图像。在我的应用程序的最终版本中,我可能需要大约50-60个数字化图像。

我想要做的是使用我的数字化仪应用输出中的数据作为我正在开发的iPad游戏的输入。所以我基本上想将我的数字化仪项目中创建的核心数据文件复制到我的游戏项目中,这样我的游戏应用程序就可以使用数字化图像了。有没有办法做到这一点? Core Data是处理此问题的最佳方式吗?

到目前为止我尝试过:我将两个项目命名为相同,但将它们保存在不同的文件夹中,例如: ~/digitizer/myApp and ~/games/myApp.

数字化仪核心数据文件在文件夹中创建:
~/Library/Developer/CoreSimulator/Devices/…/Documents.

当我运行游戏应用程序时,似乎期望Core Data文件位于同一目录中(这就是为什么我将两个项目命名为相同)。当游戏应用程序尝试获取数据时,我收到错误“用于打开商店的模型与用于创建商店的模型不兼容”。我仔细检查了数据模型,它们完全相同。

有关于此的任何想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

我意识到类似的东西: - 从模拟器文件夹中选择预填充的sqlite文件 - 将其复制到您的其他项目 - 在运行时,检查你的其他项目是否存在sqlite结构,如果它没有通过将sqlite文件从bundle复制到documents文件夹来创建它:

if(![[NSFileManager defaultManager]fileExistsAtPath:coreDataDatabase.path])
        {
            url = coreDataDatabase;
            [[NSFileManager defaultManager] createDirectoryAtURL:url withIntermediateDirectories:YES attributes:nil error:NULL];

            url = [url URLByAppendingPathComponent:@"StoreContent"];
            [[NSFileManager defaultManager] createDirectoryAtURL:url withIntermediateDirectories:YES attributes:nil error:NULL];

            url = [url URLByAppendingPathComponent:@"persistentStore"];

            // copy the sqlite file to /Documents/<YourApp>/StoreContent/persistentStore
            NSArray *stringParts = [kCoreDataPreloadedDatabase componentsSeparatedByString:@"."];
            NSString *sqlitePath = [[NSBundle mainBundle]
                                    pathForResource:[stringParts objectAtIndex:0] ofType:@"sqlite"];
            NSError *anyError = nil;
            BOOL success = [[NSFileManager defaultManager]
                            copyItemAtPath:sqlitePath toPath:[url path] error:&anyError];
            if(!success)
            {
                Error(@"Unable to copy sqlite file: %@", anyError);
            }
        }