1.导航栏里面的按钮,左侧或者右侧的,点击之后,弹出一个页面,可以在storyBoard里面show出来,也可以在代码里面创建控制器对象,presentation出来
Snip20161026_7.png
2.[alert addAction:<#(nonnull UIAlertAction *)#>];
此处需要添加的是对象,因此需要创建出来一个UIAlertAction对象
[alert addAction:[UIAlertAction actionWithTitle:@"保存" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
//获取上下文
NSManagedObjectContext *moc = self.appDelegate.persistentContainer.viewContext;
//创建实体对象
Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:moc];
//设置属性值
person.name = alert.textFields[0].text;
person.age = alert.textFields[1].text.intValue;
NSLog(@"%@ %d",person.name,person.age);
//保存到数据库
[self.appDelegate saveContext];
}]];
3.建立数据模型(CoreDate)的步骤:
(1)建立实体
(2)添加属性
(3)使用菜单创建NSManageObject的子类
Snip20161026_9.png
4.UIAlertController弹窗
在view上面添加文本框,既可以直接拖控件,也可以直接使用方法
[alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
textField.placeholder = @"请输入姓名";
}];
给文本框设置值,可以通过textField
获取值可以通过textFields属性
person.name = alert.textFields[0].text;
5.CoreDate中,添加新的实体对象,使用insert方法
实体模型相当于我们常见的类,实体描述相当于创建出来的UI系那个
insertNewObjectForEntityForName:@"Person" inManagedObjectContext:moc]
6.查询数据
要查询数据需要使用查询结果控制器
//查询个人记录的请求
NSFetchRequest *request = [Person fetchRequest];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];
NSManagedObjectContext *moc = self.appDelegate.persistentContainer.viewContext;
//实例化查询结果控制器
_fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:moc sectionNameKeyPath:nil cacheName:nil];
//开始查询
[_fetchedResultsController performFetch:NULL];
_fetchedResultsController.delegate = self;
7.通过代理监听数据的变化有什么好处
其他地方数据的增删改只需要负责对数据的额操作,而不要关心界面的UI处理
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller{
[self.tableView reloadData];
}
8.对象图
Snip20161026_13.png
非常方便做数据表结构的变化