[iOS Dev] Delegate method for Notified Request is Success

ขอ Blog เก็บไว้หน่อยนะครับ แต่อาจจะเป้นประโยชน์

Case Study คราวนี้ก็คือ ....

ผม Download ข้อมูลจาก Cloud Web Service --> Parse.com
จากนั้นผมจะบันทึกลง Core Data แล้วก็ใช้ Controller ในการ Fetch

แต่ ปัญหา ตัวบะเริ้มเกิดตรงที่ว่า ...
ในระหว่างการ Download ข้อมูลอยู่นั้น Controller ทำการ Fetch ไปแล้ว
ทำให้ได้ข้อมูลว่างๆ กลับมา (เพราะยังโหลดไม่เสร็จ จึงยังไม่ได้ Insert ลง Core Data)

เราจะแก้ปัญหานี้อย่างไรดี ?

Delegate ตอบคำถามคุณได้ครับ ...
เราเพียงแต่ใส่ Delegate เข้าไป แล้วสั่งให้ Fetch ในขณะที่ Download ข้อมูลเสร็จแล้ว

ขณะนี้ผมมีโครงสร้างโปรแกรมแบบนี้นะครับ
  Class ParsingData เป็น Model ที่เอาไว้ Parsing ข้อมูลจาก Web Service และบันทึกลง Core Data
  Class ParseSiteViewController เป็น Controller เอาไว้ Fetch ข้อมูลจาก Core Data



จากนั้นก็สร้าง Protocol Method พร้อมสร้างตัวแปร Delegate ให้กับ Class อื่นๆ ที่จะมาเรียกใช้ด้วย
**อย่าลืม synthesize ด้วยนะครับ

ParsingData.h

จากนั้นเราบอกว่า ให้ Protocol Method นี้ถูกเรียกหลังจากที่ Download ข้อมูลเสร็จแล้ว
(ในที่นี้ผมใช้ Block จาก API ของ Parse.com ที่จะบอกว่า Download ข้อมูลเสร็จหรือยัง)

ParsingData.m
มาดูในส่วนของ Controller กันบ้าง ?
ขั้นแรกเราก็บอกให้ ParsingData เป็น Delegate ของ ParseSiteViewController ซะก่อน
(โดยการใช้ Protocol)

ParseSiteViewController.h


ระหว่างที่เรา Setup ตัว Object ของ Model ที่ใช้ใน Controller ก็ทำการ set Delegate ด้วย (ห้ามลืม)

ParseSiteViewController.m

จากนั้นเราก็เรียก Delegate Method ที่ประกาศอยู่ที่ ParsingData พร้อมกับบอกว่าให้มันทำอะไรด้วย
ในที่นี้ผมก็สั่งให้ Fetch ข้อมูลจาก Core Data

ParseSiteViewController.m

เราจะเห็นว่า เราสามารถที่จะกำหนดเวลาที่จะเรียก Method ใดๆ ได้อย่างสมบูรณ์แบบ
ว่าจะเรียกเมื่อไหร่ตอนไหน ...

ลองคิดง่ายๆ อย่างเช่น เวลาเราใช้ UIAlertView จะมี Delegate Method ให้ใช้งาน เกี่ยวกับว่า เรากดปุ่มไหนกด AlertView ที่แสดงขึ้นมาใช้ไหมครับ นั่นแหละครับ มันคืออันเดียวกันเป๊ะ
ต่างกันแค่ว่า ....

นั่นเขามีให้ใช้อยู่แล้ว (เขาเขียน เราเรียกใช้) แต่ในที่นี้ เราเขียน ...  เราเรียกใช้ ...
อาจจะประยุกต์ในกรณีอื่นๆ ได้อีกนะครับ

จบแค่นี้นะครับ ...

Popular posts from this blog

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

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

"อีสุกอีใส" ประสบการณ์เมื่อต้องมาเป็นตอนอายุ 22