核心数据迁移错误Cocoa 错误134130 找不到源存储的模型
Core data migration error Cocoa error 134130 Can't find model for source store
我的应用已在应用商店上线。我对核心数据模型进行了更新。我在 Apple dev 网站上关注了 core data light migration。
- 在Xcode
中添加模型的新版本
- 更改新模型版本
- Select模型使用新版本的选项(新模型版本有绿色勾选)
- 将 sqlite 文件添加到持久存储时添加选项
代码如下:
NSString *momdPath = [[NSBundle mainBundle] pathForResource:@"PropertiesModel" ofType:@"momd"];
model = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:momdPath]];
// model = [NSManagedObjectModel mergedModelFromBundles:nil];
psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
NSString *path = [self itemArchivePath];
NSURL *storeURL = [NSURL fileURLWithPath:path];
NSError *error = nil;
NSDictionary *options = @{ NSMigratePersistentStoresAutomaticallyOption : @(YES),
NSInferMappingModelAutomaticallyOption : @(YES),
NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}};
if (![psc addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:options
error:&error]) {
CLS_LOG(@"store URL: %@ \n options: %@ \n error: %@",storeURL,options,error);
[NSException raise:@"Open failed" format:@"Reason: %@, Full Error: %@", [error localizedDescription],error];
}
// Create the managed object context
context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:psc];
我将 运行 保存在这个错误中,它无法找到我的原始(旧版本)模型。奇怪的是,当我在开发过程中测试它时,它起作用了。我发布到应用商店,现在它在我所有用户的设备上崩溃了。
Error Domain=NSCocoaErrorDomain Code=134130 "The operation couldn’t be completed. (Cocoa error 134130.)" UserInfo=0x170671dc0 {URL=file:///var/mobile/Containers/Data/Application/68165624-8866-4722-8472-F371A1202A83/Documents/DIYLandLord.data, metadata={
NSPersistenceFrameworkVersion = 519;
NSStoreModelVersionHashes = {
Contractor = <6e29455a 13768a19 a9a4a2da 1d8d492e b3cc023d bc06cb0d 298b56e1 b44fba9f>;
Expense = <847aa2e8 da0a2730 4b0a70a2 2051ed2c 09ece5c4 e1a39c10 a42f0aa2 d5b79ad4>;
InAppPurchase = <51dc7a31 415ba244 9c175d8f e14f6948 7ebec6a3 463d2995 3ad0b60b 8bd06f7d>;
Owner = <2eaaaa38 ff6c4d19 6bb2621b 91a2c61a 9f5e564e 4703c68c 880f8ab4 4e1d2408>;
Payment = <e92d19bd 82637935 88cf8493 e0c73ddc d1ba245e 0d1e49e4 8c6bc876 e9a97372>;
Property = <456365b5 9f1b3cda 92f663ef 5f8b90a1 4dc5842b 20f58a7c 4521f182 f733e99f>;
Tenant = <f3a92b85 dace78cb ae9cba8f 73419929 6932ca12 4ff97ebf 8e2d7689 da9c242b>;
Unit = <922b8c16 930cd7b7 05259da0 79ace226 bd379991 955bfc4a 755a72ef 1e5dac4c>;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
""
);
NSStoreType = SQLite;
NSStoreUUID = "27CE8843-4E80-4F4A-A728-559465D687F8";
"_NSAutoVacuumLevel" = 2;
}, reason=Can't find model for source store}
我试图恢复到应用商店中最后一个稳定版本的代码库,但我也遇到了核心数据错误 "the model is not compatible with the store" 或类似的问题。
这让我抓狂。有人可以解释一下这个问题吗?
编辑:
我的应用程序可以将核心数据文件备份到保管箱。它备份 sqlite 文件以及 -shm 和 -wal 文件。如果我删除我的应用程序并在应用程序商店下载当前版本,从 dropbox 恢复 3 个文件,转到任何使用核心数据的屏幕,它会崩溃。
有没有一种简单的方法可以从 sqlite 导出数据并使用新模型将其导入核心数据?
我能够通过检查过去的提交方式获得正确的旧数据模型并解决问题。谢谢大家
我的应用已在应用商店上线。我对核心数据模型进行了更新。我在 Apple dev 网站上关注了 core data light migration。
- 在Xcode 中添加模型的新版本
- 更改新模型版本
- Select模型使用新版本的选项(新模型版本有绿色勾选)
- 将 sqlite 文件添加到持久存储时添加选项
代码如下:
NSString *momdPath = [[NSBundle mainBundle] pathForResource:@"PropertiesModel" ofType:@"momd"];
model = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:momdPath]];
// model = [NSManagedObjectModel mergedModelFromBundles:nil];
psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
NSString *path = [self itemArchivePath];
NSURL *storeURL = [NSURL fileURLWithPath:path];
NSError *error = nil;
NSDictionary *options = @{ NSMigratePersistentStoresAutomaticallyOption : @(YES),
NSInferMappingModelAutomaticallyOption : @(YES),
NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}};
if (![psc addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:options
error:&error]) {
CLS_LOG(@"store URL: %@ \n options: %@ \n error: %@",storeURL,options,error);
[NSException raise:@"Open failed" format:@"Reason: %@, Full Error: %@", [error localizedDescription],error];
}
// Create the managed object context
context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:psc];
我将 运行 保存在这个错误中,它无法找到我的原始(旧版本)模型。奇怪的是,当我在开发过程中测试它时,它起作用了。我发布到应用商店,现在它在我所有用户的设备上崩溃了。
Error Domain=NSCocoaErrorDomain Code=134130 "The operation couldn’t be completed. (Cocoa error 134130.)" UserInfo=0x170671dc0 {URL=file:///var/mobile/Containers/Data/Application/68165624-8866-4722-8472-F371A1202A83/Documents/DIYLandLord.data, metadata={
NSPersistenceFrameworkVersion = 519;
NSStoreModelVersionHashes = {
Contractor = <6e29455a 13768a19 a9a4a2da 1d8d492e b3cc023d bc06cb0d 298b56e1 b44fba9f>;
Expense = <847aa2e8 da0a2730 4b0a70a2 2051ed2c 09ece5c4 e1a39c10 a42f0aa2 d5b79ad4>;
InAppPurchase = <51dc7a31 415ba244 9c175d8f e14f6948 7ebec6a3 463d2995 3ad0b60b 8bd06f7d>;
Owner = <2eaaaa38 ff6c4d19 6bb2621b 91a2c61a 9f5e564e 4703c68c 880f8ab4 4e1d2408>;
Payment = <e92d19bd 82637935 88cf8493 e0c73ddc d1ba245e 0d1e49e4 8c6bc876 e9a97372>;
Property = <456365b5 9f1b3cda 92f663ef 5f8b90a1 4dc5842b 20f58a7c 4521f182 f733e99f>;
Tenant = <f3a92b85 dace78cb ae9cba8f 73419929 6932ca12 4ff97ebf 8e2d7689 da9c242b>;
Unit = <922b8c16 930cd7b7 05259da0 79ace226 bd379991 955bfc4a 755a72ef 1e5dac4c>;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
""
);
NSStoreType = SQLite;
NSStoreUUID = "27CE8843-4E80-4F4A-A728-559465D687F8";
"_NSAutoVacuumLevel" = 2;
}, reason=Can't find model for source store}
我试图恢复到应用商店中最后一个稳定版本的代码库,但我也遇到了核心数据错误 "the model is not compatible with the store" 或类似的问题。
这让我抓狂。有人可以解释一下这个问题吗?
编辑: 我的应用程序可以将核心数据文件备份到保管箱。它备份 sqlite 文件以及 -shm 和 -wal 文件。如果我删除我的应用程序并在应用程序商店下载当前版本,从 dropbox 恢复 3 个文件,转到任何使用核心数据的屏幕,它会崩溃。
有没有一种简单的方法可以从 sqlite 导出数据并使用新模型将其导入核心数据?
我能够通过检查过去的提交方式获得正确的旧数据模型并解决问题。谢谢大家