[iOS Dev] Core Data [Part I]

**ควรจะเป็นผู้ที่มีความรู้พื้นฐานเกี่ยวกับฐานข้อมูลมาบ้าง 
    และมีความรู้เรื่อง iOS Dev พอสมควร ถึงจะอ่านรู้เรื่องนะครับ

ใน Blog นี้ผมคงรายละเอียดทีละบรรทัดไม่ได้นะครับ...
เพราะว่า ก็ไม่ได้เข้าใจ Code ในทุกบรรทัดเหมือนกัน... แค่พอบอกได้ว่า เรากำลังทำอะไรอยู่...

ปกติแล้วการใช้ฐานข้อมูลใน iOS Dev เนี่ย...
จะมีฐานข้อมูลยอดนิยมนั่นก็คือ ตระกูล SQL แต่ในมือถือทั้ง Android และ iPhone จะใช้ SQLite ครับ

SQLite เป็นฐานข้อมูลดิบ ๆ ใน iOS ซึ่งเราควรจะมีพื้นฐานไว้นิดหน่อย 
แต่ที่จะมาเขียน Blog วันนี้คือ Core Data ครับ

Core Data คืออะไร ??

Core Data เป็นระบบจัดการข้อมูลแบบหนึ่งบน iOS ครับ... ซึ่งเบื้องหลังจริง ๆ แล้วมันก็คือ SQLite นั่นแหละ..  แต่มันมาช่วยเราตรงที่ เราไม่จำเป็นต้องเขียน คำสั่ง SQL ด้วยตัวเอง...  เพราะ
Core Data จะใช้แนวคิด ORM (Object-Relationa-Mapping) เข้ามาช่วย... ทำให้เราทำงานกับฐานข้อมูลเหมือนกับการทำงานกับ Object ตัวหนึ่ง 
Core Data จะเปรียบได้กับ Objective-C ห่อ SQLite ไว้อีกทีก็ได้...

**ซึ่งในส่วนนี้เราจะพูดกันถึง Core Data เบื้องต้นเท่านั้น ยังไม่มีความสัมพันธ์ใด ๆ เกิดขึ้นบนฐานข้อมูล

โครงสร้างของ Core Data จะแบ่งออกเป็น 4 ส่วน 
ทำงานเป็นลักษณะของ Stack คล้ายกับแนวคิด MVC (Model-View-Controller)


จะเห็นได้ว่า Programmer อย่างเรา ๆ เนี่ย จะอยู่ด้านบนสุดซึ่งทำงานกับ ManagedObjectContext เท่านั้น
คือหลังจากเมื่อกรา Set up สิ่งที่เรียกว่า Core Data Stack ได้แล้วนั้น... 
เราจะทำงานกับฐานข้อมูล เหมือนกับทำงานกับ Object ชิ้นนึง...

มาเริ่มกันเลยดีกว่า... 

นำเข้า Framework CoreData.framework 
เข้ามาใน Project ด้วยนะครับ ^^~


  
สร้างข้อมูลที่ต้องการจะเก็บ
ในที่นี้จะเอาโค้ดจาก Program ของบาสเอง มาเป็นตัวอย่างนะครับ...
ซึ่งในที่นี้ บาสทำเกมส์ขึ้นมาเกมส์นึง ซึ่งข้อมูลที่จะเก็บคือ คะแนน และ วันที่ที่เราเล่น นะครับ
ซึ่งฐานข้อมูลนั้น เราจะสร้างสิ่งที่เรียกว่า Data Model มาเก็บข้อมูลครับ


เมื่อเราสร้างแล้วก็จะได้หน้าตาแบบนี้ครับ 
โดยบาสมี Entity ที่ชื่อว่า ScoreData ซึ่งมีข้อมูล 2 ตัวคือ Score และ Date 
มีชนิด Integer 32bit และ Date ตามลำดับครับ


จากนั้นก็จะสร้างไฟล์ที่จะทำงานร่วมกับ Data Model ตัวนี้
ซึ่งการสร้างไฟล์นั้น ให้เราคลิกขวาที่ไฟล์ Data Model ของเรา เลือก New File จะพบการสร้างที่เพิ่มมา

เมื่อเราสร้างแล้วก็ได้ไฟล์ Header (.h) และ Implementation (.m) ขึ้นมา 
เราก็สามารถเขียนฟังก์ชั่นที่จะทำงานร่วมกับข้อมูลที่อยู่ภายใต้ Data Model เพิ่มไปได้ตามสะดวก



- Set up Core Data Stack 
  อย่างที่บอกว่า ทั้งโปรแกรมเราจะต้องทำงานกับ ManagedObjectContext ฉะนั้นเริ่มด้วยการ 
  Import Library เข้ามาใน File --> projectName_Prefix.pch ซะก่อน


ในโปรแกรมของบาสนั้นในส่วนของ Core Data นั้นใช้ 2 View นั่นคือ
View ที่ใช้ในการเล่นเกมส์ ซึ่งเมื่อเล่นเกมส์เสร็จแล้วเนี่ย เราก็จะบันทึกข้อมูลลงฐานข้อมูล

View ที่ใช้ในการแสดงคะแนนทั้งหมด... โดยนำค่าจากฐานข้อมูลมาแสดง

ซึ่งฐานข้อมูลมีแค่หนึ่งเดียว แต่เราใช้ทั้ง 2 View ฉะนั้นเราจะสร้าง Core Data Stack 
ใน AppDelegate เพื่อให้มันเป็น Global และเมื่ออยากใช้ที่ View ไหน ก็อ้างอิงมาใช้ใน View นั้น ๆ 


ขั้นแรกเราก็ทำการประกาศทั้ง 3 ตัวนี้และฟังก์ชั่นที่ใช้ในการ save ข้อมูลซะก่อน


จากนั้นก็ทำการเขียนฟังก์ชั่นที่เอาไว้ Save ข้อมูล และฟังก์ชั่นอ้างถึง Document Folder ของโปรแกรมเรา
เพราะการที่เราจะเขียน File อะไรลงไปในโปรแกรมโดยให้มันไม่หายนั้น ต้องเขียนลง Document เท่านั้น

จากนั้นก็เขียน Core Data Stack ตามนี้เลยครับ... 


และแน่นอนว่า เมื่อสร้างวัตถุขึ้นมา ก็ควรปล่อยวัตถุนั้นจากระบบเวลาไม่ใช้แล้วใน dealloc method ด้วย

ต่อไปจะเป็นการเรียกใช้แล้วนะ...
ขอไปต่อ Blog หน้าแล้วกันครับ... รูปเริ่มเยอะ... เวลาเขียนมันกระตุก ๆ (เครื่องไม่แรง 555)

Popular posts from this blog

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

5 TED Talk ที่จะช่วยให้คุณทำงานดีขึ้น