gpt4 book ai didi

iPhone核心数据轻量级迁移Cocoa错误134130 : Can't find model for source store

转载 作者:行者123 更新时间:2023-12-03 18:22:43 26 4
gpt4 key购买 nike

各位,

轻量级迁移对我来说 100% 都失败了:

[persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]

错误:

Error: Error Domain=NSCocoaErrorDomain Code=134130 UserInfo=0x4fbff20 "Operation could not be completed. (Cocoa error 134130.)"
"Can't find model for source store";

这是我的托管对象上下文、模型和持久存储:

- (NSManagedObjectContext *) managedObjectContext {

if (managedObjectContext != nil) {
return managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return managedObjectContext;
}

- (NSManagedObjectModel *)managedObjectModel {

if (managedObjectModel != nil) {
return managedObjectModel;
}

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}

NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"Locations.sqlite"]];

NSError *error;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];

// Allow inferred migration from the original version of the application.
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
NSLog(@"Error: %@",error);
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}

return persistentStoreCoordinator;
}

我的项目中有两个版本的模型:版本 4 和版本 5。如果我将版本 4 设置为默认值,则它可以正常工作。如果我选择“设计 -> 数据模型 -> 添加模型版本”(如 this post 所述),进行更改,设计 -> 数据模型 -> 设置当前版本,构建并运行,它将失败并显示上述“找不到源商店的模型”错误。将模型设置回版本 4,没有问题,addPersistentStoreWithType。或者,如果我添加模型版本并且不进行任何更改,只需从版本 4 转到版本 5,而不添加任何新字段,没有问题。如果我随后尝试从 5 转到 6,则会出现上述错误。

此代码在模拟器和手机上均失败。我读到了一些要求删除并重新安装该应用程序的处方,该应用程序对模拟器和手机都有效,但我担心当我将其发布给真实用户时,它会破坏我的安装基础,因为他们将无法删除和重新安装- App Store 将自动升级它们。

此代码在过去的版本中工作,我没有进行任何更改 - 因此我有能力将其一直升级到版本 4。我最近升级到 iOS4 的 XCode 3.2.3 构建,这可能与此有关。

有没有人像我一样突然遇到这个问题?有人设法克服它吗?谢谢。

PS - 对于偶然发现此页面的 Google 员工,下面是您可能会考虑阅读的所有相关页面。不幸的是,这些都没有解决我的问题。

更新

虽然这不是真正的修复,但它确实避免了客户端崩溃的情况:只需删除数据库文件即可:

if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {



// Delete file
if ([[NSFileManager defaultManager] fileExistsAtPath:storeUrl.path]) {
if (![[NSFileManager defaultManager] removeItemAtPath:storeUrl.path error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}

if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error])
{
// Handle the error.
NSLog(@"Error: %@",error);
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();

}
}

更新2

以下是我检查 VersionInfo.plist 时发生的情况:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSManagedObjectModel_CurrentVersionName</key>
<string>Profile 5</string>
<key>NSManagedObjectModel_VersionHashes</key>
<dict>
<key>Profile</key>
<dict>
<key>Profile</key>
<data>
ZIICGgMBreuldkPXgXUhJwKamgwJzESM5FRTOUskomw=
</data>
</dict>
<key>Profile 2</key>
<dict>
<key>Profile</key>
<data>
tEB7HrETWOSUuoeDonJKLXzsxixv8ALHOoASQDUIZMA=
</data>
</dict>
<key>Profile 3</key>
<dict>
<key>Profile</key>
<data>
qyXOJyKkfQ8hdt9gcdFs7SxKmZ1JYrsXvKbtFQTTna8=
</data>
</dict>
<key>Profile 4</key>
<dict>
<key>Profile</key>
<data>
lyWDJJ0kGcs/pUOModd3Q1ymDvdRiNXui4NCpLxDFSw=
</data>
</dict>
<key>Profile 5</key>
<dict>
<key>Profile</key>
<data>
V4PyRK1ezj3xK1QFRCTVzGOqyJhEb7FRMzglrTsP0cI=
</data>
</dict>
</dict>
</dict>
</plist>

这是我编写的用于检查模型的代码(请注意,我必须出去添加一个 Base64 编码器,因为这就是 VersionInfo.plist 文件中的内容)

if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {


NSDictionary *storeMeta = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:nil URL:storeUrl error:&error];
NSLog(@"%@",storeMeta);
id someObj = [[storeMeta objectForKey:@"NSStoreModelVersionHashes"] objectForKey:@"Profile"];
NSLog(@"%@",someObj);
NSLog(@"%@",[NSString base64StringFromData:someObj length:[someObj length]]);

这是调试输出:

{
NSPersistenceFrameworkVersion = 310;
NSStoreModelVersionHashes = {
Profile = <97258324 9d2419cb 3fa5438c a1d77743 5ca60ef7 5188d5ee 8b8342a4 bc43152c>;
SerializedMessage = <4530863c d943479a edfb4dfb 5059c28d d6137dc4 d1153d36 ed52be49 11074f13>;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
);
NSStoreType = SQLite;
NSStoreUUID = "823FD306-696F-4A0F-8311-2792825DC66E";
"_NSAutoVacuumLevel" = 2;
}

<97258324 9d2419cb 3fa5438c a1d77743 5ca60ef7 5188d5ee 8b8342a4 bc43152c>
lyWDJJ0kGcs/pUOModd3Q1ymDvdRiNXui4NCpLxDFSw=

如您所见,以“ly”开头的最后一行与 VersionInfo.plist 中的配置文件 4 匹配...因此我认为它没有理由失败。还有其他想法吗?

最佳答案

I read several prescriptions calling for deleting and reinstalling the app, which does work for both Simulator and Phone, but I am afraid that when I release this to real users it will break my installed base since they won't be able to delete and reinstall.

这是由于当模型文件发生更改时 Xcode 没有从模拟器/开发设备中删除旧的 momc 文件而导致的问题。更改名称。旧文件仍然存在,这会导致困惑。这是您只能在开发过程中看到的东西,因为它是 Xcode 操作应用程序包的方式的产物,而无需每次都完全重新安装它,而发布版本必须发生这种情况。

您可以确认此日志记录的返回:

[[NSBundle mainBundle] URLsForResourcesWithExtension:@"momc"subdirectory:nil];

...它应该显示应用程序包中所有已编译的模型文件

在开发过程中依赖迁移是一种不好的做法,因为如果您对模型和存储进行更改,迁移失败是很常见的。您应该只在确定所有代码后才使用迁移。我还建议您每次运行时都从头开始重新生成您的商店。通过改变模型很容易在商店里堆积垃圾。

关于iPhone核心数据轻量级迁移Cocoa错误134130 : Can't find model for source store,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3146515/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com