gpt4 book ai didi

iphone - Core Data轻量级迁移问题

转载 作者:行者123 更新时间:2023-12-03 19:01:22 25 4
gpt4 key购买 nike

我的应用程序当前位于应用程序商店中,我正在使用向数据模型添加的单个属性来更新它。我添加了一个模型版本并将其设置为当前版本。

一切正常,但当我测试在包含数据的旧版本上安装应用程序的新版本时,应用程序无法加载且没有错误消息。它将继续失败(只是在屏幕上短暂闪烁),直到我重新启动设备,或通过 XCode 或 iTunes 再次安装更新的应用程序,然后应用程序运行正常并且数据已正确迁移。

我担心,如果客户发生这种情况,他们会在重新安装之前删除该应用程序并丢失所有数据。有人有任何见解吗?感谢任何帮助

谢谢,我在应用程序委托(delegate)中使用以下代码进行数据迁移:

- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"DataStore" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"DataStore.sqlite"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:storePath]) {
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"DataStore" ofType:@"sqlite"];
if (defaultStorePath) {
[fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
}
}
NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],
NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES],
NSInferMappingModelAutomaticallyOption, nil];
NSError *error;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
return persistentStoreCoordinator;
}

最佳答案

您确定没有对模型的先前版本进行任何更改吗?此行为听起来像是 Core Data 找不到您在设备上拥有的持久存储的模型。

当您启动包含旧版本持久存储的应用程序时,您应该能够在控制台日志中看到任何核心数据错误。

您是在什么时候添加新属性的?如果您在创建新版本之前添加它,则旧版本和新版本都将具有该属性。检查您的旧模型并确保新属性不存在。

关于iphone - Core Data轻量级迁移问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4402776/

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