iPhone Programming I : Start Again

หลังจากที่ได้ทดลองเขียน iphone กันไปแบบมั่วๆแล้ว จาก tutorial ที่ผ่านๆมา และวันนี้เราน่าจะได้รู้เกี่ยวกับ iPhone SDK กันก่อนสักนิด ว่า Cocoa Touch ที่ใช้เขียนกันนั้น มันต่างจาก Cocoa ปกติอย่างไร และก็เรื่องเล็กๆน้อยๆ เกี่ยวกับ iPhone Project รวมถึง Tools ต่างๆ

Cocoa & Cocoa Touch

อย่างที่ผมได้บอกไปแล้วว่า ถ้าหากเราต้องเขียนโปรแกรมด้วย Objective-C แล้วนั่นก็หมายถึงว่าเราต้องเขียนด้วย Cocoa Framework และถ้าเป็น iPhone ก็จะเป็น Cocoa Touch ซึ่งเป็น Framework ขนาดเล็กกว่าและเพิ่มเติมในบางส่วน สิ่งที่ควรจะรู้เกี่ยวกับ iPhone และ Cocoa Touch นั้นก็คือ

  • iPhone นั้นสามารถใช้งานได้เพียง 1 โปรแกรม
  • iPhone มีหน้าขนาดหน้าจอที่จำกัด
  • เราไม่สามารถเข้าไปใช้ File ของ App ตัวอื่นๆได้นอกจาก App ของมันเอง
  • Cocoa Touch ไม่มี Garbage Collection
  • Cocoa Touch ไม่มี Binding
  • Cocoa Touch ไม่มี Core Data ( ตอนนี้มีใน SDK 3.0 แล้ว ) 
  • iPhone มีทรัพยากรณ์ที่จำกัด ram , diskspace , cpu

New Project

อย่างที่ได้บอกไปว่า ครั้งก่อนผมได้ทดลองเขียน iPhone กันแบบมั่วๆไป และครั้งนี้เราจะมาทำความเข้าใจเกี่ยวกับ iPhone Project กันมากขึ้น โดยเริ่มจาก การสร้างโปรเจคกันเลย ถ้าหากเราเปิด Xcode ขึ้นมาและเริ่มสร้างโปรเจค จะพบว่า มีหลายๆ Template ให้เลือก ดังรูปภาพ

project

แต่ละโปรเจคนั้นก็จะมีรายละเอียดต่างๆ ดังนี้

  • Navigation-Based Application
    ก็แปลตรงตัวเลยครับคือ เป็นโปรเจคที่แสดงในรูปแบบ Navigation ( จะเป็นลักษณะ Heirachy คือมีลำดับ )
  • OpenGL ES Application
    แบบนี้ก็ใช้เขียน Appplication จำพวก Game
  • Tab Bar Application
    โปรเจคแบบนี้จะมี Tab เป็นตัวเปลี่ยนหน้าต่างไปมา โดยไม่ได้เรียงลำดับเหมือน Navigation
  • Utility Application
  • View-Based Application
    แบบนี้เป็นโปรเจคที่มี view เพียงอันเดียว ** โดยส่วนมากใน tutorial ผมจะใช้อันนี้ **
  • Window-Based Application
    โปรเจคแบบนี้จะเป็นพื้นๆเลยครับ คือมี Application Delegate มาให้แค่นั้นเอง

Files

เมื่อเราได้สร้างโปรเจคขึ้นมาจะพบว่ามี File ต่างๆมากมายดังที่ผมเคยได้อธิบายไป ใน post ก่อนๆ แต่อาจจะอธิบายขาดหายไปในบางส่วน ครั้งนี้ก็อธิบายให้ครบเลยละกัน

xcode_project

จากรูปข้างบน จะเห็นว่ามี File ต่างๆมากมาย อันได้แก่

  • .m และ .h ไฟล์สองแบบนี้ก็คือ Header กับ Source นั่นเหละครับผมไม่แน่ใจว่า ภาษาอื่นๆ เค้าประกาศ Class กันแบบแยก Header – Source แบบนี้หรือเปล่า แต่ถ้าเป็น C/C++ ไฟล์จำพวก .h จะเป็น Header เอาไว้ประกาศ Class ส่วน .m และ .c และ .cpp จะเป็น ส่วนของ implement.
  • .pch เรียกว่า pre compile header ครับไฟล์นี้จะรวมรายชื่อ header ของ framework อื่นๆที่ต้องใช้ในโปรเจคและทำการ pre compile ก่อน เพื่อลดเวลาในการ compile
  • .framework เป็น Library นั่นเอง
  • .plist ไฟล์นี้เป็น property list ครับ เก็บค่า property ของ application ของเราเช่น บอกว่า icon ของ app ใช้ resource file ไหน
  • .xib เป็น interface สำหรับโปรแกรมของเรา
  • .app  ก็คือตัว Appication ของเรานั่นเหละครับ

Interface Builder

ทุกครั้งที่เราจะต้องออกแบบหน้าตาโปรแกรมของเรา เราจะใช้ interface builder และแน่นอนว่า File ที่เกี่ยวข้องก็คือ .xib นั่นเอง เว้นแต่ว่าเราจะเขียนโปรแกรมที่ต้องใช้ พวก OpenGL เราก็แทบจะไม่ต้องใช้ interface builder เลย และเมื่อเราได้ double click ที่ .xib ของเราจะเห็นหน้าตาของโปรแกรม interface builder ดังรูป

interface_builder

จริงๆหน้าต่าง ของ interface builder สำหรับ iPhone นั้นก็แทบจะไม่ได้ต่างจาก การเขียน application ปกติสักเท่าไหร่ แต่ถ้าดูดีๆ จะเห็นว่า หน้าต่าง inspector นั้นจะมีแค่ 4 tab เท่านั้นเอง

inspector

นั่นก็คือ Attributes , Size , Connection , Identity ซึ่งจะพบว่าสิ่งที่ขาดไปก็คือ Binding , Effect , ApplcScript

Xib File

และถ้าเราดูตรง Document Windows จะเห็นว่า มี Object อยู่สองตัวเสมอๆ คือ File’s Owner กับ First Responder

xib

ความสำคัญของ Object 2 ตัวนี้ก็คือ

  • File’s Owner เป็นตัวแสดงถึง Object ที่ได้โหลดไฟล์ Nib ตัวนี้หรือพูออีกอย่างก็คือเป็นเจ้าของ Nib นั่นเอง
  • First Responder นั้นเป็น เป็น Object ที่จัดการ interaction ของ object ที่กำลังโดนกระทำอยู่ ณ ขณะนั้น คือยกตัวอย่างเช่นถ้าหากเรากำลังพิมพ์ข้อความใน textbox นั่นก็แปลว่า textbox คือ responder นั่นเอง และถ้าหากเราเปลี่ยนไปกดปุ่ม ปุ่มก็จะกลายเป็น  responder แทน และ First Responder  นี้ก็จะช่วยให้โปรแกรมรู้ได้ว่า Object ไหนควรจะถูก responder นั่นเอง

เมื่อเราได้สร้างโปรเจคโดยให้ชื่อว่า Test และเลือกแบบ View-Based Application จะเห็นว่ามี .xib ทั้งหมดสอง files ด้วยกัน ( ดูจากรูป ที่ 2 ) นั่นคือ MainWindows.xib กับ TestViewController.xib และถ้าเราเปิด MainWindows.xib ขึ้นมาเลือกไปที่ File’s Owner จะพบว่า Object ที่โหลด xib ตัวนี้ก็คือ UIApplication ดังรูป

mainowner

และถ้าเรากดดูที่ Test View Controller ( icon ทีเป็นรูป วงกลมแล้วมีสี่เหลี่มตรงกลาง ) ก็จะเห็นหน้าตา interface แบบนี้

maininterface1

ถ้าหาก เรามาลองเดาจาก interface จะมีข้อความตรงกลางที่เขียนว่า Loaded From “TestViewController.xib” ที่เห็นตรงนี้ก็น่าจะพอจะตีความได้ว่า View ที่ Test View Controller ตัวนี้เป็นตัวควบคุม จะต้องไปโหลดจาก TextViewController.xib แน่นอน แล้วเราก็ลองเปิด TestViewController.xib กันขึ้นมาดู แล้วกดไปที่ File’s Owner

viewowner

จะเห็นได้ว่า File’s Owner ก็คือ TestViewController นั่นเอง

น่าจะพอเข้าใจ File’s Owner กันนะครับ สรุปก็คือเป็น Object ที่แสดงว่า ใครเป็นคนโหลด xib ตัวนี้นั่นเอง

iPhone Simulator

เมื่อเราได้เขียนโปรแกรมเรียบร้อยแล้ว และทำการ compile ไปแล้วนั้นจะพบว่า Xcode จะเปิด application ตัวใหม่ขึ้นมานั่นก้อคือ iPhone Simulator ตัว simulator นี้ผมคิดว่าเป็น  simulator ที่ดีที่สุดของการพัฒนาโปรแกรมบนมือถือเลยก็ว่าได้ ( ถ้าใครได้ลองเขียนโปรแกรมพวก Symbian จะพบว่าตัว simulator ของมันแย่มากๆ )  เพราะว่ามันแทบจะไม่ต่างอะไรกับของจริงเลย และเรายังสามารถปรับเปลี่ยน Version หรือ จะหมุนซ้าย หมุนขวา หรือแม้กระทั่ง จำลอง Memory Warning ได้ด้วย

simulator

และถ้าเริ่มเขียนโปรแกรมไปเยอะแล้ว ไม่รู้ว่าจะลบโปรแกรมที่เขียนไปได้ยังไง ก็ดูตามรูปได้เลยครับ คือเข้าไปยัง เมนูและเลือก reset

reset

วันนี้จบเพียงเท่านี้ แนะนำติชม คอมเม้นได้ครับ

3 thoughts on “iPhone Programming I : Start Again”

  1. หมายถึงสามารถเขียนบน iphone3g หรือรุ่นที่สูงกว่าได้รึเปล่าคะ?

  2. xcode 3.1 นี่ จะ simulate iphone3g up ได้ไหมคะ?
    เห็นจากรูปตัวอย่างมันมีแต่ version 2.x

Leave a Reply to detectivesh Cancel reply