ios - 重命名 coredata .xcdatamodeld 文件和迁移

标签 ios xcode core-data core-data-migration

我们有 2 个独立的应用程序,我们已将它们合并到同一工作区中的 2 个目标。两者都有自己的核心数据模型(app1.xcdatamodeldapp2.xcdatamodeld)。

现在两者都在同一个工作区中,因此不需要 2 个模型,因为它们 99% 相似。所以我想把.xcdatamodeld包的名字改成allApps.xcdatamodeld。我能够重命名它,但在这样做时我没有找到任何关于迁移行为的引用。

这是错误-

2015-07-28 09:04:06.079 AppName[51306:1423128] CoreData: error:
-addPersistentStoreWithType:SQLite configuration:(null) URL:file:///Users/shani/Library/Developer/CoreSimulator/Devices/EA75A69F-B108-4036-AB3D-B923F83D16DE/data/Containers/Data/Application/B1CB3AF3-DEF4-40DF-9A61-721063ECBB1D/Documents/AppName.sqlite
options:{
    NSInferMappingModelAutomaticallyOption = 1;
    NSMigratePersistentStoresAutomaticallyOption = 1;
    NSSQLitePragmasOption =     {
        "journal_mode" = WAL;
    }; } ... returned error Error Domain=NSCocoaErrorDomain Code=134130 "The operation couldn’t be completed. (Cocoa error
134130.)" UserInfo=0x7fc39c194360 {URL=file:///Users/shani/Library/Developer/CoreSimulator/Devices/EA75A69F-B108-4036-AB3D-B923F83D16DE/data/Containers/Data/Application/B1CB3AF3-DEF4-40DF-9A61-721063ECBB1D/Documents/AppName.sqlite,
metadata={
    NSPersistenceFrameworkVersion = 519;
    NSStoreModelVersionHashes =     {
        Attempt = <b4d1e878 69a97917 e751a67c 89e1887a ae4df1dc f380e4ee c9585f60 f39ff51e>;
        BookmarkFlashcard = <33112f7c 2fa20bec eb2e019c b5d619b4 92be2547 a65fabee 1ac86ab7 92dd77bb>;
        BookmarkQuestion = <38634b49 71f0d43c 6f9fbba9 bc2f1b81 675c9b3c f2da017e fc8de9d8 4e18a4a0>;
        Category = <b0e4d91b 0c0ebc71 ed0f403c 9a0eec20 fc1686aa 0169bc60 4bcc7e57 165bce15>;
    };
    NSStoreModelVersionHashesVersion = 3;
    NSStoreModelVersionIdentifiers =     (
        ""
    );
    NSStoreType = SQLite;
    NSStoreUUID = "F1B37CD0-8B89-4893-A262-1013C3544026";
    "_NSAutoVacuumLevel" = 2; }, reason=Can't find model for source store} with userInfo dictionary {
    URL = "file:///Users/shani/Library/Developer/CoreSimulator/Devices/EA75A69F-B108-4036-AB3D-B923F83D16DE/data/Containers/Data/Application/B1CB3AF3-DEF4-40DF-9A61-721063ECBB1D/Documents/AppName.sqlite";
    metadata =     {
        NSPersistenceFrameworkVersion = 519;
        NSStoreModelVersionHashes =         {
            Attempt = <b4d1e878 69a97917 e751a67c 89e1887a ae4df1dc f380e4ee c9585f60 f39ff51e>;
            BookmarkFlashcard = <33112f7c 2fa20bec eb2e019c b5d619b4 92be2547 a65fabee 1ac86ab7 92dd77bb>;
            BookmarkQuestion = <38634b49 71f0d43c 6f9fbba9 bc2f1b81 675c9b3c f2da017e fc8de9d8 4e18a4a0>;
            Category = <b0e4d91b 0c0ebc71 ed0f403c 9a0eec20 fc1686aa 0169bc60 4bcc7e57 165bce15>;
        };
        NSStoreModelVersionHashesVersion = 3;
        NSStoreModelVersionIdentifiers =         (
            ""
        );
        NSStoreType = SQLite;
        NSStoreUUID = "F1B37CD0-8B89-4893-A262-1013C3544026";
        "_NSAutoVacuumLevel" = 2;
    };
    reason = "Can't find model for source store"; } 2015-07-28 09:04:06.089 AppName[51306:1423128] CoreData: annotation:
NSPersistentStoreCoordinator's current model hashes are {
    Attempt = <b4d1e878 69a97917 e751a67c 89e1887a ae4df1dc f380e4ee c9585f60 f39ff51e>;
    BookmarkFlashcard = <33112f7c 2fa20bec eb2e019c b5d619b4 92be2547 a65fabee 1ac86ab7 92dd77bb>;
    BookmarkQuestion = <38634b49 71f0d43c 6f9fbba9 bc2f1b81 675c9b3c f2da017e fc8de9d8 4e18a4a0>;
    Category = <b0e4d91b 0c0ebc71 ed0f403c 9a0eec20 fc1686aa 0169bc60 4bcc7e57 165bce15>; }

有没有办法在已经投入生产的应用中将 name1.xdatamodel 重命名为 name2.xdatamodel?

谢谢

最佳答案

与其重命名 app1.xcdatamodeld 或 app2.xcdatamodeld,不如创建一个新的 (allApps.xcdatamodeld)。这个新模型可以只是您想要保留的任何模型的副本。

然后在两个目标中的每一个中添加一个 .xcmappingmodel 文件并将其链接到 allApps.xcdatamodeld 并执行所需的任何转换。

根据 coreData 的工作方式,您需要保留原始的 app1 和 app2 xcdatamodeld 文件,以确保您永远不会破坏恰好还在其设备上运行您最旧的应用程序的用户。

文件 > 新建 > 文件 > 核心数据 > 映射模型。 选择源模型并单击下一步。 enter image description here

选择目标数据模型并单击下一步。 enter image description here

在 app2 的另一个目标中再次执行此操作,您应该没问题。

关于ios - 重命名 coredata .xcdatamodeld 文件和迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31668137/

相关文章:

iphone - 错误:访问全局变量和核心数据时,NSArray在枚举时发生了变异

ios - NSFetchedResultsController 未按预期获取

ios - Swift (iOS),等待所有图片下载完成再返回

objective-c - 如何在 map 工具包中显示默认用户位置和自定义注释 View ?

ios - 在 iOS 中找不到模块 'GoogleMobileAds'

iphone - 核心数据一对多关系

ios - 在 swift 的嵌套闭包中正确放置捕获列表

ios - 合并两个数组的每个元素并附加到一个数组

ios - avqueueplayer 在后台模式下播放问题

swift - 如何使用 Swift 打开本地保存的 PDF 文件