swift3.0 coreData的使用-日记本demo
来源:互联网 发布:arcgis裁剪栅格数据 编辑:程序博客网 时间:2024/06/13 23:32
效果
需求分析
基于官方MasterDetail模板,官方写了很多复杂的coredata逻辑,在此基础上快速开发简单的日记本程序。
- 主要功能:增、删、改、查- 界面用默认的界面,将detail页面改为`UITextView`可编辑- 主页面进行 增、删、查操作- 子页面进行 删、改、查操作
需求很简单,官方模板还添加了按时间排序的操作
创建工程
选择 M-D模式
使用swift和coredata
添加数据库
官方给数据库添加了一个时间戳字段,我们再添加一个内容字段就可以了
改写Detail页面
改成textview,读取数据库中的noteDetail
内容字段
需要增加保存和删除操作
由于设置了detailItem:Event
这个全局变量是由上一级传递过来的,我们就可以对这行内容直接进行操作
//当前entity var detailItem: Event? { didSet { // Update the view. self.configureView() } }
//删除 @IBAction func deleteNote(_ sender: Any) { print("deleted") let context = self.detailItem?.managedObjectContext context?.delete(self.detailItem!) //保存到数据库 self.saveData(context: context!) _ = self.navigationController?.popViewController(animated: true) }
//保存数据 func saveObject() { print("saved") let newEvent = self.detailItem let context = self.detailItem?.managedObjectContext newEvent?.noteDetail = self.detailTextView.text newEvent?.timestamp = NSDate() //保存到数据库 self.saveData(context: context!) //返回 _ = self.navigationController?.popViewController(animated: true) }
//保存数据 func saveData(context:NSManagedObjectContext) { do { try context.save() } catch { let nserror = error as NSError fatalError("Unresolved error \(nserror), \(nserror.userInfo)") } }
在navBarRight上增加一个按钮用于保存
override func viewDidLoad() { super.viewDidLoad() //增加保存按钮 let saveBtn = UIBarButtonItem(barButtonSystemItem: .save, target: self, action: #selector(saveObject)) self.navigationItem.rightBarButtonItem = saveBtn self.title = "写点什么吧..." self.configureView() }
//配置界面 显示日志内容 func configureView() { if let detail = self.detailItem { if let textView = self.detailTextView { textView.text = detail.noteDetail!.description } } }
改写Master页面
- 更改cell展示内容- 点击cell的页面- 更改新增日志按钮的方法- 新增刷新tableview
- 更改cell展示内容
cell没有太多要更改的 只是显示样式更改下就行
//配置cell内容 func configureCell(_ cell: UITableViewCell, withEvent event: Event) { cell.textLabel!.text = event.noteDetail?.description cell.detailTextLabel!.text = event.timestamp!.description }
- 点击cell的页面
由于默认的M-D页面模式 点击cell是直接指向D页面,我们把他删掉,写到tableview的didSelectRowAt
方法中,使用navigationController
并传递当前查询出来的数据对象
我这里是使用stroyboard ID来获取视窗
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { //点击cell push let object = self.fetchedResultsController.object(at: indexPath) let story = UIStoryboard(name: "Main", bundle: Bundle.main) let controller = story.instantiateViewController(withIdentifier: "detail") as! DetailViewController controller.detailItem = object self.navigationController?.pushViewController(controller, animated: true) }
- 更改新增日志按钮的方法
默认模式是点击新增直接tableview多一行数据,我们这里的需求则是进入新增的编辑页面。
我们给新增按钮的方法更改一下,push到新页面就可以了
//插入新记事本 func insertNewObject(_ sender: Any) { //初始化 插入时间戳 和 空数据 let context = self.fetchedResultsController.managedObjectContext let newEvent = Event(context: context) newEvent.timestamp = NSDate() newEvent.noteDetail = "" //保存 do { try context.save() } catch { let nserror = error as NSError fatalError("Unresolved error \(nserror), \(nserror.userInfo)") } //push let story = UIStoryboard(name: "Main", bundle: Bundle.main) let controller = story.instantiateViewController(withIdentifier: "detail") as! DetailViewController controller.detailItem = newEvent self.navigationController?.pushViewController(controller, animated: true) }
- 新增刷新tableview
由于返回机制是由navigationController
来控制的,我们需要在D页面返回时刷新一下tableview,重读数据库,让新数据能展现出来
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //返回时刷新数据 self.tableView.reloadData() }
Demo地址
https://github.com/gongxiaokai/SimpleNote
0 0
- swift3.0 coreData的使用-日记本demo
- swift3.0 coredata 的使用
- swift3.0 使用coredata
- MG--Swift3.0简单使用CoreData
- CoreData使用sqlite数据库的demo
- Swift3.0 CoreData Fetch语法的一些改变
- Swift3.0 popToViewController 的使用
- Swift3.0 popToViewController 的使用
- swift3.0:sqlite3的使用
- Swift3.0 GCD定时器的使用,实现倒计时,UIDatePicker的使用, 仿写一个活动倒计时的DEMO
- 分享一个基于Swift3.0的ios入门学习Demo
- Swift3.0中Category的使用
- Swift3.0转场动画的使用
- swift3.0 中NSNotification 的使用
- Swift3.0按钮的基本使用
- Swift3.0 Date日期的使用
- Swift3.0中GCD定时器的使用
- Swift3.0 MBProgressHUD的封装使用
- 进一步理解指针2:双指针、指针数组和数组指针
- android bluetooth——蓝牙的开启、搜索、配对与连接
- #649 – KeyStates 属性包含了 IsDown 和IsToggled的内容(KeyStates Property Combines IsDown and IsToggled)
- angular......ngRepeat嵌套
- 入门训练 圆的面积
- swift3.0 coreData的使用-日记本demo
- C++中函数调用时的三种参数传递方式
- Windows远程连接Ubuntu (远程桌面和XDMCP)
- Android - BlueTooth BLE 之 Central 与 Peripheral 理解
- 51nod 1140 矩阵相乘结果的判断
- 关键字static/const的作用
- 机器学习之Validation(验证,模型选择)
- Objective-C 自定义UISlider滑杆 分段样式
- 推荐:iOS开发最佳实践总结