Cocoa Programming Video Tutorial

เป็น tutorial ในรูปแบบ vdo อันที่ 2 แล้วนะครับ เป็นการสอนการเขียนโปรแกรมด้วย cocoa อย่างง่ายๆ ด้วยโปรแกรมนับจำนวนตัวอักษรใน text field

[flv]http://www.macfeteria.com/wp-content/uploads/2008/08/cocoa.flv[/flv]

ถ้าอยากดูชัดๆก็โหลด .mov ไปดูได้ึีครับ

Download Cocoa Video tutorial (37 mb.)

ก็ขอว่าอย่าเอาไป upload ลงที่อื่นนะครับ Youtube ยังงี้

Talk: Link Mistake

ก็คือว่าหลังจากที่ผมได้ย้ายจาก maccafe.wordpress.com  มายัง macfeteria.com ก็พยายามจะย้ายทุกๆอย่างมา นั่นก็รวมไปถึงรูปและ link ต่างๆ ผมก็พบว่า มันก็ยังผิดๆอยู่บ้าง เช่นว่าหน้า question to me เป็นต้น ( ตอนแรกก็งงว่า ทำไมเค้าไม่ถามที่หน้านี้ว่ะ ก็กดแล้วมัน link ไปผิดที่นี่เอง ) แต่ก็เข้าใจละว่า อ๋อ link มันผิดนี่เอง

แต่จริงๆแล้วผมมีแผนจะทำ web board เร็วๆนี้นะครับ ( สาเหตหลักๆที่ยังไม่ได้ เอา web board ลงเพราะกลัวบรรดาเหล่า spam) เพื่อที่จะได้ง่ายสะดวก และจะได้ร่วมกันแชร์ความรู้และประสบการณ์ กันเพราะตัวผมเองก็ใช่ว่าจะเก่งไปทุกๆเรื่อง อย่างที่บอกไว้ คนเก่งกว่าผมก็น่าจะมีเยอะไป เราน่าจะมาแลกเปลี่ยนความรู้กัน จะได้ก้าวไปพร้อมๆกัน

ถ้าเจอ ข้อผิดพลาดของ link หรือว่า bug ของโปรแกรม พิมพ์ผิด ช่วยบอกด้วยก็ดีนะครับ ผมจะได้แก้ไข

Cocoa Programming III : Key Value

Key Value Coding

โดยปกติแล้วเราสามารถใช้ method ที่ชื่อว่า setValue:forKey: เพื่อทำการ set ค่าให้กับ ตัวแปรใน class ได้ดังตัวอย่างข้างล่างนี้

สมมติว่าเรามี Class แบบนี้

เราสามารถที่จะ set ค่าให้กับ name ได้แบบนี้

และเราก็สารมารถที่จะ get ค่าจาก name ได้แบบนี้

ดูแบบนี้อาจจะเหมือนว่ามันไม่ค่อยจะมีประโยชน์มากนัก แต่เราจะได้ใช้ในเรื่องของ Binding ในส่วนต่อไป

Accessor Method

มันก็คือ method ที่เป็นลักษณะ Get – Set นั่นเหละครับ ถ้าหากเรามี class book แบบข้างบน เราอาจจะเขียน accessor method ได้ว่า

โดยปกติแล้ว accessor method นั้นจะมี pattern ลักษณะ
-<Key>
-set<Key>
-get<Key>

รายละเอียดเพิ่มเติมของ pattern อ่านได้ที่ http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueCoding/Concepts/AccessorConventions.html#//apple_ref/doc/uid/20002174

คือถ้าหากว่าเราเขียน method ที่มีการทำงานเหมือนกันแต่ว่า มันไม่ตรงกับ pattern ก็ไม่อาจจะเรียกได้ว่าเป็น accessor method เช่นว่า

คือเรามองว่าจาก setBookName นั้นประกอบไปด้วย “set” และ “BookName” ซึ่ง BookName ถือว่าเป็น key และใน class book นั้นก็ไม่ได้มี member ที่ชื่อ BookName ดังนั้น method นี้ก็ไม่อาจจะเรียกว่าเป็น acessor method ได้

Binding

binding คือการจับคู่ระหว่าง object กับตัวอ้างอิง และใน cocoa เองก็มีการใช้ binding กับ graphic object มากมาย ยกตัวอย่างเช่นว่า เราอาจจะ binding ค่าของตำแหน่งของ slide กับตัวแปร slidePosition เมื่อเราเลื่อน slide ค่าของ slidePostion ก็เปลี่ยนไปตามตำแหน่งของ slide เป็นต้น

อาจจะมองไม่ค่อยจะเห็นภาพว่าเราจะใช้ Binding ได้ยังไง และจะนำ key-value-coding ไปใช้ได้ยังไง งั้นมาดูตัวอย่างการใช้งานจริงๆกันเลยดีกว่า

สมมติว่าเราต้องการเขียนโปรแกรม นับจำนวนของคำ เหมือนดังตัวอย่างแรกๆ แต่ครั้งนี้เราจะใช้ Binding เข้ามาช่วย

ก่อนอื่นก็สร้าง โปรเจคขึ้นมา แล้วก็ add class ที่ชื่อว่า AppController เหมือนที่ผ่านมาในตัวอย่างก่อนๆ โดยใน AppController ของเราจะมี code ดังนี้ Continue reading Cocoa Programming III : Key Value

Cocoa Programming II : NSTableView Advance

หลังจากได้ลองเขียน NSTableView ดูกันแล้ว วันนี้ก็ยังคงต่อด้วยเรื่องของ NSTableView เหมือนเดิมแต่ว่าเป็นขั้น Advance มากกว่าเดิม

More about datasource

จากโปรแกรมแสดงตารางรายชื่อครั้งก่อน จะเห็นว่าเราได้ set datasource มาที่ AppController และเราก็เขียน implement delegate ของ datasource ที่ AppController จะเห็นว่าวิธีแบบนี้ไม่ค่อยจะยืดหยุ่นมากนัก เพราะเนื่องจากว่าเราให้ AppController เป็นทั้งตัวควบคุม interface และยังให้เป็น datasource

สมมติว่าเราต้องการมี table มากกว่า 1 table และแต่ละ table มี datasource ที่มีข้อมูลต่างกัน เราก็คงต้องเพิ่ม datasource ให้เท่ากับจำนวนของ table ซึ่งนั่นก็แปลว่าเราก็ต้องสร้าง AppController instance มาหลายๆอัน มันก็คงจะไม่ใช่วิธีที่ดีนัก และที่สำคัญตัวโปรแกรมจะมองว่า AppController instance ที่เราสร้างขึ้นมาใหม่ มันเป็นตัวเดียวกัน ดังนั้นข้อมูลใน table A และ B ก็จะเหมือนกัน ( ดูรูปประกอบ ) ฉนั้นแล้วการที่เราให้ AppController เป็น datasource โดยตรงก็คงไม่ดีแน่

งั้นแทนที่เราจะให้ Class AppController เป็น datasource โดยตรง เราก็เปลี่ยนให้ AppController มี member เป็น datasource ก็น่าจะดีกว่า

จากรูปข้างบน จะเห็นว่า เราก็สามารถมีหลายๆ datasource ที่ต่างกันได้ แล้วเราจะเขียน class ออกมาได้ยังไง ? งั้นมาดูตัวอย่างจริงกันเลยดีกว่า Continue reading Cocoa Programming II : NSTableView Advance

Cocoa Programming II : NSTableView

NSTableView

NSTableView คือ class ที่ช่วยในการแสดงผลแบบตาราง ใน NSTableView จะมี helper object หนึ่งที่ชื่อว่า datasource ช่วยในการแสดงผลของข้อมูล ซึ่งการทำงานของ NSTableView จะไม่ใช่ลักษณะที่ตัวโปรแกรมเป็นคนส่ง message บอกกับ NSTableView เช่นให้แสดงคำว่า Hello ตัวโปรแกรมหลักจะไม่ได้เป็นคนสั่งบอกับ NSTableView ว่าให้แสดงคำว่า Hello ที่แถวที่สอง แต่ในทางกลับกันมันจะไปถาม helper object ว่าในแถวที่สองมีอะไรที่ต้องแสดง ในกรณีนี้ datasource ก็จะส่ง Hello กลับมาให้ยัง NSTable แบบรูปข้างล่าง

และในการใช้งาน NSTableView นั้นเราต้อง implement delegate method ( หากไม่เข้าใจ delegate ให้ไปอ่าน cocoa programming delegate ) ด้วยกัน 2 อย่างคือ

  • -(int) numberOfRowInTableView:(NSTableView*) tableView;
    ส่งค่าของจำนวน row กลับมา
  • -(id) tableView:(NSTableView *) tableView
    objectValueForTableColumn:(NSTableColumn*) tableColumn
    row:(int) rowIndex;
    ส่ง object ที่ต้องไปแสดงผลที่ row ละ column

เอาละเมื่อเข้าใจคร่าวๆแล้ว เราก็มาลองเขียนโปรแกรมเล่นๆ กันดู สมมติว่าเราต้องการเขียนโปรแกรมแบบตัวอย่างดังรูป Continue reading Cocoa Programming II : NSTableView