当你不需要文件迁移的时候,也就是说 你就建一个的时候 只会有 绿色对号上面的一个,PushNoticationModel这个名字也可以和"PushNoticationModel.sqlite" 前缀不一样 比如说 ass.sqlite,一样可以运行的,不和一些网上人流传的一样必须保持一致。 但是你如果要进行数据迁移,升级 这个时候 你就需要保持一致了,我就是因为这个错误 一直没有迁移成功。
迁移的步骤 可以根据网上的进行操作
1.选择上你的xcdatamodel文件 Design -> Data Model -> Add Model Version 然后默认操作就可以了 那么就可以生成图片上的绿色箭头了。
2.然后系统会自动帮你将它设置成 当前版本。测试 数据迁移成功与否,你可以来回切换 下面的版本。步骤是 选择上级最上面的 xcdatamodeld ,在inspector中的Versioned Core Data Model选择你要的版本。
3. 对属性 进行添加 等轻量级 操作:选中绿色箭头,然后操作coredata。如果以前有旧的coredata 生成的entity类 删掉,,然后在绿色箭头的基础上重新生成。目的就是保持最新的属性和实体就好了。
4. 然后选择最上面的PushNoticationModel 右键 new file 选择coredate 然后 选择mapping model 就可以了
剩下他默认操作。这些步骤 你都可以根据网上的其它文章进行操作
5. 然后修改代码,
-(NSPersistentStoreCoordinator *)persistentStoreCoordinator:(NSString*)modelName
{
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
//得到数据库的路径
NSString *docs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//CoreData是建立在SQLite之上的,数据库名称需与Xcdatamodel文件同名 @"PushNoticationModel.sqlite"
NSURL *storeUrl = [NSURL fileURLWithPath:[docs stringByAppendingPathComponent:modelName]];
NSError *error = nil;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:[self getmanagedObjectModel:self.managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
NSLog(@"persistentStoreCoordinator Error: %@,%@",error,[error userInfo]);
}
return persistentStoreCoordinator;
} 主要是option 这个即使你不需要版本迁移 写上去也不会错
网上的人解释不清的,也就是我迷惑的地方是:
-(NSManagedObjectModel *)getmanagedObjectModel:(NSManagedObjectModel *)managedobjectModel
{
if (managedobjectModel != nil) {
return managedobjectModel;
}
// managedobjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"PushNoticationModel" withExtension:@"momd"];
managedobjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return managedobjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"PushNoticationModel"withExtension:@"momd"];
到底用PushNoticationModel 还是用PushNoticationModel2? 答案是PushNoticationModel 和下面的生成数字没关系,这就是为什么苹果默认生成 2的时候前面有个空格的原因 PushNoticationModel 2,而我开始以为需要带2,所以修改了名字去掉了空格。
剩下要注意的地方是"PushNoticationModel.sqlite" 也不要带2.
我直做了添加属性 至于其它操作 或许你还要修改代码
- 大小: 16.5 KB
分享到:
相关推荐
本资源为本人文章 “iOS CoreData数据迁移” 操作底板,可以下载下来参照博客进行学习数据迁移
包含了CoreData得基本用法,版本迁移
CoreData 数据存储
通过一段具体的代码演示了CoreData如何验证输入数据是否满足要求
CoreData数据存储demo
coreData数据方法.rar此文件可以直接运行,里面包括怎么建立模型,怎么写入数据以及取出数据
使用NSFetchedResultsController,uitableView 显示Core Data数据,不需要reload data,类表数据自动更新
此模块处理将存储在 iOS 的 CoreData 中的键值数据迁移到 localStorage 以供 Cordova 使用。 它目前不处理 CoreData 中存在的任何关系或花哨的功能,只处理字符串键和 JSON 值。 Coredata 将其数据存储在 sqlite ...
这是封装后的方法 连类名都不用写 导入调用函数名即可进行文件下载 数据请求 以及Coredata的使用
coredata是iOS系统提供用于对象化管理数据并且持久化的框架,较于FMDB,coredata的优势:第一是CoreData作为苹果提供的原生框架,在内存方法比SQLite有性能上的优势。第二是CoreData操作数据不需要使用SQLite代码,...
数据迁移器到与核心数据兼容的 Sqlite 它不是什么? 核心数据版本更新器 核心数据替换 核心数据包装器 用法 命令行 下载 distribution.zip 文件夹并解压 从终端浏览到提取的文件夹 运行./sqlite2coredata
CoreData简单使用dome,CoreData简单使用dome,CoreData简单使用dome
coreData数据库操作!~有需要的盆友可以看一下
示例演示CoreData如何实现添加、删除、查询功能
使用CoreData实现对表的编辑,增删改查功能。使用起来比数据库方便。
如何使用CoreData实现增删改查,存储数据方便
CoreData的添加删除,和分页查询,模拟查询聊天记录,加载数据时数据添加在上面且页面显示当前位置
iOS研发中数据缓存coreData的使用
swift_persistence.zip
本demo是数据持久化的一种CoreData,对CoreData进行了封装,实现了增删改查