coreData初步认识
根据这片文档可以自己初步建立一个coreData,进行简单的数据的增、删、改、查。
1、新建工程,记得勾选Use Core Data
如果新建工程的时候忘记勾选Use Core Data,也可以自行添加,快捷键command+N,选择iOS ->Core Data -> Data Model
2、建立好以后可以看到HelloCoreData.xcdatamodeld,在这里可以添加实体和实体的属性。需要注意的是:实体名字必须以大写字母开头。
3、然后新建一个file,iOS -> Core Data -> NSManagedObject cubclass
4、点击Next进入下一步,勾选自己建立的工程(默认是勾选的)
5、点击Next,勾选自己创建的实体(默认是勾选的)
6、点击Next以后我们就可以看到建立好的实体是有4个文件。这里需要注意的是,xcode7以后建立的都是4个,而7以前的是两个
7、下面是代码实现一个简单的增、删、查、改,在ViewController.m文件里配置如下:
#import "ViewController.h"
#import "AppDelegate.h"
#import
#import "Person.h"
@interface ViewController ()
{
AppDelegate *app;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
app = [UIApplication sharedApplication].delegate;
[self createButtons];
}
- (void)createButtons
{
NSArray *array = @[@"增",@"删",@"改",@"查"];
for (int i = 0; i < array.count; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(30+i*60, 100, 40, 40);
[btn setTitle:array[i] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
btn.tag = i;
[self.view addSubview:btn];
}
}
- (void)buttonClick:(UIButton *)sender
{
switch (sender.tag) {
case 0:
//增
[self coreDataAdd];
break;
case 1:
//删
[self coreDataDelete];
break;
case 2:
//改
[self coreDataUpdate];
break;
case 3:
//查
[self coreDataSelect];
break;
default:
break;
}
}
8、增 、查、删、改
增(添加数据,name、age、sex)
- (void)coreDataAdd
{
Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:app.managedObjectContext];
person.name = [NSString stringWithFormat:@"小屁孩%d",arc4random()%10];
person.sex = @"女";
person.age = [NSString stringWithFormat:@"%d",arc4random()%100];
[app.managedObjectContext save:nil];
}
****
查(按条件查找)
- (void)coreDataSelect
{
//读取这个类,根据key查找
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:app.managedObjectContext];
//建立请求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
//建立请求的是哪一个类
[request setEntity:entity];
//遍历所有的Person,获取所有的Person信息,存储在数组里面
NSArray *array = [app.managedObjectContext executeFetchRequest:request error:nil];
for (Person *person in array) {
NSLog(@"%@--%@--%@",person.name,person.sex,person.age);
}
}
增加后进行查找:
2016-08-15 17:52:55.881 HelloCoreData[4166:240913] 小屁孩2--女--51
2016-08-15 17:52:55.882 HelloCoreData[4166:240913] 小屁孩8--女--89
2016-08-15 17:52:55.882 HelloCoreData[4166:240913] 小屁孩8--女--34
2016-08-15 17:52:55.882 HelloCoreData[4166:240913] 小屁孩3--女--3
2016-08-15 17:52:55.882 HelloCoreData[4166:240913] 小屁孩9--女--99
2016-08-15 17:52:55.882 HelloCoreData[4166:240913] 小屁孩8--女--41
2016-08-15 17:52:55.882 HelloCoreData[4166:240913] 小屁孩0--女--33
2016-08-15 17:52:55.883 HelloCoreData[4166:240913] 小屁孩7--女--1
删(根据条件进行删除,这里我们根据“姓名”查找删除)
- (void)coreDataDelete
{
//读取这个类
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:app.managedObjectContext];
//建立请求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
//建立请求的是哪一个类
[request setEntity:entity];
//设置检索条件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",@"小屁孩8"];
[request setPredicate:predicate];
//遍历所有的Person,获取所有的Person信息,存储在数组里面
NSArray *array = [app.managedObjectContext executeFetchRequest:request error:nil];
if (array.count > 0) {
for (Person *person in array) {
//删除
[app.managedObjectContext deleteObject:person];
}
//保存结果
[app.managedObjectContext save:nil];
NSLog(@"删除完成");
}else{
NSLog(@"没有检索到数据");
}
}
删除后进行查找
2016-08-15 17:54:25.188 HelloCoreData[4187:242212] 删除完成
2016-08-15 17:54:27.597 HelloCoreData[4187:242212] 小屁孩2--女--51
2016-08-15 17:54:27.597 HelloCoreData[4187:242212] 小屁孩3--女--3
2016-08-15 17:54:27.597 HelloCoreData[4187:242212] 小屁孩9--女--99
2016-08-15 17:54:27.597 HelloCoreData[4187:242212] 小屁孩0--女--33
2016-08-15 17:54:27.597 HelloCoreData[4187:242212] 小屁孩7--女--1
改(按条件进行修改,这里根据“性别”进行修改)
- (void)coreDataUpdate
{
//读取这个类
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:app.managedObjectContext];
//建立请求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
//建立请求的是哪一个类
[request setEntity:entity];
//设置检索条件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name != %@",@"小屁孩2"];
[request setPredicate:predicate];
//遍历所有的Person,获取所有的Person信息,存储在数组里面
NSArray *array = [app.managedObjectContext executeFetchRequest:request error:nil];
if (array.count > 0) {
for (Person *person in array) {
if ([person.sex isEqualToString:@"女"]) {
person.name = @"hello";
}
}
//保存结果
[app.managedObjectContext save:nil];
NSLog(@"修改完成");
}else{
NSLog(@"没有检索到数据");
}
}
修改后进行查找
2016-08-15 17:55:25.742 HelloCoreData[4203:242946] 修改完成
2016-08-15 17:55:27.885 HelloCoreData[4203:242946] 小屁孩2--女--51
2016-08-15 17:55:27.886 HelloCoreData[4203:242946] hello--女--3
2016-08-15 17:55:27.886 HelloCoreData[4203:242946] hello--女--99
2016-08-15 17:55:27.886 HelloCoreData[4203:242946] hello--女--33
2016-08-15 17:55:27.886 HelloCoreData[4203:242946] hello--女--1