https://i1.wp.com/theme5hq.com/wp-content/uploads/2016/03/image.jpeg?fit=1050%2C776&ssl=1

รวม FAQ ถาม / ตอบ คอร์สที่ผมสอนอยู่ที่ Udemy ทั้งจาก Facebook inbox และ Email

Ios development build 15 iphone apps

Ios development build 15 iphone apps

รวมคำถามจากผู้เรียนทั้งจาก Facebook inbox และ Email

  • ผมมีข้อสงสัยครับว่าทำไมเมื่อเวลาใช้ optional ใน Condition Statement ทำไมถึงใช้เป็น let name = Myname ทั้งที่ควรจะเป็น let name == Myname ครับ
  • เราสามารถใช้ optional binding ในการ ใช้งาน Control Flow ต่างๆ เสมือนการใช้ Condittion Statement ใช่มั้ย แล้วอย่างไหนดีกว่ากันครับ
  • ผม ส่งค่าที่เป็น Int มาจาก Picker เพื่อที่จะ Save ไปที่ coredata ผม google เจอว่าเขาให้ส่งค่าไปแบบนี้ NSNumber(int:Int32(heightTextField.text!)!) ซึ่งคำถามที่ผมอยากถามก็คือมันหมายความว่ายังไงแล้วทำไมต้องทำแบบนี้ครับ
  • พี่หลงครับ PickerView ผมกำหนดให้มันโชว์ค่า โดย +ไปครั้งละ 0.1
  • ผมเอา Code จากรุ่นพี่มาแก้ไข AutoLayout มันไม่ทำงาน
  • Core Data  คืออะไรทำไมต้อง Core Data ?
  • Core Data Stack คืออะไรครับ ?
  • อยากทำเงินเยอะๆกับการสรา้ง App เรียนรู้ Android  หรือ IOS ดัครับ ?
  • เราจะส่งข้อมูลย้อนกลับยังไงครับผ่าน ViewController ?
  • ผมสามารถสร้าง Hardware ขึ้นมาเองแล้วไปเชื่อมต่อกับ iPhone ได้ไหม ?
  • อยากรู้ว่าเราจะตรวจสอบ  status ของ bluetooth ได้ยังไงครับ
  • ผมอยากจะรัับจากจาก Arduino ไม่ทราบว่าเราจะใช้ function อะไรครับ ?
  • เราสามารถแปลงค่าจาก Int เป็น Hex ได้ไหมครับ

  • แล้วเราจะรู้ได้ยังไงหรอครับว่าเจ้าตัว arduino มันส่งมา กี่บิทกี่ไบท์
  • Realm เก็บข้อมูล  Database ไว้ที่ไหนครับอยากรู้ ขอบคุณครับ ?
  • ผมไม่เข้าใจตรง priority มันแตกต่างกันยังไงอะครับ Low high require ?
  • ผมต้องการจะใช้งาน tableview ใน viewcontroller ผมต้องทำ protocol หรอครับ http://stackoverflow.com/questions/31673607/tableview-in-viewcontroller-in-swift

     

  • APNS คืออะไรครับ ?
  •  เห็นหลายบริษัทรับสมัครงานกันถามถึงแต่ Obj-C ผมเลยอยากรู้ว่าผมควรจะมุ่งไปที่swift เลยหริอว่าจะไปฝึกobjective c ดีครับ
  •  ขอทราบ Step การทำ notification

     

     

 

Q : ผมมีข้อสงสัยครับว่าทำไมเมื่อเวลาใช้ optional ใน Condition Statement ทำไมถึงใช้เป็น let name = Myname ทั้งที่ควรจะเป็น let name == Myname ครับ

A: ยกตัวอย่าง

if condition {

Statements to execute if condition is true

}

************************************

ที่มา

ในทุกๆค่าที่อยู่ในส่วนของ condition ของ if

จะต้องเป็นค่า BooleanType protocol เช่น True หรือ False

เช่น

5 > 2 // แปลว่า ห้ามากกว่า 2 จริงไหม ? คำตอบคือจริง

มันก็จะทำงานต่อในส่วนของ Statements

ทั้งนี้ในส่วนของ Condition นอกจากค่าจะต้องเป็นแบบ BooleanType protocol แล้วสำหรับภาษา swift เองยังสามารถรับค่าเป็น Optional binding ได้ด้วย

************************************

ทำไมต้อง Optional binding ?

การที่เราจะจัดการกับตัวแปรแบบ Optionnal นั้น

เราจะใช้วิธีที่เรียกว่า Optional binding ( ใช้ if และ while นะครับ)

เพื่อสอบหาค่าที่อยู่ภายใน ตัวแปรแบบ Optional โดยมีวิธีการคือ เราจะสร้างตัวแปรมา 1 ตัวโดยให้คิดว่า

ตัวแปรนี้ เราจะสร้างขึ้นมาชั่วคราวเพื่อเอาไว้เพื่อตรวจสอบและรับค่า

(หรือเรียกว่าแตกค่าที่อยู่ใน Optional ออกมาเข้าไปเก็บในตัวแปรที่เราสร้างก็ได้)

จาก ตัวแปร Optional (แบบ single action) โดยมันจะสอบค่าว่าตัวแปร Optional นั้นมีค่าหรือไม่มี

ถ้ามีก็ทำในส่วนของ statement ต่อไปเป็นต้น

************************************

ตอบคำถามข้อสงสัยสำหรับคำถามครับ

เครื่องหมาย == มันเป็นแบบ Comparative (เป็นการเปรียบเทียบ เช่น > , < , != , >= เป็นต้น)

จากคำอธิบายที่ให้ไว้จึงเป็นคำตอบว่าทำไมเราไม่สามารถใช้เครื่องหมาย == เพื่อใช้สำหรับจัดการตัวแปรแบบ Optional ได้

เพราะ == จะใช้สำหรับการเปรียบเทียบเช่น 5 == 5 // แปลว่า ห้าเท่ากับ 5 จริงไหม คำตอบ จริง

Q : เราสามารถใช้ optional binding ในการ ใช้งาน Control Flow ต่างๆ เสมือนการใช้ Condittion Statement ใช่มั้ย แล้วอย่างไหนดีกว่ากันครับ

ระหว่าง

var Myname:string? = "Test"

if let a = Myname หรือ Myname != nil ครับ

A: เอาแบบสรุปๆเลย

ขอพูดถึง Objective-C ก่อนนะ

ก่อนหน้าจะมีภาษานึงชื่อว่า Objective-C ที่ต้องกล่าวเพราะ API บางส่วนก็มาจากนี่หล่ะ ทาง Apple พยายามจะให้ API ของ Objective-C ครอบคลุมในทุกๆส่วนของ swift หมายถึงอะไรดีๆจาก Obj-C ก็จะเอามาใช้ใน swift ด้วยเป็นต้น แต่ยังไม่สามารถทำได้เนื่องจากมันซับซ้อนและอีกหลายเหตุผล เลยปล่อย swift มาเป็น opensouce เพื่อให้นักพัฒนาช่วยกัน โดยที่กล่าวมาโดยสรุปจึงเป็นที่มาของ swift 3 เร็วๆนี้

************************************

มาพูดถึงการ return ค่าจาก Objective-C กัน

Objective-C ในส่วนของ object มันสามารถจะ return ค่าเป็น nil ได้ดังนั้นเวลาใช้จึงต้องมี Implicitly unwrapped optionals หมายถึงเจ้าสัญลักษณ์ ! เป็นต้น เพื่อบอกว่ามันมีข้อมูลแน่นอนไม่เป็นค่าว่าง การทำงานกับ function หรือ method โครงเก่าเช่น cocoa นี่ต้องใช้ optionals หรือ unwrapperd เข้ามาช่วยด้วยจ้าา

สักพักหลังๆจะมีแสดงให้ดู แต่เนื้อหาตอนนี้ยังไปไม่ถึง 555 ( ฝากติดตามด้วยนะครับ )

จะเห็นว่า เวลาเราใช้ API เก่าๆจาก Objective-C มันจะต้องมีพวก Optional / Implicitly unwrapped optionals มายุ่งเกี่ยวด้วยเสมอ

************************************

เริ่มตอบคำถามละ

???????

var Myname:String? = "Test" // แก้ S เป็น uppercase letter (ตัวพิมพ์ใหญ่)

if let a = Myname หรือ Myname != nil ครับ

อย่างไหนดีกว่ากัน

???????

ขอตอบว่า มันขึ้นอยู่กับการใช้งานครับ

หากเราใช้ Myname != nil

มันเป็นเพียงแค่การตรวจสอบว่ามันมีค่าและไม่เท่ากับค่าว่างใช่หรือไม่

ถ้ามันมีค่าและมันไม่เป็นค่าว่างแสดงว่าจริง (BooleanType protocol)

มันก็จะทำในส่วนของ Statements to execute ต่อไปโดยไม่ได้ทำการแตกค่าออกมาแค่ตรวจสอบเฉยๆ

แต่หากเราต้องการนำค่ามันมาใช้ก็แตกค่าออกมาเก็บไว้ที่ตัวแปรชั่วคราวที่เราสร้างขึ้นเพื่อนำไปใช้งานต่อใน Loop (แบบ Optional binding ) หรือส่งค่าไป method อื่นๆเป็นต้น ก็ใช้แบบ Optional binding เข้ามาใช้ครับ

ถ้าถามว่าวิธีไหนดีสุดนั้น มันก็ขึ้นอยู่กับการใช้งานของเราเอง ^__^

Q : ผม ส่งค่าที่เป็น Int มาจาก Picker เพื่อที่จะ Save ไปที่ coredata ผม google เจอว่าเขาให้ส่งค่าไปแบบนี้ NSNumber(int:Int32(heightTextField.text!)!) ซึ่งคำถามที่ผมอยากถามก็คือมันหมายความว่ายังไงแล้วทำไมต้องทำแบบนี้ครับ

A:

สำหรับคำถามเราขออธิบายอย่างนี้ NSNumber(int:Int32(heightTextField.text!)!) ๙ สำหรับ CoreData หากต้องการส่งค่าพวก Int CoreData มันจะรับแต่ NSNumber เพราะ NSNumber มันสามารถส่งค่าได้หลายแบบเช่น Int , UInt , Float , Double , Bool เป็นต้น ***NSNumber เป็นส่วนหนึ่งของ Objective-C API (cocoa) ดังนั้น เบื้องหลังมันจึงเป็น Objective-C อธิบายต่อไปว่า Objective-C ในส่วนของ object มันสามารถจะ return ค่าเป็น nil ได้ดังนั้นเวลาใช้จึงต้องมี Implicitly unwrapped optionals หมายถึงเจ้าสัญลักษณ์ ! เพื่อบอกว่ามันมีข้อมูลแน่นอนไม่เป็นค่าว่าง การทำงานกับ function หรือ method โครงเก่าเช่น cocoa นี่ต้องใช้ optionals หรือ unwrapperd เข้ามาช่วยด้วยจ้าา

สามารถเขียนแบบนี้ก็ได้ addHero.setValue(NSNumber(int:Int32(Label.text!)!), forKey: "heros")

//////////////////// ข้อมูลเพิ่มเติมอื่นๆ ทีมงาน Apple พยายามจะนำ Objective-C รวมกันกับ swift เพื่อให้สามารถทำงานได้สมบูรณ์กับ swift api จึงเป็นที่มาของ opensource และเร็วๆนี้เนื่องจากเหตุนี้จึงเป็นที่มาของ swift 3.x ที่กำลังจะมาถึงจุดประสงค์คือเอา Objective-C มารวมกับ swift api จบการรายงานเพียงเท่านี้จ้า ^^

Q: พี่หลงครับ PickerView ผมกำหนดให้มันโชว์ค่า โดย +ไปครั้งละ 0.1

A: condition ->


 let xx = String(format: "eakkasit : %.2f", Double(i)!) widthHeadOption.append(xx)

เพิ่มสำหรับคนทั่วไปเกี่ยวกับ PickerView

Q: ผมเอา Code จากรุ่นพี่มาแก้ไข AutoLayout มันไม่ทำงาน

A : interface builder document ต้องติ๊กถูก use Size Classes + use auto layout

 interface builder document ต้องติ๊กถูก use Size Classes + use auto layout

interface builder document ต้องติ๊กถูก use Size Classes + use auto layout

เพิ่มสำหรับคนทั่วไปเกี่ยวกับ PickerView


 

Q: Core Data  คืออะไรทำไมต้อง Core Data ?

A:

ขอปูพื้นให้นิดหน่อยก่อน ขอแบบสั้นๆนะ ทำไมต้อง Core Data เนื่องจากบางคนไม่คุ้นเคยกับ ชุดคำสั่ง SQL ที่ใช้กันอยู่ทั่วไป Core Data จึงเข้ามาช่วยแก้ปัญหานี้เลยลืมมันไปได้เลยสำหรับชุด SQL ***sql , MySQL , Oracle Etc…. สำหรับ IOS จะใช้ SQLite เป็น default ( ส่วนใหญ่ ) Core Data จะช่วยในการ map พวก object กับ table ใน database แบบ CRUID โดยไม่ต้องรู้คำสั่ง SQL เลย ***CRUID create read insert update delete และเราต้องรู้จักคำว่า Core Data Stack หากไม่เข้าใจคำนี้อธิบายยาว ถ้าต้องการบอก ค่ำๆจัดให้ตอนนี้ทำงานอยู่ไม่สะดวกนะ 🙂 ส่วนที่เราถามนะมันเป็นหัวใจของ Core Data หัวใจของ concept มันคือการ Managed objects (มีตัวเอสสักเกตุ ^^) และต้องเข้าใจก่อนว่า class กับ subclass มันต่างกันยังไง การสืบทอดคืออะไร ตอบคำถามละ

ใช้ NSManagedObject ดีกว่า ช่วยในเรื่องของ performance และ ลดขนาด memory อีกทั้งยังสามารถ relationship รวมถึง map database ได้เช่น sqlite เป้นต้น และทำไมต้อง NSManagedObject เพราะ อืมม ... อธิบายง่ายๆว่า บาง entities ใช้งานบ่อยๆซ้ำๆสู้เราสืบทอดมันมาเองเลยดีไหมมันจัดการได้ง่ายกว่า (งงไหม) ลองฝึกเขียน class และสืบทอด class ดูคล้ายๆกัน ส่วน code ที่ส่งมารูปที่สองเป็นการจัดการกับพวก context เป็นการเตรียม insert ทั่วไป หัวข้อ CoreData มันอธิบายยาวต้องสอนเขียนแล้วแสดงให้ดูด้วยถึงเข้าใจได้ง่าย อย่าหยุดที่จะเรียนรู้ลองศึกษาเพิ่มเติมดูที่ https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/index.html

 

Q: Core Data Stack คืออะไรครับ ?

A:

Core data Stack -------------------------

จำย่อๆไว้แบบนี้ MPMP หรือ m2p2

-Managed Object Context

-Persistent StoreCoordinator

-ManagedObject Model

-Persistent Store

@Managed Object Context พื้นที่เก็บหน่วยความจำชั่วคราวมี object ที่มีความสำพันธ์กับที่จัดเก็บข้อมูล โดยจะจัดการกับ object โดยสร้าง หรือ return ค่า ทั้งนี้เราจะใช้ core data framework ซึ่งเป็นส่วนประกอบหนึ่งใน core data stack Managed Object Context เราจะใช้มันบ่อยมาก โดยทั่วไปแล้วเวลาเราดึงข้อมูลมาแล้ว save เจ้า object ลงในที่จัดเก็บข้อมูล ดังนั้น context จึงเป็นส่วนประกอบแรกที่เราต้องรู้จัก

@Persistent Store Coordinator อย่างที่รู้ๆกัน sqlite จะใช้เป็นที่จัดเก็บข้อมูล ใน ios โดยพื้นฐานแบบว่าใครๆก็ใช้กันอ่ะ ส่วนเจ้าcore data บอกมาสามารถจัดการกับพื้นที่จัดเก็บข้อมูลที่หลากหลายได้และมีหลาย entities เป็นต้น ตัวช่วยสำหรับช่วยจัดเก็บข้อมูลจะจัดการ persistent object store แล้ว save object ลงที่จัดเก็บข้อมูล

@Managed Object Model - ต้องถามก่อนว่ารู้จักคำว่า Schema ป่าว ? ไอ้หัวข้อเนี่ยมันคือ database Schema นั้นหล่ะ เจ้าschema มันจะเป็นตัวรวบรวม collection ของ objects หมายถึงมันตะกละ มันจะเอา object ทั้งหมดมาเก็บไว้ที่มัน 5555 ( ใน xcode เรียกมันว่า entities คุ้นม่ะ)

ยกตัวอย่างนะ ในส่วนของ xcode - managed object model เจ้า xcode มันจะกำหนดให้เราใช้ file นามสกุล ( extension หมายถึงนามสกุลของไฟล์) .xcdatamodeld (อ่านง่ายๆจำง่ายว่าแอ๊คโค๊ดดาต้าโมเดลดี. ) 555 ทั้งนี้เราสามารถใช้ visual editor ในการกำหนด entities. และ Attributes ได้รวมถึง relationshipsด้วยนะ (ความสัมพันธ์) มาถึงตรงนี้คิดว่าเราน่าจะผ่านมาหมดล่ะ #จริงๆ

สุดท้ายละ

@Persistent Store มาสั้นๆได้ใจความ มันคือ database ที่เราใช้เก็บของมูลหรือเรียกว่า default database จะเป็บแบบ binary หรือ xml ก็ได้. ยกตัวอย่าง SQLite เป็นต้น

 จบการ present สำหรับ Core Data Stack

Q : อยากทำเงินเยอะๆกับการสรา้ง App เรียนรู้ Android  หรือ IOS ดีครับ ?

A : ถ้าพูดถึงตลาดที่จะทำเงิน ควรฝึก ios แต่ถ้าต้องการ mass awareness ก็ android แต่ทำเงินได้ยาก คนไม่ค่อยกดซื้อกันยกเว้น หนัง เกม

Q: ผมมีปัญหาในการดึงวันเวลาภาษาไทยมาแสดงผลไม่ทราบว่าเค้าทำกันยังไงครับ ?

A:

อื่นสำหรับผู้เรียน

1)เรื่องของเวลาที่shift down มันเป็นเพราะ NSDate มันจะเก็บในรูปแบบของUTC ( เวลาของเมืองนอก) มันจึง shift down มา1 วัน วิธีแก้มีหลายวิธีมาก เช่น ปรับค่า timezone ของไทยดูใน calendar ไทยจะเป็น+7 หรือ สร้าง extension อยู่นอก class มาใช้ ในการแปลงแต่ไม่นิยม หรือทำการเพิ่มเวลาเข้าไปด้วย function ขื่อว่าdateByAddingTimeInterval (ใช้กันเยอะ) อีกวิธีที่คือให้เปลี่ยนเป็นเก็บแบบ string แทนไม่เป็นแบบ date แล้ว เอาแค่นี้พอเดี่ยวงง

2) เวลานำมาใข้งานหลังจัดการกับ nsmanageobject เรียบร้อบจะได้ object ตาม attribute ที่เราระบุใน xcodedatamodeld เวลาใช้ลงใน textfield ลองใช้ fuction String แปลงก็จะสามารถนำเวลามาแสดงได้

3) สุดท้ายที่เรากดสลับไปมาแล้วมาบ้างไม่มาบ้าง ลองดูในส่วนของการ resign คืนค่ากับ พวก touch id เราทำอะไรผิดพลาดหรือขาดอะไรไหม หรือลองใช้ view. Bottom ควบคุมดู

Q : เราจะส่งข้อมูลย้อนกลับยังไงครับผ่าน ViewController ?

A :

ส่วนคำถามที่ทำไม่ได้เรื่อง pass data ระหว่าง viewController นั้นเราต้องใช้ protocol delegate แบบ nsobject ตัวอย่างเช่นสร้างที่ twoviewcontroller ที่สองว่า Protocol Delegate { func update(data: String) } เวลาใช้ var delegate: Delegate? self.delegate?.update(self.data) และใน view ที่ย้อนกลับ onviewcontroller

extension oneviewcontroller: Delegate { func update(data: String) { self.internalData = data // do something อะไรก็ได้หลังจากได้ข้อมูลมา } } ลองดูนะ

 

Q : ผมสามารถสร้าง Hardware ขึ้นมาเองแล้วไปเชื่อมต่อกับ iPhone ได้ไหม ?

A : ได้แต่ต้องมี MFI license MFi Program - Apple Developer

 

Q : อยากรู้ว่าเราจะตรวจสอบ  status ของ bluetooth ได้ยังไงครับ

A:

 self.centralmanager = CBCentralManager(delegate: self, queue: nil) // DidUpdateState func centralManagerDidUpdateState(central: CBCentralManager) { // switch (central.state) { case .PoweredOn: print("Bluetooth ON") centralmanager.scanForPeripheralsWithServices(nil, options: nil) // scan() break case .PoweredOff: print("Bluetooth OFF") // stop() break default: break; } } 

Q : ผมอยากจะรัับจากจาก Arduino ไม่ทราบว่าเราจะใช้ function อะไรครับ ?
A:

func peripheral(peripheral: CBPeripheral,didUpdateValueForCharacteristic characteristic:CBCharacteristic,error: NSError?)

อื่นๆ เพิ่มเติม

ใช้ library -> softwareserial

#include <SoftwareSerial.h>

สร็จก็ประกาศ pin ให้ถูก RX, TX พวก communication pins

 SoftwareSerial dev(3,2); // เป็นต้น
ส่วนเวลารับก่อน characteristic.value

Q : เราสามารถแปลงค่าจาก Int เป็น Hex ได้ไหมครับ

A:
&amp;amp;lt;/div&amp;amp;gt;
&amp;amp;lt;div class="_1yr"&amp;amp;gt;

extension Int {

var asHex: String {

var temp = self print(temp)

var result = ""

let digits = Array("0123456789abcdefghijklmnopqrstuvwxyz".characters)

print("digi : ",digits)

while (temp &amp;amp;gt; 0) {

print("temp before &amp;amp;amp; :",temp)

print("Int value: ",Int(temp &amp;amp;amp; 0x0f))

result = String(digits[Int(temp &amp;amp;amp; 0x0f)]) + result print("result :",result)

temp &amp;amp;gt;&amp;amp;gt;= 4

print("temp: ",temp)

}

return result }

}

15678.asHex print(2 &amp;amp;amp; 0xef)

&amp;amp;lt;/div&amp;amp;gt;
&amp;amp;lt;div class="_1yr"&amp;amp;gt;

 

Q :แล้วเราจะรู้ได้ยังไงหรอครับว่าเจ้าตัว arduino มันส่งมา กี่บิทกี่ไบท์

 แบบ 16bit let datax:NSData = characteristic.value let 16bit = UnsafePointer&amp;lt;UInt16&amp;gt;(datax.bytes)[0] ถ้าอยากดูค่าเวลาแสดงใช้ String(16bit, radix:16) let check:Bool = (datax &amp;amp; 0x0001) == 0 let mapping = (16bit &amp;gt;&amp;gt; 4) &amp;amp; 0x0fff let tempolary:Double = Double(mapping) 

Q : Realm เก็บข้อมูล  Database ไว้ที่ไหนครับอยากรู้ ขอบคุณครับ แล้ว Realm Brower ใช้ยังไง ?

A :  ตัวอย่างของ Path => /Users/ ชื่อเครื่อง /Library/Developer/CoreSimulator/Devices/<UUID ของ simulator>/data/Containers/Data/Application/<application-uuid>/Documents/default.realm หา default.realm ให้เจอละลากไปใส่ realmbrower แบบลากวางจากนั้นยำมาม่าตามชอบ

Q : ผมไม่เข้าใจตรง priority มันแตกต่างกันยังไงอะครับ Low high require ?

ตรง priority มันแตกต่างกันยังไงอะครับ Low high require

ตรง priority มันแตกต่างกันยังไงอะครับ Low high require

A :  ประชุมกับ acommerce อยู่กลับถึงตอบจ้า

ที่เราต้องรู้ก่อนคือ constraints , multiplier (หรืออธิบายว่ามันคือ scale factor) , priority , constant มาดูสูตรง่ายๆก่อนเช่น A = ( B * multiplier ) + constants

A กับ B คือ items เช่นสมมุติว่ามี ปุ่ม 2 ปุ่มละกัน ความหมายของสมการคือหากเราวางปุ่มA ที่ว่าเนี่ย สมมุตว่าวางในแนวราบ เจ้าปุ่ม B จะอยู่ห่างจากA เท่ากับค่า constants ที่กำหนดไว้ ส่วน multiplier จะสังเกตุเห็นว่ามันคูณกันอยู่ค่ามันจะเป็น ratio , demical ,% ไรงี้. เช่นหากเป็น 1 ก็ขนาดก็ปกติพอ 0.5 ก็หารสองเป็นต้นมันก็จะลดขนาดลงมาครึ่งนึง ( 1/2)

สุดท้ายสำหรับคำถามเรื่อง priority

ทำไมมี high low require มันต่างไง มีไว้ทำไร ทำไม xcode มันต้องทำให้เราๆงงกันด้วย ค่า priority มันมีค่า default คือ 1000 มันใส่ได้ 1-1000

ทำไมต้องมี High กับ low ก็เพราะเขาอยากให้เราเลือกใช้งานสะดวกมากขึ้น

สรุป

มันเป็นการจัดการระหว่าง items โดยปกติแล้วไม่จำเป็นต้องไปยุ่งเกี่ยวอะไรกับมันเลย.-> มีต่อ

แต่หากเราจัดการระหว่าง items เข่นเราย้ายมันหมุนเครื่องแนวตั้งบ้าง แนวนอนบ้าง หรือโยนเล่นให้มันตีลังกา 55555

มันก็จะ overlap หรือโดนซ้อนทับ หรือหลุดออกนอกจอไปเลย เออตลกดีทำไมต้องให้เราใช้ยากด้วยหว่าา หากเกิดปัญหานี้ขึ้นมา

เราจึงค่อยไปกำหนดค่า prioriry ให้ต่ำลง เพื่อลดความน่าสนใจเกี่ยวกับความห่างของระยะวัตถุ

ใน xcode เวลาทำงานกับพวก layout เราจะไม่ใช้หน้าจอเพียงหน้าจอเดียวในการทำงาน มันเสี่ยงที่เราจะทำผิดพลาดได้  ต้องทำใน storyboard ละหั่นอีกจอดูหลายๆวิว

Concept ของมัน What you see , what you get มันจะยืดไม่ยืดอยู่ที่เราจัดการ รวมถึงกำหนดเส้นขอบแนวซ้ายรวมถึงส่วนถึงด้วยเพื่อควบคุม

Q : ผมต้องการจะใช้งาน tableview ใน viewcontroller ผมต้องทำ protocol หรอครับ http://stackoverflow.com/questions/31673607/tableview-in-viewcontroller-in-swift

A :

ใช่เพราะ

 1) uitableview เป็น subclass ของ uiviewcontroller และการ display dynamic data จะต้องใช้ delegate กับ datasource โดย Data source ใช้สำหรับจัดการข้อมูลที่จะนำมาแสดงและDelegate จะจัดการพวก cell ความสูง กว้าง และอื่นๆ ที่เกี่ยวกับการแสดงผล โดยทั้งหมดที่ว่านี้จะต้องผ่าน controller logic เพื่อแสดงมายัง view พี่อธิบาย งงไหม 5555

Q : APNS คืออะไร

A:

APNs หรือ Apple Push Notification Service มันเป็นแค่ service ใช่ได้ฟรีแต่ต้องมี server เองหมายถึงเราต้องสร้าง server เอง

ส่วน provider รายอื่นๆเช่น parse ที่ปล่อย server มาฝห้ผู้บริการใช้หลังจากที่ปิด หรือ amazon และอื่นๆมีเยอะมากมายหลายจ้าวแล้วแต่เลือกเลยจ้าา มันต่างตรงที่
 1) เราไม่ต้องตั้ง server เอง แค่ไป register ละ copy codeมา2-3บรรทัด+เพิ่ม framework ก็ใช้งานได้ละ
 2) ส่วนนี้สำคัญเราสามารถจัดการ maintain ได้ง้ายเช่นระบบ report เป็นต้น
***สำคัญ ผู้ให้บริการแต่ละเจ้ามีทั้งฟรีและเสียเงินขึ้นอยู่กับ req

Q : เห็นหลายบริษัทรับสมัครงานกันถามถึงแต่ Obj-C ผมเลยอยากรู้ว่าผมควรจะมุ่งไปที่swift เลย หริอว่าจะไปฝึกobjective c ดีครับ

A : ความคิดเห็นส่วนตัว ที่เขาประกาศรับสมัคร objective-c เหตุผลแต่ละที่ไม่เหมือนกันดังนี้
1) เพื่อจะได้รู้ว่าผู้สมัครมีประสบการณ์ IOS มากกว่า 2 ปี.

2) แอฟที่บริษัทกำลังพัฒนาอยู่นั้นใช้ Objective-c เป็นหลักยังไม่มีแผนใช้ภาษา swift รวมถึง App เก่าๆที่บริษัทต้องดูแล

ส่วนจะมุ่งไปทางไหนนั้นขอบอกว่า swift ดีกว่าเรียนรู้ให้ละเอียดทุกอนู Objective-c จะค่อยๆหายไป เราจะสังเกตุเห็นว่า swift ในเวอร์ชั่นหลังๆอะไรที่ obj-c ทำได้หรือดีจะถูกโอนย้ายมาหมดที่ swift และเนื่องด้วย swift ทำงานกับ cpu gpu ได้เร็วกว่าในอนาคต ดังนั้นไม่มีเหตุผลเลยที่ ios developer รุ่นใหม่หลังจากนี้จะต้องฝึกใช้งาน objective-c อย่างจริงจังเพิ่มอีก 1 ภาษา

 เรียนรู้แค่ structure ก็พอ แค่นี้ก็พอแล้วจริงๆ อยากบอกว่า objective-c จริงๆ bug มันเยอะและ issue ในการ debug ก็ยังไม่ดีมันซับซ้อนทำให้เข้าใจยากสำหรับคนฝึกเรียนรู้แบบจริงจัง สรุป swift ดีสุด

Q : ขอทราบ Step การทำ push notification

A :

  1. Allow app ผ่าน xcode และใช้ APNS certificate ที่หน้าใน dashboard ของ apple developer

ในส่วนของ certificate --> Push Notification SSL Certificate

2)ในส่วนของ delegate ต้องใช่ uiusernotificationsetting และ registerusernotification พร้อมรับค่าremote devicetoken สำหรับ xcode รุ่นใหม่

วลารันเครื่องเราจะไปสร้างและขอ token จากที่ appid มันจะสร้างให้เลยเราจะพบมันอยู่ที่ dashboard

3) ทำการ generate pem file extention

4) ส่งไปที่ gateway ของ apple แบบ ssl เท่านั้น (ssl://gateway.sandbox.push.apple.com:2195)

Q : ช่วยดูปัญหากับการ mapping model ให้หน่อย

A :  (รูปจากผู้เรียนสำหรับคำถามนี้เยอะมากๆขอข้ามไปก่อนนะเรื่องรูป 55)


// // ViewController.swift // dev_database // // Created by Ekkasit on 6/24/2559 BE. // Copyright <i class="_4ay8">©</i> 2559 Eakkasit Tunsakool. All rights reserved. //

import UIKit import CoreData

class ViewController: UIViewController { var Ref_Customer = [Customers]() as [Any]

override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let app:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate let context: NSManagedObjectContext = app.managedObjectContext let entity = NSEntityDescription.insertNewObjectForEntityForName("Members", inManagedObjectContext: context) entity.setValue("lhong6", forKey: "name") do{ try context.save() }catch{ print("error") } do{ let Request = NSFetchRequest(entityName: "Members") let exec = try context.executeFetchRequest(Request) Request.returnsObjectsAsFaults = false if exec.count > 0 { for item in exec as! [NSManagedObject]{ print("Print item for key name: ",item.valueForKey("name")!) let abcd:AnyObject? = item.valueForKey("name") //var dcba = Ref_Customer.append(abcd as? Customers) print("use class : ",Ref_Customer.append(abcd)) print("print ref :",Ref_Customer) } } }catch{ print("error") } }

override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }

}

สรุป Unwrap ไม่สามารถใช้ได้กับ anyobject มันจะเตือน Exc i386 แต่หากใช้บางทีมี error วิธีแก้คือ

 var test = [Any]() self.test = some["demo"]! as [Any] 

update ต่อพรุ่งนี้จ้า...




There are no comments

Add yours