coreData详解
来源:互联网 发布:淘宝名忘了怎么找回 编辑:程序博客网 时间:2024/06/07 04:09
大家好,此次是讲解的coreData这一块,其实平时一直用Sqlite3,所以很少接触啦,当然此次将依托最新的xcode6来讲解的。
现在,我们新建一个工程的时候,就可以勾选use coreData,请睁大眼睛好好找找选项在哪里。
如果我们勾选了coredata,我们的文件中出现了一个xcdatamodeld的文件。
点击这个文件吧,看到下面的图片
当然,我已经建立了Entities,那这个Entity是什么呢,我们接下来详细的讲解下各个属性。
我一开始也对于coreData心生畏惧,因为其中的概念实在太多了,我其实也很不明白Apple的做法。
首先4个概念,请搞清楚:
NSManagedObjectModel :这个是用来获取就是上面那个xcdatamodeld文件的
NSPersistentStoreCoordinator:这个是什么,我叫他仓库管理,这个我们无须打交道,只要初始化就行了。
NSPersistentStore:这个是仓库,什么是仓库,就是我们在本地存的数据库,懂了吧
NSManagedObjectContext:这个是最最关键的,我们的增删改查,全和他打交道。
本来是有张图的,可是我找不到了,真是很抱歉,我说说他们之间的关系吧
首先我们肯定要获取NSManagedObjectModel,这个就是我们上面的图,他可以获取我们设置的具体信息。
NSManagedObjectModel * model = [NSManagedObjectModel mergedModelFromBundles:nil];
设置nil说明了我们去取mainBundle因为可能由于引入了很多第三方的库,本身也存在一些bundle文件,直接设置nil,可以让我们直接去去mainbundle。
NSPersistentStoreCoordinator * psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; NSString * docs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString * filePath = [docs stringByAppendingPathComponent:@"splite.data"]; NSError * error = nil; NSPersistentStore * store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:filePath] options:nil error:&error]; if (store == nil) { NSLog(@"创建仓库关联失败!"); }
当我们创建仓库管理,我们首先要把仓库和我们xcdatamodel文件建立起来,这时候NSPersistentStoreCoordinator,首先要依托一个model初始化,就是我们从mainbundle读取到的model文件。那么仓库是什么,就是我们在沙盒中,建立的数据库。
然后,我们把仓库管理设置到context就可以,这样,以后我们直接使用context进行操作。有没有注意一点,就是我们添加仓库的时候,仓库的类型代表了存储的格式数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型,我们这里一般选用的是SQL,就是我们最熟悉的数据库操作。
- (void)add{ Device * device = [NSEntityDescription insertNewObjectForEntityForName:@"Device" inManagedObjectContext:mContext]; device.ip = @"1111"; device.push = @1; device.name = @"woshiname"; NSError * error = nil; [mContext save:&error];}- (void)query{ //NSFetchRequest * fetch = [NSFetchRequest fetchRequestWithEntityName:@"Device"]; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Device" inManagedObjectContext:mContext]; [fetchRequest setEntity:entity]; // Specify criteria for filtering which objects to fetch NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like %@", @"woshiname"]; [fetchRequest setPredicate:predicate]; // Specify how the fetched objects should be sorted NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"ip" ascending:YES]; [fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]]; NSError *error = nil; NSArray *fetchedObjects = [mContext executeFetchRequest:fetchRequest error:&error]; if (fetchedObjects == nil) { NSLog(@"获取失败"); } NSLog(@"%@",fetchedObjects);}- (void)delete{ [mContext deleteObject:nil]; NSError * error = nil; [mContext save:&error];}
有个小技巧,查询的时候fetch的时候,直接输入fecth,因为xcode6已经做了代码块的预定义,可能苹果也想到这段代码太过于复杂。
当然这些都是代码里面应该做的事情,那么我们在xcdatamodel文件里改怎么设置呢?
ENTITIES:这个就是我们常说的表名,也许这样更容易理解
ATTRIBUTES:这个就是表中的字段,我们可以设置字段名,和类型
RELEATIONSHIP:这个要特别讲一下,就是表关联,表关联是最关键的一个知识点,因为我们设置的表不可能单独存在,表之间的数据是相互关联的,建议看一下这篇文章,详细的介绍了一对一,一对多的关系,如何去进行多表之间的查询操作。
下一节,我讲把coredata一些零碎的知识讲解一下。
- coreData详解
- coredata 详解
- coredata 详解
- CoreData 框架详解
- IOS开发 - CoreData详解
- IOS---CoreData详解
- CoreData使用详解
- 转:ios coredata 教程 详解
- IOS-CoreData的使用详解
- CoreData
- CoreData
- CoreData
- CoreData
- CoreData
- CoreData
- CoreData
- CoreData
- CoreData
- POJ 3070 Fibonacci (矩阵快速幂 Fibonacci数列新求法)
- Activity之间数据交流(onActivityResult的用法)
- uva11518 Dominos 2
- zoj 2008 && poj 1511 Invitation Cards
- centos6.5+nginx1.7+php5.6+mysql5.6
- coreData详解
- 一般处理程序中使用Session
- Gentoo内核配置驱动篇
- NYOJ 237 游戏高手的烦恼 && POJ3041-Asteroids ( 二分图的最大匹配 )
- 目标导向的交互设计:About face 3 -- The essentials of interaction design 读书分享
- 201 - Squares
- 220 - Othello
- TypeScript函数
- 253 - Cube painting