Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.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 NSStoreModelVersionHash解决核心数据迁移中的错误_Ios_Iphone_Objective C_Core Data - Fatal编程技术网

Ios NSStoreModelVersionHash解决核心数据迁移中的错误

Ios NSStoreModelVersionHash解决核心数据迁移中的错误,ios,iphone,objective-c,core-data,Ios,Iphone,Objective C,Core Data,目前,我对核心数据的轻量级迁移存在问题。在深入研究之后,我发现模型中的一个实体上的NSStoreModelVersionHash存在问题。这实际上发生在我向核心数据模型添加模型版本之前,我通过重新创建模型来验证这一点 我使用以下两种方法以编程方式获得模型的版本哈希值: NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL

目前,我对核心数据的轻量级迁移存在问题。在深入研究之后,我发现模型中的一个实体上的NSStoreModelVersionHash存在问题。这实际上发生在我向核心数据模型添加模型版本之前,我通过重新创建模型来验证这一点

我使用以下两种方法以编程方式获得模型的版本哈希值:

NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:[NSURL fileURLWithPath:storePath] error:&error]; NSDictionary *hashesFromMetadata = [sourceMetadata objectForKey:@"NSStoreModelVersionHashes"]; NSDictionary*sourceMetadata=[NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:[NSURL fileURLWithPath:storePath]错误:&错误]; NSDictionary*hashesFromMetadata=[sourceMetadata objectForKey:@“NSStoreModelVersionHashes”]; 及

NSMutableArray*文件路径=[[NSMutableArray alloc]init]; NSString*directoryPath=[bundle-pathForResource:modelName of type:@“momd”]; NSDirectoryEnumerator*枚举器=[[NSFileManager defaultManager]枚举器路径:directoryPath]; NSString*文件路径; 而((文件路径=[enumerator nextObject])!=nil){ 如果([[filePath pathExtension]isEqualToString:@“mom”]){ [filePath addObject:[directoryPath stringByAppendingPathComponent:filePath]]; } } /*Model.momd目录只包含一个“mom”文件:Model.mom“*/ NSURL*momURL=[NSURL fileURLWithPath:[filePaths objectAtIndex:0]]; NSManagedObjectModel*模型=[[NSManagedObjectModel alloc]initWithContentsOfURL:momURL]; NSDictionary*hashesFromModel=[model entityVersionHashesByName]; 令我惊讶的是,我发现我有两个不同的散列值。请注意,我还没有添加任何模型版本,也没有修改模型。请参阅下面EntityB的散列值

hashesFromMetadata: { EntityA = "8fc59055 bd81d862 198a4cf8 160ab711 84191bd4 2340eb4b 1ceeb19b 4643f7d6"; EntityB = "bf73667d 19a25289 cd013e23 fc4524ce fb1095f9 6ad13aec f978ae1a 321388ed"; EntityC = "4a55d875 fdb54969 c56d7add 201cb2c3 e244a5f1 b4950a74 55af1372 fa4f79b8"; EntityD = "60fe2d8c e0061e78 c43f10aa 58cf1b5e 4cbb52a3 351ac83f 144ade9d 8687b22b"; EntityE = "75c68768 31ef472b 567df030 36f99100 f52aa84e 7c8e2e81 1d070f07 cfd922be"; EntityF = "53823f0a 94745434 d9076b5c c8f8b153 b74a2f9c 06f15576 e5878527 d1309d4f"; } hashesFromModel: { EntityA = "8fc59055 bd81d862 198a4cf8 160ab711 84191bd4 2340eb4b 1ceeb19b 4643f7d6"; EntityB = "c671f2ef 52eb91b1 73e4e9f2 92b70eed 9b09da23 ef66c016 4d684047 9d7b1efe"; EntityC = "4a55d875 fdb54969 c56d7add 201cb2c3 e244a5f1 b4950a74 55af1372 fa4f79b8"; EntityD = "60fe2d8c e0061e78 c43f10aa 58cf1b5e 4cbb52a3 351ac83f 144ade9d 8687b22b"; EntityE = "75c68768 31ef472b 567df030 36f99100 f52aa84e 7c8e2e81 1d070f07 cfd922be"; EntityF = "53823f0a 94745434 d9076b5c c8f8b153 b74a2f9c 06f15576 e5878527 d1309d4f"; } hashesFromMetadata:{ EntityA=“8fc59055 bd81d862 198a4cf8 160ab711 84191bd4 2340eb4b 1ceeb19b 4643f7d6”; EntityB=“bf73667d 19a25289 cd013e23 fc4524ce fb1095f9 6ad13aec f978ae1a 321388ed”; EntityC=“4a55d875 fdb54969 C56D7添加201cb2c3 e244a5f1 b4950a74 55af1372 fa4f79b8”; EntityD=“60fe2d8c e0061e78 c43f10aa 58cf1b5e 4cbb52a3 351ac83f 144ade9d 8687b22b”; EntityE=“75c68768 31ef472b 567df030 36f99100 f52aa84e 7c8e2e81 1d070f07 cfd922be”; EntityF=“53823f0a 94745434 d9076b5c c8f8b153 b74a2f9c 06f15576 e5878527 d1309d4f”; } hashesFromModel:{ EntityA=“8fc59055 bd81d862 198a4cf8 160ab711 84191bd4 2340eb4b 1ceeb19b 4643f7d6”; EntityB=“c671f2ef 52eb91b1 73e4e9f2 92b70eed 9b09da23 ef66c016 4d684047 9D7B1FE”; EntityC=“4a55d875 fdb54969 C56D7添加201cb2c3 e244a5f1 b4950a74 55af1372 fa4f79b8”; EntityD=“60fe2d8c e0061e78 c43f10aa 58cf1b5e 4cbb52a3 351ac83f 144ade9d 8687b22b”; EntityE=“75c68768 31ef472b 567df030 36f99100 f52aa84e 7c8e2e81 1d070f07 cfd922be”; EntityF=“53823f0a 94745434 d9076b5c c8f8b153 b74a2f9c 06f15576 e5878527 d1309d4f”; } 我还检查了VersionInfo.plist文件的内容,发现散列值与hashesFromModel中的值相同

显然,这种差异总是会导致核心数据迁移失败,并出现错误:“找不到源存储的模型”

以前有人遇到过这个问题吗?知道如何在这种情况下执行轻量级迁移吗?非常感谢您的输入/反馈

非常感谢

hashesFromMetadata: { EntityA = "8fc59055 bd81d862 198a4cf8 160ab711 84191bd4 2340eb4b 1ceeb19b 4643f7d6"; EntityB = "bf73667d 19a25289 cd013e23 fc4524ce fb1095f9 6ad13aec f978ae1a 321388ed"; EntityC = "4a55d875 fdb54969 c56d7add 201cb2c3 e244a5f1 b4950a74 55af1372 fa4f79b8"; EntityD = "60fe2d8c e0061e78 c43f10aa 58cf1b5e 4cbb52a3 351ac83f 144ade9d 8687b22b"; EntityE = "75c68768 31ef472b 567df030 36f99100 f52aa84e 7c8e2e81 1d070f07 cfd922be"; EntityF = "53823f0a 94745434 d9076b5c c8f8b153 b74a2f9c 06f15576 e5878527 d1309d4f"; } hashesFromModel: { EntityA = "8fc59055 bd81d862 198a4cf8 160ab711 84191bd4 2340eb4b 1ceeb19b 4643f7d6"; EntityB = "c671f2ef 52eb91b1 73e4e9f2 92b70eed 9b09da23 ef66c016 4d684047 9d7b1efe"; EntityC = "4a55d875 fdb54969 c56d7add 201cb2c3 e244a5f1 b4950a74 55af1372 fa4f79b8"; EntityD = "60fe2d8c e0061e78 c43f10aa 58cf1b5e 4cbb52a3 351ac83f 144ade9d 8687b22b"; EntityE = "75c68768 31ef472b 567df030 36f99100 f52aa84e 7c8e2e81 1d070f07 cfd922be"; EntityF = "53823f0a 94745434 d9076b5c c8f8b153 b74a2f9c 06f15576 e5878527 d1309d4f"; }