【问题标题】:Core data mapping model not working with correct hashes核心数据映射模型不适用于正确的哈希
【发布时间】:2013-07-04 07:36:53
【问题描述】:

所以我决定为我的一个实体创建 2 个子实体。

为了测试我创建了这两个实体,没有任何属性也没有关系。

如果我使用推断映射模型,核心数据会失败并且应用程序会崩溃。举报here

如果我创建映射模型,核心数据也无法升级。我检查了核心数据日志,它说实体哈希是正确的。 这里有什么问题?

 CoreData: annotation: Incompatible version schema for persistent store
 'file://localhost/Users/.../StoreContent/persistentStore'.
 store metadata = {
     NSPersistenceFrameworkVersion = 419;
     NSStoreModelVersionHashes =     {
         Chat = <05d870d5 8d51e966 51a6b121 56fd0eff 6a35760e 829245ce 38e82724 b511b400>;
         Contact = <7f14d6ac 1bf1035e 63208d38 c048c396 d6385a95 3c8aec0b 36fbb86f 293fdb4d>;
         Message = <45852277 e01bffe5 a83f71fe 09c20dba 838bb51c 411dc185 56ba4ff1 7b68ba3d>;
         User = <1400bc94 f742db62 91627ea5 883e54a8 104da454 a9a7b073 f1e827ad 26f7e7c8>;
     };
     NSStoreModelVersionHashesVersion = 3;
     NSStoreModelVersionIdentifiers =     (
         3July13
     );
     NSStoreType = SQLite;
     NSStoreUUID = "73F77A17-9720-4D0E-90DD-D07A0EAECB29";
     "_NSAutoVacuumLevel" = 2; } and current model versions = {
     Broadcast = <e2afd25a 758f8e8b 7a2e1f2d 03042e32 e5e23693 a4935257 04a8e9fb 535e2452>;
     Chat = <05d870d5 8d51e966 51a6b121 56fd0eff 6a35760e 829245ce 38e82724 b511b400>;
     Contact = <7f14d6ac 1bf1035e 63208d38 c048c396 d6385a95 3c8aec0b 36fbb86f 293fdb4d>;
     Group = <67fa7527 b68ea99d ee8e704f 30f20e48 58350963 73e29c19 8aea7604 dfac7d7c>;
     Message = <45852277 e01bffe5 a83f71fe 09c20dba 838bb51c 411dc185 56ba4ff1 7b68ba3d>;
     User = <1400bc94 f742db62 91627ea5 883e54a8 104da454 a9a7b073 f1e827ad 26f7e7c8>; } 
2013-07-04 10:25:53.678 JonglaIM[90118:22103]
 CoreData: annotation: (migration)   will attempt automatic schema
 migration 2013-07-04 10:25:55.209 x[90118:22103] CoreData:
 annotation: (migration) looking for mapping model with   source
 hashes:  {
     Chat = <05d870d5 8d51e966 51a6b121 56fd0eff 6a35760e 829245ce 38e82724 b511b400>;
     Contact = <7f14d6ac 1bf1035e 63208d38 c048c396 d6385a95 3c8aec0b 36fbb86f 293fdb4d>;
     Message = <45852277 e01bffe5 a83f71fe 09c20dba 838bb51c 411dc185 56ba4ff1 7b68ba3d>;
     User = <1400bc94 f742db62 91627ea5 883e54a8 104da454 a9a7b073 f1e827ad 26f7e7c8>; }  
destination hashes: {
     Broadcast = <e2afd25a 758f8e8b 7a2e1f2d 03042e32 e5e23693 a4935257 04a8e9fb 535e2452>;
     Chat = <05d870d5 8d51e966 51a6b121 56fd0eff 6a35760e 829245ce 38e82724 b511b400>;
     Contact = <7f14d6ac 1bf1035e 63208d38 c048c396 d6385a95 3c8aec0b 36fbb86f 293fdb4d>;
     Group = <67fa7527 b68ea99d ee8e704f 30f20e48 58350963 73e29c19 8aea7604 dfac7d7c>;
     Message = <45852277 e01bffe5 a83f71fe 09c20dba 838bb51c 411dc185 56ba4ff1 7b68ba3d>;
     User = <1400bc94 f742db62 91627ea5 883e54a8 104da454 a9a7b073 f1e827ad 26f7e7c8>; } 
 2013-07-04 10:25:55.214 x[90118:22103]
 CoreData: annotation: (migration) checking mapping model at path
file://localhost/Users/.../Model.cdm
 source hashes:  {(
     <1400bc94 f742db62 91627ea5 883e54a8 104da454 a9a7b073 f1e827ad 26f7e7c8>,
     <7f14d6ac 1bf1035e 63208d38 c048c396 d6385a95 3c8aec0b 36fbb86f 293fdb4d>,
     <05d870d5 8d51e966 51a6b121 56fd0eff 6a35760e 829245ce 38e82724 b511b400>,
     <45852277 e01bffe5 a83f71fe 09c20dba 838bb51c 411dc185 56ba4ff1 7b68ba3d> )}  
destination hashes: {(
     <e2afd25a 758f8e8b 7a2e1f2d 03042e32 e5e23693 a4935257 04a8e9fb 535e2452>,
     <1400bc94 f742db62 91627ea5 883e54a8 104da454 a9a7b073 f1e827ad 26f7e7c8>,
     <7f14d6ac 1bf1035e 63208d38 c048c396 d6385a95 3c8aec0b 36fbb86f 293fdb4d>,
     <67fa7527 b68ea99d ee8e704f 30f20e48 58350963 73e29c19 8aea7604 dfac7d7c>,
     <05d870d5 8d51e966 51a6b121 56fd0eff 6a35760e 829245ce 38e82724 b511b400>,
     <45852277 e01bffe5 a83f71fe 09c20dba 838bb51c 411dc185 56ba4ff1 7b68ba3d> )} 2013-07-04 10:25:55.215 x[90118:22103] CoreData:
 annotation: (migration) no suitable mapping model found

【问题讨论】:

  • 在“寻找映射模型...目标哈希”下,广播行是空的 - 这只是一个错误的复制/粘贴吗?假设是这样,您是否尝试过将映射模型显式设置为 Model.cdm,而不是让 CoreData 进行比较以找到匹配项?我怀疑这不会解决问题,但可能会生成一条不同的错误消息,其中包含有关模型不被接受的原因的更多信息(虽然不确定,但不必明确映射自己)。
  • 如何将映射设置为我的 model.cdm 文件?我刚刚看到核心数据搜索我的映射文件并找到它并尝试使用,但没有成功。
  • 我一直在查看我的代码和书签,以了解我在尝试一次时如何手动指定映射模型,但不幸的是没有提出任何建议。但是,我确实遇到了这个问题,这似乎与您的问题相同,并提供了几种可能的解决方案:blog.vucica.net/2013/04/…
  • 另见 stackoverflow.com/questions/15094213/… 我没有发现在 Xcode 5 中重新生成映射模型有帮助,但它可能对你有用。

标签: ios core-data


【解决方案1】:

现在是 2019 年,在撰写本文时是 Xcode v10.2,这个问题仍然存在。

我向我的数据模型(在新版本中)添加了一个属性,并希望根据当前属性将一些数据迁移到它,以确保在访问商店时它具有一个值。我创建了一个新的模型版本,添加了属性,然后使用自定义策略创建了实体映射文件来实现这一点。

在将我的头撞到墙上一整天后,此处的说明突出显示了修复:https://blog.vucica.net/2013/04/core-data-migrating-ignores-manual-mapping-model-or-fails-migration-despite-mapping-models-existence.html

基本上,在 Xcode 映射模型编辑器中,交换“源”和“目标”模型,然后再将它们切换回来。我验证了这实际上确实通过在更改之前提交来导致更改,然后观察对xcmapping.xml文件的细微更改。

这不是 Xcode 中第一次愚蠢的错误导致沮丧,而且可能不会是最后一次。那好吧。向上和向上!

【讨论】:

    【解决方案2】:

    直接指定映射模型的API是NSMigrationManager的:

    - (BOOL)migrateStoreFromURL:(NSURL *)sourceURL 
        type:(NSString *)sStoreType 
        options:(NSDictionary *)sOptions 
        withMappingModel:(NSMappingModel *)mappings 
        toDestinationURL:(NSURL *)dURL 
        destinationType:(NSString *)dStoreType 
        destinationOptions:(NSDictionary *)dOptions 
        error:(NSError **)error; 
    

    不幸的是,这不太可能有太大帮助,因为直接通过此 API 使用模型时会执行相同的哈希检查。

    iOS 6 中的哈希记录已损坏,即使它明显不应该显示匹配的哈希,它也会显示匹配的哈希。如果您可以访问 iOS 7 测试版,请尝试在那里运行并再次比较哈希值。日志中可能还有更多信息可以提供帮助。

    在某些情况下存在哈希不正确的问题,我自己正在处理此类问题,但我无法确定模型中的哪些功能可能会触发此错误。

    如果您能够找出触发此问题的原因,请回帖并提交错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多