导入UIKit
导入CoreData
类ViewController:UIViewController {
let nameTxt: UITextField = {
let td = UITextField()
td.translatesAutoresizingMaskIntoConstraints = false
td.placeholder = "Enter Id"
td.borderStyle = .line
td.layer.borderWidth = 1
td.layer.borderColor = UIColor.lightGray.cgColor
return td
}()
let doneBt: UIButton = {
let bt = UIButton()
bt.translatesAutoresizingMaskIntoConstraints = false
bt.setTitle("DONE", for: .normal)
bt.setTitleColor(.white, for: .normal)
bt.addTarget(self, action: #selector(handleDoneBt), for: .touchUpInside)
bt.backgroundColor = UIColor.blue
return bt
}()
@objc func handleDoneBt() {
saveData()
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
setupView()
setupLayout()
}
func saveData() {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}
let manageContent = appDelegate.persistentContainer.viewContext
let userEntity = NSEntityDescription.entity(forEntityName: "Users", in: manageContent)!
let users = NSManagedObject(entity: userEntity, insertInto: manageContent)
users.setValue(1, forKeyPath: "id")
users.setValue(nameTxt.text, forKeyPath: "name")
users.setValue(123, forKeyPath: "mobile")
do{
try manageContent.save()
}catch let error as NSError {
print("could not save . \(error), \(error.userInfo)")
}
fetchData()
}
func fetchData() {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}
let manageContent = appDelegate.persistentContainer.viewContext
let fetchData = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
do {
let result = try manageContent.fetch(fetchData)
for data in result as! [NSManagedObject]{
print(data.value(forKeyPath: "id") as Any)
print(data.value(forKeyPath: "name") as Any)
}
}catch {
print("err")
}
}
func setupView() {
view.addSubview(nameTxt)
view.addSubview(doneBt)
}
func setupLayout(){
NSLayoutConstraint.activate([
nameTxt.centerXAnchor.constraint(equalTo: view.centerXAnchor),
nameTxt.centerYAnchor.constraint(equalTo: view.centerYAnchor),
nameTxt.widthAnchor.constraint(equalToConstant: 160),
nameTxt.heightAnchor.constraint(equalToConstant: 30),
doneBt.topAnchor.constraint(equalTo: nameTxt.bottomAnchor,constant: 6),
doneBt.leftAnchor.constraint(equalTo: nameTxt.leftAnchor,constant: 8),
doneBt.widthAnchor.constraint(equalToConstant: 120),
doneBt.heightAnchor.constraint(equalToConstant: 36)
])
}
}
在TableView中显示
func fetchData() {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}
let manageContent = appDelegate.persistentContainer.viewContext
let fetchData = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
do {
let result = try manageContent.fetch(fetchData)
allData = result as! [NSManagedObject]
tbl.reloadData()
}catch {
print("err")
}
}
var allData = [NSObject]()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return allData.count
}
在编程中,返回表格视图的行数时,可以使用此函数。该函数接受一个UITableView对象和一个整数类型的参数section作为输入,并返回一个整数类型的值,即allData数组的元素数量。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! tblCell
cell.lbl.text = allData[indexPath.row].value(forKey: "name") as? String
return cell
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
在UITableView中,返回UITableViewCell的编辑风格和索引路径。
if editingStyle == .delete {
let task = allData[indexPath.row]
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}
let manageContent = appDelegate.persistentContainer.viewContext
manageContent.delete(task as! NSManagedObject)
(UIApplication.shared.delegate as! AppDelegate).saveContext()
do {
try manageContent.save()
} catch {
print("Fetching Failed")
}
}
fetchData()
}