Firebase+Swift — Update & Delete Data

Apo
Technologies For Everyone
2 min readApr 23, 2017

จากตอนที่แล้วที่เราได้ทำการ Upload & Downloads Data แล้วในส่วนของตอนนี้จะเป็นการสอนเกี่ยวกับการ Update & Delete Data เริ่มต้นจากการสร้าง ViewController มาเพิ่ม 1 Viewโดยตั้งชื่อ Storyboard ID = “Edit” และเพิ่ม Button TextField และ NavigationTab ตามรูปด้านล่าง

จากนั้นทำการ สร้าง EditViewController.swift ขึ้นมาอีก1ไฟล์พร้อมทั้ง Outlet และ Actions Items จาก View ที่สร้างในข้างต้น (**อย่าลืม import FirebaseDatabase)

  • สร้างตัวแปร Name และ Price มาเก็บค่าที่จะรับมาจาก SecondView และแสดงไว้ในTextField
  • เพิ่มคำสั่ง dismiss ลงในฟังก์ชันของปุ่ม Back เพื่อที่จะทำให้ย้อนกลับไปหน้า SecondViewได้

เพิ่มฟังก์ชัน didSelectRowAt ลงในไฟล์​ SecondViewController.swift โดยโค้ดข้างในฟังก์ชันทำหน้าที่ส่งข้อมูล Name และ ​Price ของ Row ที่เราเลือกไปยังEditView

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vc = self.storyboard?.instantiateViewController(withIdentifier: "Edit") as? EditViewController
vc?.Name = posts[indexPath.row].name
vc?.Price = posts[indexPath.row].price
self.present(vc!, animated: true, completion: nil)
}

แก้ไขในโค้ดในไฟล์ SecondViewController.swift โดยสร้างฟังก์ชัน viewDidAppear ขึ้นมาแล้วโค้ดนำทั้งหมดของฟังก์ชัน viewDidLoadไปใส่ไว้ในฟังก์ชัน viewDidAppear

เพิ่มโค้ดลงในฟังก์ชัน Edit_Btn โดยโค้ดข้างในฟังก์ชัน เป็นการ snapshot ข้อมูลจาก Firebase มาแล้วเช็คค่าที่รับมาจาก SecondView ว่าตรงกับอันไหน แล้วเลือกเก็บ childName ของค่านั้นออกมาเพื่อที่จะเป็นการหา Path ในการเข้าไปแก้ไขข้อมูล จากนั้นทำการนำข้อความที่อยู่ใน TextField เข้าไป Update Path นั้น สุดท้ายทำการ dismiss ให้กลับไปยัง SecondView

let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Posts").queryOrdered(byChild: "Name").observe(.childAdded, with:{
snaphot in
let snapshotValue_name = snaphot.value as! NSDictionary
let snapshotValue_Price = snaphot.value as! NSDictionary
let childName = snaphot.key
if (self.Name == snapshotValue_name["Name"] as? String)
{
let ref = FIRDatabase.database().reference()
ref.child("Posts").child(childName).child("Name").setValue(self.Name_txt.text)
if (self.Price == snapshotValue_Price["Price"] as? String)
{
let ref = FIRDatabase.database().reference()
ref.child("Posts").child(childName).child("Price").setValue(self.Price_txt.text)
}
}
})
dismiss(animated: true, completion: nil)

ในส่วนของฟังก์ชัน Delete_Btn ทำคล้ายๆกับ Edit_Btn คือการหา Path ของข้อมูลที่จะลบจากนั้นเข้าไปยัง Path นั้นเพื่อลบข้อมูลนั้น และทำการ dismiss กลับไปยัง SecondView

let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Posts").queryOrdered(byChild: "Name").observe(.childAdded, with:{
snaphot in
let snapshotValue_name = snaphot.value as! NSDictionary
let childName = snaphot.key
if (self.Name == snapshotValue_name["Name"] as? String)
{
let ref = FIRDatabase.database().reference()
ref.child("Posts").child(childName).removeValue()
}
})
dismiss(animated: true, completion: nil)
}

สามารถดาวน์โหลดโค้ดตัวอย่างได้จากlinkนี้ DownloadCode

--

--

Apo
Technologies For Everyone

GC#1 CKK || ENTANEER GEAR 45 CMU || CPE 23 CMU || #sir(61)(64)(61) ......