【发布时间】:2014-10-06 07:07:31
【问题描述】:
我 忘记了 进行核心数据迁移
在提交我的应用程序的新版本之前。安装旧版本并更新到新版本后,应用程序在启动时每次都会崩溃。
删除新版本并重新安装应用程序时,一切正常。我们正在讨论 App Store 上的 prod 版本。
你能告诉我如何解决这个问题吗?
【问题讨论】:
标签: ios iphone xcode core-data app-store
我 忘记了 进行核心数据迁移
在提交我的应用程序的新版本之前。安装旧版本并更新到新版本后,应用程序在启动时每次都会崩溃。
删除新版本并重新安装应用程序时,一切正常。我们正在讨论 App Store 上的 prod 版本。
你能告诉我如何解决这个问题吗?
【问题讨论】:
标签: ios iphone xcode core-data app-store
您必须进行轻量级迁移:-
制作两个版本的Datamodel [安全]
类似这样的:-
+ (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if ([DBHelper sharedCoreDataInstance].objPersistentStoreCoordinator != nil) {
return [DBHelper sharedCoreDataInstance].objPersistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationLibraryDirectory] URLByAppendingPathComponent:@"yourdb.sqlite"];
NSError *error = nil;
NSDictionary *options = @{
NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES
};
[DBHelper sharedCoreDataInstance].objPersistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:[self managedObjectModel]];
if(![[DBHelper sharedCoreDataInstance].objPersistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:options
error:&error])
{
//Error for store creation should be handled in here
}
return [DBHelper sharedCoreDataInstance].objPersistentStoreCoordinator;
}
【讨论】:
您可以提交执行数据迁移的版本。
如果用户从 1.0 -> 1.2 更新,它应该可以工作。 如果用户已经更新到 1.1(确实崩溃了),应用程序无法更改数据,所以如果他们从 1.1 -> 1.2 更新应该没问题(但无论如何,如果我是对的,请尝试你自己)
最坏的情况: 我不知道你在core data里面有什么样的数据,但是如果它是可重构的,你可以把旧数据删掉,然后新建一个。
【讨论】: