[iOS] ใช้ฐานข้อมูล Core Data ด้วย Swift

นี่อาจจะเป็น post แรกเรื่องเกี่ยวกับ iOS native บอกตรงๆเลยว่า ผมเป็น Android Developer ที่ไม่ชอบ iOS แต่ถึงกระนั้นเราก็ต้องทำต่อไปอยู่ดี มองในแง่ดีเราก็จะได้รับมุมมองที่แตกต่างบ้างล่ะนะ

SQLite เป็นรูปแบบฐานข้อมูลที่นิยมสูง แม้ว่าปัจจุบัน application ส่วนใหญ่จะ online ใช้ฐานข้อมูลจาก server แต่เราก็ต้องทำเพื่อพิสูจน์ว่า "มันทำได้"

Core Data ชื่อที่ xcode ตั้งไว้สำหรับการใช้งาน SQLite ซึ่งต้องยอมรับว่าจุดนี้เค้าแข็งกว่า Android พอสมควร เราจะมาเริ่มจาก Design กันก่อน

1. File -> New -> File... เลือก Data Model

2. ทำการออกแบบ ซึ่ง Xcode มีหน้าจอสวยงามให้ใช้งาน (ไม่อธิบายแล้วกันเนอะ)

3. Editor -> Create NSManagedObject Subclass หรือจะเลือก New ที่ภาพแรกก็ได้ เสร็จแล้วก็สร้างออกมาให้เป็น *.swift file 




ไฟล์ที่เกี่ยวข้องทั้งหมดของ Core Data ครับ



สังเกตว่า หลังจากเราออกแบบฐานข้อมูลเพื่อรองรับการใช้งานเป็นที่เรียบร้อยแล้ว เราต้องสร้างไฟล์ class บางอย่างเพื่อเชื่อมต่อไปยังฐานข้อมูลนั้นๆด้วย ลักษณะนี้คือการทำงานของ Object-relational Mapping เพื่อเชื่อมโยงฐานข้อมูลกับ class นั่นเอง

เมื่อฐานข้อมูลพร้อมแล้ว เราก็เริ่ม coding กัน

การ insert
let newItem = NSEntityDescription.insertNewObjectForEntityForName(ENTITY_NAME, inManagedObjectContext: self.managedObjectContext!) as! Persons
newItem.name = "Lord Gift"
newItem.nickname = "😎"

การ delete
managedObjectContext?.deleteObject(fetchResult)

การ retrieve
let fetchRequest = NSFetchRequest(entityName: ENTITY_NAME)
        
if let fetchResults = (try? managedObjectContext!.executeFetchRequest(fetchRequest)) as? [Persons] {
   var texts = ""
   for fetchResult in fetchResults {
       texts = texts + fetchResult.nickname!
   }
   textView.text = texts
}


อย่าลืม commit มิฉะนั้น Data จะไม่เปลี่ยนจริงๆ นะแจ๊ะ
managedObjectContext?.save()



ref:
https://blog.revivalx.com/2015/06/23/swift-ios-tutorial-core-data-add-update-delete/

Facebook Comment

Recent Posts

Popular post of 7 days

Portal คืออะไรกันนะ???

วิธีการสมัคร Apple Developer Program และ Enterprise Program ฉบับลงมือเอง

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

Popular

[Java] Java 8 DateTime ใหม่ ไฉไลกว่าเดิม

Portal คืออะไรกันนะ???

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

เรื่องของ ++i กับ i++

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

[Java] Java Static Variable และ Static Method

Push Notification คืออะไร มีวิธีทำอย่างไร (No Code)

พิมพ์ซองจากรายชื่อ excel ด้วยวิธี Mail Merge

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)