2

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

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

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

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

 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
4

2 回答 2

2

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

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

在将我的头撞到墙上一整天之后,这里的说明突出显示了修复:https ://blog.vucica.net/2013/04/core-data-migrating-ignores-manual-mapping-model-or-fails -migration-尽管映射模型-existence.html

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

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

于 2019-04-01T01:20:09.710 回答
1

直接指定映射模型的 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 测试版,请尝试在那里运行并再次比较哈希值。日志中可能还有更多信息可以提供帮助。

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

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

于 2013-07-07T02:27:29.853 回答