![](https://www.daydev.com/wp-content/uploads/2014/09/Screen-Shot-2557-09-14-at-7.07.09-PM.png)
การเขียนแอพพลิเคชันบน iPhone ด้วย Objective-C กับการเก็บข้อมูลลงไฟล์ข้อมูล Plist เช่นข้อมูลที่ต้องกรอกจากแอพฯ หรือข้อมูลที่ดาวน์โหลดมาเก็บไว้ในเครื่องก่อน
ก่อนจะเข้าสู่การพัฒนาแอพพลิเคชันบน iOS8 เราก็ยังคงมีบทความการพัฒนา Objective-C กับ iOS7 ประกอบกันไปซึ่งบทเรียนนี้มีคนถามหากันบ่อยมากคือการเก็บข้อมูลลงในไฟล์ Plist ของเครื่อง iPhone ของเราครับ
เราจำเป็นจะต้องรู้โครงสร้างระบบไฟล์ในแอพพลิเคชันของเราก่อนว่ามันถูกเรียกมาจากที่ไหน โดยเฉพาะตอนทดสอบนั้นจะต้องรู้ว่ามีไฟลของเราจะไปเก็บไว้ที่ Simulator ของ iPhone คือตำแหน่งอะไร ก่อนจะเริ่มโปรเจ็คนี้ให้เปิด Terminal ขึ้นมาก่อนครับ แล้วพิมพ์คำสั่งนี้ลงไปเพื่อ ให้อ่าน Folder ที่ถูก Hidden หรือถูกซ่อนไว้ก่อนได้
sudo chflags nohidden /Library/ ~/Library/
ต่อมาเปิด XCode ขึ้นมาครับ เลือก Single View Application เลยตั้งชื่อให้เรียบร้อย
![เปิด Xcode 6 ขึ้นมาครับ](https://www.daydev.com/wp-content/uploads/2014/09/Screen-Shot-2557-09-14-at-6.19.14-PM.png)
![เลือก single view application](https://www.daydev.com/wp-content/uploads/2014/09/Screen-Shot-2557-09-14-at-6.19.26-PM.png)
![ตั้งชื่อให้เรียบร้อย](https://www.daydev.com/wp-content/uploads/2014/09/Screen-Shot-2557-09-14-at-6.19.48-PM.png)
เปิดไฟล์ ViewController.m ขึ้นมาแล้วใส่คำสั่งต่อไปนี้ ในเมธอด ViewDidLoad();
เราต้องหา Path ของเครื่อง iPhone ของเราก่อน ผ่านคำสั่ง NSSearchPathForDirectoriesDomains เพราะแอพพลิเคชันของเราจะเก็บข้อมูลไว้ใน Folder เป็นรหัสที่เราไม่สามารถจำได้บ่อยๆ นักครับ
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0];
ทีนี้เราจะได้ Paths เก็บไฟล์แล้ว เราจะเอานามสกุลต่อท้ายไปเลย คือ .plist เพราะว่า ชื่อที่ระบบจะเก็บคือ Documents ครับ
ข้อมูลที่เราจะเก็บลง Plist ก็คือข้อมูลประเภท Array ดังตัวอย่างนี้ครับ
NSArray *array = @[@"The Game Of Thrones Season 4", @"HBO Series"];
เก็บข้อมูลลงไฟล์ก็ใช้คำสั่งนี้
NSString *filePath = [documentsDirectory stringByAppendingString:@".plist"]; [array writeToFile:filePath atomically:YES];
ดังนั้นภาพรวมของ ViewController.m ก็จะประกอบไปด้วย Code ตามนี้ครับ
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSArray *array = @[@"The Game Of Thrones Season 4", @"HBO Series"]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSLog(@"Directory: %@", documentsDirectory); NSString *filePath = [documentsDirectory stringByAppendingString:@".plist"]; [array writeToFile:filePath atomically:YES]; NSLog(@"Store Data at: %@",filePath); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
ทดลอง Run ตัวแอพพลิเคชันของเราดู จะเห็นว่า NSLog ของเราจะบอก Paths และชื่อไฟล์เรียบร้อยให้ตามไปดูด้วย Finder ครับ
![Run ตัวแอพพลิเคชัน](https://www.daydev.com/wp-content/uploads/2014/09/Screen-Shot-2557-09-14-at-6.30.54-PM.png)
ใน Folder จะพบไฟล์ .plist ของเราให้ลองเปิดดู
![Finder สักหน่อย](https://www.daydev.com/wp-content/uploads/2014/09/Screen-Shot-2557-09-14-at-6.48.39-PM.png)
จะพบว่าข้อมูล Array ของเราถูกเก็บในไฟล์ Documents.plist เรียบร้อยแล้วครับ
![โครงสร้างไฟล์ Plist เมื่อคลิกเปิดดู](https://www.daydev.com/wp-content/uploads/2014/09/Screen-Shot-2557-09-14-at-6.49.03-PM.png)
เป็นบทเรียนสั่นๆ ที่เกี่ยวกับการ เก็บข้อมูลโครงสร้าง Plist ไว้ในเครื่องของเราครับ ลองเอาไปลองทำกันดูนะครับ ตัวอย่างง่ายมากๆ Source Code ก็ไม่ต้องมีหรอกเนอะ…
One Comment