- 创建项目的时候勾选上
- 勾选后会自动生成数据库文件
- 点击后再点击"加号"添加实体(entity)
- 实体(entity)的属性与要创建的类的属性要一致
- 左侧Person首字母要大写,否则报错.
- 右侧属性名要小写否则报错,这可能是xcode区分 "类" 与 "属性" 的机制
- Attributes属性对应的类型勾选上
- 下面Relationship关系中,第一个 sex 代表Person中有sex属性,Relationship第二个参数Sex (注意大写的),代表sex属性所属与Sex类,第三个"inverse"代表的是Sex类中含有Person类型的属性
- Sex的entity中也一样
- 第三步创建与数据库相关联的类文件
- 点击后
- 勾选,next
- 这一步一定要全选,点击next后生成八个文件
- 暂时不要动这几个文件
- 下面写代码:
- 在Appdelegate中可以发现生成了好多方法,这里是固定写法不用太在意,在这里解释一下主要的几个对象的作用
//_managedObjectContext这是管理数据库中所有实体的上下文,也就是通过他可以查找数据库中的数据
@synthesize managedObjectContext = _managedObjectContext;
//对象模型,根据对象模型来存储数据
@synthesize managedObjectModel = _managedObjectModel;
//持久化数据存储调度器,也就是通过它可以把数据存到数据库中
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
- 就做了一个简单的界面
输入所有的数据后点击保存可以把数据存储到数据库
当输入查询的内容为空的时候,点击查询会列出所有数据库的内容
当输入查询内容后,点击删除,会删掉所有,包含输入的内容的字母的对象
当输入查询内容后,点击修改,会修改掉所有,包含输入的内容的字母的对象,修改的内容统一设置了一下.可以根据自己需要做出修改.
看控制器代码:可以做一些略微的封装.大概看一下
第一个功能增加数据: 根据输入的内容保存到数据库
/** 保存 增加数据 */
- (IBAction)saveClick:(id)sender {
//获取AppDelegate中的被管理所有对象的上下文managedObjectContext
AppDelegate * delegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext * context = delegate.managedObjectContext;
//创建对象,来分别保存输入的内容
Person * per = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];
//获取输入的各项内容
per.name = self.name.text;
per.age = self.age.text;
per.phone = self.phone.text;
//创建sex对象,把sex对象赋值给Perosn中的sex属性,同时保存sex
Sex * sex = [NSEntityDescription insertNewObjectForEntityForName:@"Sex" inManagedObjectContext:context];
sex.sex = self.sex.text;
per.sex = sex;
//保存数据
NSLog(@"保存");
[delegate saveContext];
}
- 第二个功能:查询数据
/** 查询 */
- (IBAction)search:(id)sender {
NSString * searchContent = self.searchTxt.text;
NSPredicate * pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",searchContent];
/**
1.谓词查询内容
2.如果输入要查询的内容长度为0,则显示保存的所有的数据
*/
if (searchContent.length == 0) {
pre = nil;
}
AppDelegate * delegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext * context = delegate.managedObjectContext;
NSEntityDescription * des = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
NSFetchRequest * request = [NSFetchRequest new];
request.entity = des;
request.predicate = pre;
/** 获取查询到的内容---是数组 */
NSArray * array = [context executeFetchRequest:request error:NULL];
//遍历查询到的数据,并打印
for (Person * p in array) {
NSLog(@" %@ : %@ : %@ : %@",p.name,p.age,p.sex.sex,p.phone);
}
}
- 第三个功能: 删除
/** 删除 */
- (IBAction)delete:(id)sender {
/**
1.查询到要删除的内容
2.获取输入的内容
*/
NSString * deleteContent = self.searchTxt.text;
/** 查询要删除带有输入的关键字的对象 */
NSPredicate * pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",deleteContent];
AppDelegate * delegate = [[UIApplication sharedApplication] delegate];
/** 被管理对象上下文--(获取所有被管理对象的实体) */
NSManagedObjectContext * context = delegate.managedObjectContext;
/** 根据上下文获取查询数据库实体的请求参数---要查询的entity(实体) */
NSEntityDescription * des = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
/** 查询请求 */
NSFetchRequest * request = [NSFetchRequest new];
/** 根据参数获取查询内容 */
request.entity = des;
request.predicate = pre;
/**
1.获取所有被管理对象的实体---根据查询请求取出实体内容
2.获取的查询内容是数组
3.删掉所有查询到的内容
3.1.这里是模糊查询 即 删除包含要查询内容的字母的内容
*/
NSArray * array = [context executeFetchRequest:request error:NULL];
/** 对查询的内容进行操作 */
for (Person * p in array) {
[context deleteObject:p];
}
NSLog(@"删除完成");
[delegate saveContext];
}
- 第四个功能:修改
/** 修改 */
- (IBAction)update:(id)sender {
/** 获取输入内容 */
NSString * updateContent = self.searchTxt.text;
NSPredicate * pre = [NSPredicate predicateWithFormat:@"name CONTAINS %@",updateContent];
AppDelegate * delegate = [UIApplication sharedApplication].delegate;
NSManagedObjectContext * context = delegate.managedObjectContext;
NSEntityDescription * des = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
NSFetchRequest * request = [NSFetchRequest new];
request.entity = des;
request.predicate = pre;
NSArray * array = [context executeFetchRequest:request error:NULL];
//这里修改的话把全部查询到的内容修改成了 "张三",可以根据自己的需要进行设置
for (Person *p in array) {
p.name = @"张三";
[context updatedObjects];
}
NSLog(@"修改完成");
[delegate saveContext];
}
谓词使用小结:
简单的增删改查完成,感兴趣的可以做一下tableView的cell,对cell的数据进行增删改查,设置代理,实时监听数据库数据的变化,来实时刷新tableView即可