เรื่อง void , void * และ id ใน objective c แตกต่างกันอย่างไร

สำหรับสามอย่างนี้ จะแตกต่างกัน โดยแบบแรก void จะใช้บอกว่าเมธอดหรือฟังก์ชั่นนั้นๆไม่ต้อง ส่งค่า(return)กลับไป ณ จุดที่เรียกใช้เช่น -(void)printData{ } ส่วน void * จะเป็น pointer ตัวนึง คล้ายๆกับ id  “แต่” ไม่เหมือนกันซะทีเดียว โดยที่ id จะเป็น pointer ที่ชี้ไปยัง object หรือ instance ของคลาส ใน  objective-c  ส่วน  void*  จะชี้ไปยังชนิดข้อมูลทุกๆชนิด  (anything) เช่น data structure  ที่เขียนด้วยภาษา c  เป็นต้น (void* เป็น  C-Style pointer) ในการเลือกใช้งานปกติแล้ว นิยมใช้ id กันมากกว่า ตัวอย่าง การใช้งาน สมมติว่าเรามีฟังก์ชั่น 2 แบบดังนี้ void [...]

การใช้งาน Preference ใน iPhone

ถ้าต้องการเก็บค่าอะไรบางอย่างไว้ในเครื่องของเรา ก็สามารถใช้ Preference ได้  โดยเราสามารถเขียน หรือ อ่านค่าจากใน Preference  สำหรับขนาดข้อมูลที่ถูกเก็บใน Preference นั้น ไม่ควรเกิน 100K เพราะถ้าหากเกิน 100K ก็แนะนำว่าไปใช้ Core Data จะดีกว่า   ในการสร้าง Preference เราจะใช้ NSUserDefaults ดังนี้   NSUserDefaults *u = [NSUserDefaults standardUserDefaults]; [u setObject:@"test1.aa" forKey:@"loginName"]; [u synchronize];   ถ้าเราเข้าไปดูที่ /Users/your_username/Library/Preferences เราจะพบว่า Preference ของเราจะถูกสร้างโดยมืชื่อโปรเจคของเราเป็นชื่อไฟล์ตามด้วย .plist   จากนั้นการอ่าน preference ก็ให้อ่านจาก key ที่เรากำหนดไว้ตอนสร้างตัวอย่างนี้คือมี key ที่ชื่อ  loginName ก็เขียนคำสั่งดังนี้   NSUserDefaults [...]

การจัดการกับ Exception ใน objective c

ในภาษา  java จะใช้ try-catch-finally ในการจัดการกับ Exception สำหรับภาษา objective c ถ้าเราต้องการดักจับ Exception เพื่อดูว่าโค้ดส่วนไหนมีโอกาสจะเกิด Error บ้าง เราจะใช้ NS_DURING (เทียบได้กับ try) , NS_HANDLER (เทียบได้กับ catch) และ NS_ENDHANDLER (เทียบได้กับ finally) ซึ่ง สำหรับ NS_ENDHANDLER จะเรียกใช้เมื่อหลังจาก Code มีการทำงานในส่วนของ NS_HANDLER แล้ว ตัวอย่าง   #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NS_DURING{ int i = 10/0; } NS_HANDLER{ NSLog(@”Error [...]

การตรวจสอบคลาสว่ามี method ที่กำหนดหรือไม่

เราสามารถใช้ respondsToSelector ในการตรวจสอบได้สมมติว่าคลาสของเรามีเมธอดดังนี้   #import <Foundation/Foundation.h>   @interface Test : NSObject   -(int)  returnInt;   @end       แล้วใน main เราต้องการรู้ว่าคลาส Test มีเมธอดที่ชื่อ returnInt หรือไม่เราสามารถเขียน คำสั่งตรวจสอบได้ดังนี้   int main (int argc, const char * argv[]) {   Test *t =[[Test alloc]init]; if([t respondsToSelector:@selector(returnInt)]==YES){ NSLog(@”YES”); }else{ NSLog(@”NO”); } return 0; }   ถ้า return YES [...]

การใช้งาน AsyncTask

Async Task จะช่วยให้เราสามารถจัดการกับ background process ต่างๆและ สามารถส่งค่ากับไปที่ UI Thread โดยที่เราไม่จำเป็นต้องใช้ Thread หรือ Handler เลย เช่น เราต้องการคำนวน % การโหลด ข้อมูล ซึ่งช่วงระหว่างการคำนวน % เราก็สามารถเขียน ส่วนนี้ไว้ใน background process จากนั้น ถ้าหากเรามี progress bar เพื่อแสดงสถานะ download เราก็ส่งค่าที่ได้จากการคำนวนมาให้ progress bar ได้ และถ้ามีการคำนวน % เสร็จหมดแล้ว เราต้องการแสดงผลลัพธ์ “download completed” ไปให้กับ Label เราก็สามารถส่งผลลัพธ์ออกมาเป็น String ได้ สำหรับตัวอย่างนี้จะแสดงการ บวก ตัวเลขแล้วส่งผลลัพธ์กลับมา เริ่มแรกสร้างคลาสขึ้นมาก่อนดังนี้

  สร้างคลาสที่ชื่อ MyCalculator ขึ้นมาโดยจะต้องทำการ [...]

ตัวอย่างการตรวจสอบมือถือ Android ของเราว่า รองรับ Feature อะไรบ้าง

ตัวอย่างการ ตรวจสอบมือถือของเราว่า รองรับ Feature อะไรบ้าง   ในการตรวจสอบต่างๆเช่น มีกล้องหน้าหรือไม่ , มี NFC หรือไม่ เราสามารถใช้ เมธอด hasSystemFeature ได้ภายใน เมธอดนี้ก็ให้เรียก PackageManager ตามด้วยชื่อ feature ต่างๆ ตัวอย่าง public boolean checkCamera(){ return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); } public boolean checkNFC(){ return getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC); } public boolean checkFrontCamera(){ return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT); } จากเมธอดต่างๆนี้ ถ้า เครื่องเรารองรับ feature ไหนก็จะ แสดงค่า true ถ้าไม่รองรับก็จะแสดง false  นอกจาก feature ต่างๆตามตัวอย่างนี้แล้ว เรายังสามารถตรวจสอบ feature อื่นๆอีกเยอะแยะได้ [...]

การดึงข้อมูลมาจาก json array

  สมมติว่าเราเรียกใช้ rest service สักตัวนึง ซึ่งมีการ return ค่ากลับมาเป็น  ข้อมูล JSon Array เช่น   [{"StudentID":"12345","StudentName":"John"}, {"StudentID":"67890","StudentName":"Jame"} ]   แล้วเราต้องการ ดึงข้อมูล ใน json array นี้ เราสามารถแปลง ข้อมูลนี้ให้เป็น json object ก่อน แล้วค่อยดึงข้อมูลได้ดังนี้   JSONArray jArray = new JSONArray(responseData);  // ตรง responseData เป็นข้อมูลที่ถูกส่งมาจาก rest service ซึ่งอยู่ในรูปแบบ JSON Array ตาม format ด้านบน JSONObject jObj=null; String  stuID; String   stuName; for(int i [...]

การส่ง ข้อมูล JSON แบบ POST ไปที่ REST

  สมมติว่าเรามี rest service ตังนึงแล้วเราต้องการที่จะเรียกใช้ rest service ตัวนี้โดยส่งข้อมูลที่อยู่ในรูปแบบ json ไปด้วย เราก็สามารถที่จะใช้คลาส HttpPost แล้วทำการ กำหนดค่า header ให้เป็น  application/json ได้ ตัวอย่าง   String responseData; int responseStatusCode;   public String callRest() { try { HttpPost request = new HttpPost( “url”); //ตรง url  เป็น path ของ rest service ของเรา request.setHeader(“Content-type”, “application/json”); JSONObject json = new JSONObject(); json.put(“StudentID”, “12345″); json.put(“StudentName”, [...]

การ ปิด activity ใน android

สมมติว่าเรากำลังสร้างเกมส์ แล้ว มีหน้า loading… ซึ่งเป็นหน้าแรกก่อนที่จะเข้าหน้า main menu พอ load เสร็จ เราก็เปิดหน้า main menu ขึ้นมาแล้วต้องการปิดหน้า loading เพื่อไม่ใช้ผู้ใช้คลิกปุ่ม back กลับไปหน้า main menu อีก เราสามารถ ที่จะใช้ คำสั่ง  android:noHistory = “true” ได้ โดยเขียนไว้ใน AndroidManifest.xml ตรง activity ของหน้า loading เราตัวอย่าง หน้า loading… <activity android:name=”com.test.SplashActivity” android:label=”@string/title_activity_splash” android:screenOrientation=”landscape” android:noHistory=”true” > <intent-filter> <action android:name=”android.intent.action.MAIN” /> <category android:name=”android.intent.category.LAUNCHER” /> </intent-filter> </activity> สำหรับคำสั่ง android:noHistory=”true” นี้เป็นคำสั่งที่บอกว่า [...]

SQL_VARIANT Data Type

ใน sql จะมีชนิดของข้อมูลชนิดหนึ่งที่เรียกว่า SQL_VARIANT ซึ่งข้อมูลชนิดนี้มีความพิเศษอย่างนึงคือสามารถเก็บข้อมูล ได้หลายๆ รูปแบบเช่นเช่น numeric , string หรือ date ใน column เดียวกันได้ตัวอย่าง สมมติเรามี table นึงดังนี้ CREATE TABLE test( ID INT NOT NULL, name NVARCHAR(100) NOT NULL, mycustomValue SQL_VARIANT NOT NULL) แล้วตรง field mycustomValue ถ้าเราต้องการเก็บค่าข้อมูลหลายๆรูปแบบเราก็สามารถ insert ค่าต่างๆได้ดังนี้ INSERT INTO test VALUES(1,’a’,100) INSERT INTO test VALUES(2,’b’,’test’) INSERT INTO test VALUES(3,’c’,’2012/14/12′) INSERT INTO test VALUES(4,’d’,600023423432) [...]