项目loginCoreData0116
viewcontroller ,登录 数据搜索
//
// ViewController.swift
// loginCoreData0116
//
// Created by Mac on 1/16/19.
// Copyright © 2019 wjb. All rights reserved.
//
import UIKit
//引入coredata
import CoreData
class ViewController: UIViewController {
//初始化数据数组,接收登录账号数据的搜索结果
var user_array : [Users] = []
@IBOutlet weak var username_input: UITextField!
@IBOutlet weak var userpwd_input: UITextField!
@IBAction func login_button(_ sender: UIButton) {
//检测账号是否存在:1,账号不存在,显示账号不存在;2,账号存在,跳转到列表页
//建立类的代理
let appDelegate = UIApplication.shared.delegate as! AppDelegate
//建立数据存储对象
let user_context = appDelegate.persistentContainer.viewContext
//检测输入框内必须有内容
if username_input.text != "" && userpwd_input.text != "" {//两个输入框内容不为空为真
//创建提取
let user_date_fetchRequest = NSFetchRequest<Users>(entityName: "Users")
//设置提取条件,按照用户名搜索,以下实现了单个条件
user_date_fetchRequest.predicate = NSPredicate(format: "user_name = %@", username_input.text!)
//暂时不知道如何设置多个条件
do{
//提取数据,赋值给数组
user_array = try user_context.fetch(user_date_fetchRequest)
//检测对象是否存在
if user_array.count > 0 {//数组数据大于0为真
//跳转到列表页,绑定对应链接即可跳转
performSegue(withIdentifier: "main_to_third_link", sender: self)
}else{
//提示用户名不存在
msg_show_lable.text = "用户名不存在"
}
}catch{
}
}else{
//提示数据不能为空
msg_show_lable.text = "请输入数据"
}
}
@IBOutlet weak var msg_show_lable: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
}
secondReginViewController 注册,数据保存
//
// secondReginViewController.swift
// loginCoreData0116
//
// Created by Mac on 1/16/19.
// Copyright © 2019 wjb. All rights reserved.
//
import UIKit
//引入coredata
import CoreData
class secondReginViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBOutlet weak var username_input: UITextField!
@IBOutlet weak var userpwd_input: UITextField!
@IBAction func regin_button(_ sender: UIButton) {
//保存注册信息
//创建代理
let appDelegate = UIApplication.shared.delegate as! AppDelegate
//创建容器
let user_date_context = appDelegate.persistentContainer.viewContext
//创建数据对象实例化
let user_date = Users(context: user_date_context)
//检测数据
if username_input.text != "" && userpwd_input.text != "" {//数据不为空
//创建数据内容
user_date.user_name = username_input.text
user_date.user_pwd = userpwd_input.text
do{
//容器的数据执行保存
try user_date_context.save()
//绑定跳转链接
performSegue(withIdentifier: "second_to_third_link", sender: self)
} catch {
//提示错误信息
msg_show_lable.text = "注册失败"
}
}else{
//提示错误信息
msg_show_lable.text = "数据不能为空"
}
}
@IBOutlet weak var msg_show_lable: UILabel!
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}
thirdListViewController 列表 数据显示,数据删除,表格更新
//
// thirdListViewController.swift
// loginCoreData0116
//
// Created by Mac on 1/16/19.
// Copyright © 2019 wjb. All rights reserved.
//
import UIKit
//引入coredata
import CoreData
//继承类增加UITableViewDelegate,UITableViewDataSource
class thirdListViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
@IBOutlet weak var show_table_view: UITableView!
@IBOutlet weak var msg_label: UILabel!
//创建空数组变量保存提取的数据
var user_date_array : [Users] = []
override func viewDidLoad() {
super.viewDidLoad()
//表格和view链接,实现了在视图中的绑定操作
show_table_view.delegate = self
show_table_view.dataSource = self
//提取数据
//创建AppDelegate文件的 本类代理,coredate的操作方法在这个文件里,建立本类的代理后就可以使用了
let appDelegate_as = UIApplication.shared.delegate as! AppDelegate
//创建持久容器,存放从coredata中获取的数据,在这里操作数据
let context_show = appDelegate_as.persistentContainer.viewContext
//创建提取申请变量
let user_fetchRequest = NSFetchRequest<Users>(entityName: "Users")
//do方法执行提取
do {
//提取数据,保存到数组
user_date_array = try context_show.fetch(user_fetchRequest)
for userone in user_date_array {
print(userone.user_name! + "---" + userone.user_pwd!)
}
/*
//清空数据中的可能存在的nil,目前不知道为什么会出现nil数据
for (index_u,user) in user_date_array.enumerated() {
if user.user_name == nil {
user_date_array.remove(at: index_u)
}
}
*/
} catch {
//提取失败
msg_label.text = "数据获取失败"
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//返回数组的个数
return user_date_array.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "Cell")
cell.textLabel?.text = "name:\(user_date_array[indexPath.row].user_name!),pwd:\(user_date_array[indexPath.row].user_pwd!)"
return cell
}
//设置删除动作
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
//检测是否是删除动作
if editingStyle == UITableViewCell.EditingStyle.delete {
//删除数据库中的对应数据
//创建AppDelegate文件的 本类代理,coredate的操作方法在这个文件里,建立本类的代理后就可以使用了
let appDelegate_as = UIApplication.shared.delegate as! AppDelegate
//创建持久容器,存放从coredata中获取的数据,在这里操作数据
let context_delete = appDelegate_as.persistentContainer.viewContext
//执行删除
context_delete.delete(user_date_array[indexPath.row])
//保存数据
do{
try context_delete.save()
}catch{
//删除失败
msg_label.text = "删除失败"
}
//重新获取数据
//创建提取申请变量
let user_fetchRequest = NSFetchRequest<Users>(entityName: "Users")
//do方法执行提取
do {
//提取数据,保存到数组
user_date_array = try context_delete.fetch(user_fetchRequest)
} catch {
//提取失败
msg_label.text = "数据获取失败"
}
//表格重载
show_table_view.reloadData()
}
}
}
/*
//创建AppDelegate文件的 本类代理,coredate的操作方法在这个文件里,建立本类的代理后就可以使用了
let appDelegate_as = UIApplication.shared.delegate as! AppDelegate
//创建持久容器,存放从coredata中获取的数据,在这里操作数据
let context_delete = appDelegate_as.persistentContainer.viewContext
可以在类中创建,这样多个方法可以使用,不用重复创建
手机模拟器中的coredata 数据会影响测试,可以换一个型号模拟
表格中的数据操作后一定要重新获取数据后再重载,不然会报错
还是不知道多个条件如何搜索
*/