我正在尝试迁移大约11Mb的iPhone/iPad sqlite商店.它有大约30个不同的实体,都非常相互关联.
在3GS上,需要相当长的时间.即使轻量级迁移也需要大约四分钟.
我想这是因为所有关系都保存在内存中.
阅读Apple迁移指南,它说对于大型数据集,一种方法是使用不同的映射模型进行多次传递.
一切都很好.但是,如果一个映射模型中的实体与另一个映射模型中的实体相关,则似乎无法执行此操作.实际上,编译错误是在Mapping Model xcmappingmodel文件中的"无法使用nil映射名称自动生成值表达式"的行中生成的.
任何提示非常感谢.
非常感谢,
马克斯
我已经阅读了所有可能的博客和关于这个主题的SO帖子 - 但仍然不确定发生了什么.我也读过这个但仍然没有运气 - 他们的默认迁移指南有点清楚但在我的情况下不起作用.我对iOS开发比较陌生,所以要温柔:)
情况如下:在我的应用程序(iOS)中名为Report的实体上,需要进行以下更改:
数据属性 - 已删除
title属性 - 已添加
reportId属性需要从Integer 16更改为String.这就是造成我问题的原因.我确实从当前版本创建了我的数据模型的新版本并修改了属性.
首先,这里是应用程序的一些方法:
- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel != nil)
{
return __managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"App" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return __managedObjectModel;
}
Run Code Online (Sandbox Code Playgroud)
然后
/**
Returns the persistent store coordinator for the application.
If the coordinator doesn't already exist, it is created and the application's store added to it.
*/
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator …Run Code Online (Sandbox Code Playgroud) 我的旧核心数据模型有一个NSDate字段,我想将其更改为NSNumber.我在SO和其他博客上阅读了Apple文档和几个类似的问题(请参阅问题末尾的参考资料)
但无论我做什么,我都会遇到同样的错误:
因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因是:'映射和源/目标模型之间不匹配'
我只有2个版本的模型,我已经一次又一次地验证了源模型和目标模型是正确的.
我甚至放弃了所有更改并重新创建了一个新模型,映射和实体(NSManagedObject子类).我现在已经坚持了近2天,并且不知道我在做什么.关于我做错的任何指示都将不胜感激.
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Old.sqlite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSString *sourceStoreType = NSSQLiteStoreType;
NSURL *sourceStoreURL = storeURL;
NSURL *destinationStoreURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"New.sqlite"];
NSString *destinationStoreType = NSSQLiteStoreType;
NSDictionary *destinationStoreOptions = nil;
NSDictionary *sourceMetadata =
[NSPersistentStoreCoordinator metadataForPersistentStoreOfType:sourceStoreType
URL:sourceStoreURL
error:&error];
if (sourceMetadata == nil) {
NSLog(@"source metadata is nil");
}
NSManagedObjectModel *destinationModel …Run Code Online (Sandbox Code Playgroud) 嗨我要在appstore中更新我的iOS应用程序,此更新包含数据库更改,现在如何通过删除应用程序更新中现有版本的旧数据库来迁移现有核心数据?我已经提到了核心数据迁移教程
不幸的是没有用.任何帮助都提前感谢
该应用程序使用bundle目录中的静态sqlite(初始数据)作为Coredata的持久存储.sqlite有7个表,其中一个表通过添加额外的列/字段进行修改.如何让coreData了解持久存储(存储)已更改并且需要采用新更新?对于sqlite有什么样的版本概念,就像我们为coredata做的那样吗?