Rhed SHI: Bine ați venit la vezi seminar CS50 - Introducere în iOS. Vă mulțumesc tuturor că ați venit. Sper că ești la fel de incantati ca eu sunt de iOS. Anul trecut, am luat CS50 ca un al doilea de studentie, și am învățat practic iOS pentru meu final al proiectului. Și a fost destul de - bine, nu a fost ușor, dar există o mulțime de tutoriale de asistență online. Și eu chiar sper că cu această seminar, eu voi da voi un cap începe la dezvoltarea iOS Deci, în ceea ce privește dezvoltarea iOS, există două lucruri principale noi Vreau pentru a acoperi astăzi. În primul rând, limba - limba va fi în Objective-C. Vom auzi de fapt ceva cu adevarat interesant. Deci, vă puteți alătura tot Apple, comunitate de dezvoltatori și de a construi unele aplicații într-adevăr minunat. De asemenea, iOS 7 este frumos, sperăm, pentru unii dintre voi. Dar este controversat, știu. Și, în principal, ceea ce vreau să fac este ghidul te prin Objective-C, și, de asemenea, Xcode, care este integrat mediu de dezvoltare care va fi care lucrează în pentru iOS. Și astfel, doar un cuvânt pe Objective-C. Practic, este exact același ca și C, dar cu o mulțime de alte lucruri. Și astfel, mai strict, este de fapt o super-set de C. Deci, tot ceea ce ai se poate face în C, chiar acum, care este ca practic PSET 0 la 6, te se poate face în Objective-C. Deci, nu se simt frică despre acest nou limbă pe care ai de gând să învețe. Te-am acoperit deja o mulțime de ea, pentru că voi toți ați făcut C acest trecut semestru, cu excepția acum te duci pentru a avea o mult mai mult pentru a lucra cu. Și Mă duc să vă conducă, printr-o câteva exemple pentru a sublinia unele de diferențele cheie pe care le-am găsit au fost când foarte important am învățat Objective-C, anul trecut. Ei bine, de fapt, așa, un alt punct este, Objective-C este, în mod evident, orientat-obiect. Și vom discuta un pic despre ceea ce înseamnă că mai târziu. Practic, e ca și cum ai lucrat cu structs în acest PSET trecut, cu noduri și alte similare lucruri de genul asta. Cu excepția, în Objective-C, totul este un obiect, și vei fi trecând în jurul valorii de indicii pentru a obiectelor mai degrabă decât valorile înșiși. Deci, e doar ceva important de a păstra în minte. Deci, de ce nu începem cu câteva diferențele de sintaxă între C și Obiectiv-C? Vreau să subliniez # include, te știu, io.h standard, în C și C + +, cu versiunea Objective-C din care este # import, iar apoi un fel de fișier antet. În acest caz, ar fi UIKit, Știi, slash UIKit.h. Ar putea fi, de asemenea, stii, MKMapview pentru a vă reduce MKMapview.h dacă doriți de a face, cum ar fi, o hartă interiorul app dumneavoastră. Lucruri similare, cum ar fi faptul că. Deci, cel mai important lucru este să includă sa schimbat acum să importe. Dar ideea rămâne. Ai de gând să fie importul un fel de fișier header în programul tău. De asemenea, vreau să subliniez diferența între printf și NSLog. Cu toate acestea, așa cum am spus mai devreme, Objective-C este un super-set strict de C, ceea ce înseamnă că există printf în Objective-C, de asemenea. Dar, majoritatea oamenilor nu folosesc asta. Cei mai mulți oameni folosesc acest NSLog deoarece vă oferă o ștampilă de timp, și vom vedea l în acțiune mai târziu. Dar, este, în general, o mai util modalitate de a imprima variabile. Și eu, de asemenea, doresc să sublinieze că NSLog ia în la fel Valorile substituent ca printf o face - astfel% d este pentru un int, % F este un float. Cu toate acestea, eu nu vreau să evidențieze acest lucru foarte ultima - NSLog% la semn - care este un substituent pentru un obiect. Și, după cum am spus mai devreme, Objective-C oferte destul de mult cea mai mare parte din obiecte, și astfel aceasta va veni în uz atunci când doresc să imprime, poate, poate o NSArray, sau NSDictionary, sau un NSString. Deci, de asemenea, observa că, în NSLog nostru afirmație, avem un la semn în față citatului - că este pentru a semnifica faptul că siruri de caractere, acum, în Objective-C sunt obiecte. Ei nu mai sunt pur și simplu stele char. Sunt obiecte și sunt tratată ca atare. Deci, este foarte important ca, atunci când utilizați NSLog este nevoie într-o NS șir, ceea ce înseamnă că veți avea să includă o puțin în fața ta ghilimele. Și de aceea vedeți, aici, în toate Funcția mea cheamă la acest NSLog, am au o la în fața citate, chiar deși% d și% F sunt toate la fel de la C. Orice întrebări până acum? Voi încerca să treacă prin acest rapid, astfel că putem avea mai mult timp la locul de muncă cu Xcode și Objective-C, așa că voi putea obține mai mult familiarizat cu ea. Apoi, vreau să subliniez ceva conceptual de important. Deci, în C, cele mai multe lucruri sunt funcții. Facem un apel de funcție. Noi declarăm funcții în acest fel, cu revenirea primul tip, atunci nume de funcție, între paranteze, și apoi indiferent de argumente și de tipul de aceste argumente ne-am dori să treacă inch Și Objective-C, deoarece totul este un obiect sau o clasă - atât de clasă și obiect sunt doi termeni care sunt în mare parte sinonim cu altele, așa că am putea să le utilizați interschimbabil pe parcursul seminarului. Dar, veți vedea că avem metode de Obiectiv-C și nu la funcții. Și metode fac parte din obiecte. Deci, doar ca, poate să ia de exemplu, nod - tip nostru [inaudibil] nod din PSET 6 sau 5 - avem cuvântul, proprietatea, sau următorul nod indicatorul. Metodele sunt pur și simplu funcții în interiorul de un fel de structură. Deci, în acest caz, structura va fi obiect, apoi metoda este ceva ce aparține unui obiect. Și acest lucru este modul în care s-ar declara, un fel de, o metodă. V-ar începe cu, din nou, revenirea tip - deci, am încercat să culoare cod cuvintele cheie aici, pentru ca voi se poate vedea, cel puțin, formatarea similarități între funcția Declaratii metodă. Deci, începe cu, știți, o revenire tip - în acest caz, este o matrice, sau un pointer NSArray - și apoi ai această metodă. Și atunci, ce e interesant aici este că, în loc de a avea paranteze, am au aceste două puncte. Și apoi, în fața argumentelor noastre, ne-am pus, din nou, în paranteze tipul a argumentului nostru. Deci, acum am încercat să facă comparație între, știi, n și număr, pentru că sunt ambele int, cum ar fi. Apoi, cealaltă este un tip NSUInteger. Și apoi, cu Objective-C, atunci când doresc să aibă mai multe argumente în clauza metoda, tu, un fel de, separa-le un fel de acest lucru - Eu nu sunt destul de sigur cum să-l descrie, dar acest lucru este un bun exemplu de modul în care poate avea mai multe argumente acolo. Ai putea, desigur, doar în totalitate ignora de colon andArray NSArray matrice dacă ai vrut doar o metodă care să ia într-un singur argument. Da, întrebare. Audiența: Sunt atât NSUInteger și NSArray argumente care pot fi luate în în NSArray? Rhed SHI: Da. Deci, lasă-mă să explic. Deci, da. Deci, întrebarea a fost sunt NSUInteger și NSArray * tipuri de argumente, și asta e corect. Deci, vrei mereu să precizeze ce Tipul de argument este. Și aici, eu încerc să vă prezint la o parte din sintaxa și Vocab de Objective-C, astfel încât acestea sunt tipuri reale că veți fi de-a face cu. Și, după cum veți observa, tablouri nu mai sunt, un fel de, suport lucruri simple. Sunt obiecte. Deși, dacă mergem la următoarea diapozitiv, putem vedea că putem tare-un cod NSArray în Objective-C cu pur și simplu un simbol la în fața paranteze. Eu nu sunt, de fapt, destul de sigur dacă I punct de vedere sintactic hard-coded o matrice corect pentru versiunea C, dar asta e ar trebui să fie într-o gamă C. Deci, acesta este modul în care ar fi, stii, poate folosi funcțiile sau Metodele pe care le-am creat mai devreme. Corect? Deci, acest lucru este în cazul în care ne declarăm nostru funcția și metoda noastră. Și acum vrem să le utilizeze în programul nostru, iar acest lucru este cum ne-ar face-o. Deci, în C, le-ar fi, știți, probabil, o bool b, și l-ați setat pentru a egală funcția, și apoi treci în argumentele. În Objective-C, este destul de cam același lucru. Ai NSArray * my_array, și este mergi la egal - acum, singura Diferența aici este acest lucru obiect, pe care le-am evidențiat în galben, și după cum puteți vedea, în C, nu e nici un alt cuvânt galben. Și pentru că metodele aparțin cu un anumit obiect. Deci, de aceea am nevoie pentru a avea un obiect că, un fel de, solicită această metodă pe numărul de zero, și apoi NSArray a, b, c, d. Orice întrebări cu privire la asta? Vom vedea aceste concepte în acțiune destul de curând, când vom merge într-un demo. OK. Acum, vreau să vorbesc un pic scurt despre Xcode 5, care este mediu de dezvoltare integrat că veți fi de lucru cu. Știu o mulțime de tine, sau unii dintre voi, nu au Mac-uri, care este o problemă deoarece Xcode nu este disponibil pentru Windows și PC. Nu mă întreba de ce, dar probabil - Da, corporative. Oricare ar fi. Dar, oricum, așa că, îmi cer scuze dacă unele dintre tu nu trebuie să descărcați un fel de mașină virtuală pentru Mac în Pentru a rula Xcode 5. Dar aceasta este o destul de puturos software de utilizat. Și așa, înainte de a se arunca cu capul în nici un fel de demo, vreau doar să-ți arăt un imagine a ceea ce arata ca in Xcode dvs. fereastră, și apoi, de asemenea, vorbesc despre ce acest spațiu este tot. Deci, e un fel de a învăța cum să utilizați Microsoft Word, cu excepția pe care doriți să să se familiarizeze cu toate lucruri diferite pe care se întâmplă aici. Deci, în primul rând, vreau să vă subliniez la bara de instrumente în partea de sus. Veți vedea că, în partea de sus, veți avea numele de fișier - sau, de fapt, numele dvs. de proiect și apoi numele fișierului. Ia act de joc și butoanele de oprire. Acestea sunt cele pe care le veți fi folosind pentru a rula aplicația pe simulator - simulator iOS. Acest lucru vine în mod automat cu Xcode 5, astfel încât să nu trebuie să vă faceți griji cu privire la descărcarea de un fel de simulator. Trebuie doar apăsați butonul de redare și apoi se execută aplicația. Și poți să te joci cu tine, și veți vedea cum funcționează mai târziu. Apoi, în centrul, desigur, este în cazul în care toate de cod frumos este de gând să meargă. Și apoi, pe partea stângă, veți au aceasta, un fel de, dosar - navigare - și apoi, veți vedea, de asemenea, că, de-a lungul cu pictograma folder, există o grămadă de alte icoane acolo, care vor fi utile mai târziu. Și apoi, pe partea dreapta este un utilitar zonă în care se poate lucra cu unele din obiectele și specifica, tu stiu, ce ar trebui să fie de culoare, ceea ce font de text ar trebui să fie, et cetera. Deși, tot ceea ce faci în zona de utilitate, puteți face în cod, de asemenea. Și așa, voi merge prin intermediul a două exemple de utilizare, pur și simplu, nici un cod de la toate - sau cod foarte minim - versete tot codul, doar pentru ca voi știi ce poate și ce nu se poate face în Xcode și Objective-C. Și apoi, în final, din partea de jos, aveți zona de depanare. Deci, nu mai trebuie pentru a rula GDB, et cetera, pe programele. O face în mod automat pentru tine. Și puteți, de asemenea, să imprimați chestii de acest domeniu. Deci, de fapt, mai târziu, vom merge prin mario.c, dacă voi mai aminti că, în Xcode. Astfel că ar trebui să fie distractiv. Și apoi, doar să-l aducă înapoi la Objective-C, vreau să subliniez ceea ce se poate face cu dacă declarațiile. Deci, știți, pentru că Objective-C este un superset de C, tot ceea ce faci este, literalmente, la fel ca și C. Doar au mici diferențe. Deci, veți observa sub forma unei dacă afirmație este tot la fel - ai în cazul în care, și atunci ai paranteze cu o condiție interiorul, ea și apoi acolade pentru orice vrei să faci în interiorul de acolo. Cu toate acestea, am vrut să pun acest slide-up aici, pur și simplu pentru a ilustra faptul că, pentru că avem de-a face cu obiecte de acum, noi va trebui să folosească aceste lucruri numit ca, este egal cu string, care este, coincidență, o metodă de a șir sau un obiect NSString. Deci, cuvântul, în acest caz, este un NSString obiect, si are o metoda numita este egală cu șir, iar apoi vom trece într-un șir de hard-coded pentru a vedea dacă acestea sunt egale unul cu altul. Orice întrebări până acum? OK. Și, eu vreau să merg peste o declaratie de asemenea. Deci, de exemplu, dacă am vrut să bucla pe lungimea unui șir în C, această ar trebui să fie familiar pentru tine. Și, în Objective-C, eu nu vreau pentru a sublinia acest lucru, un fel de, metoda numita numărul. Ei bine, de fapt, lasă-mă să ia doar că înapoi. Numărătoarea este o metodă de matrice. Cu toate acestea, este mai precis un proprietate de matrice, care este motivul pentru care se poate utiliza notația punct. Dar eu nu vreau să intru în prea mult de chestia asta conceptual, vreau doar să-ți arăt cum ar arata lucrurile ca in Objective-C comparativ cu C. Și, de asemenea, vreau să subliniez faptul că chiar dacă am fost folosind NSUInteger în fața tuturor i lui mele în Objective-C, puteți utiliza, de asemenea, int, pentru că este int total valabil în Objective-C, de asemenea. Da? Audiența: Este doar stilistică, sau este - Rhed SHI: Da. Deci, după cum veți vedea - astfel, problema a fost că este doar o chestiune stilistică. După cum veți vedea, am o, un fel de, stele lucru asterisc în jos în partea de jos, și care link-ul te duce la un Stack Overflow formează, în cazul în care cineva explica diferența dintre un int în NSInteger și un NSUInteger. Și astfel, puteți citi despre asta mai târziu. Aceste slide-uri vor fi, desigur, disponibile pentru tine. Să vedem. Bine, minunat. Deci, acest lucru este de asemenea inclusă în diapozitiv pentru că am crezut că acest lucru a fost o mare site-ul web pe care le introduce la Objective-C sintaxa. Deci, de fapt, de ce nu ne-am muta la Chrome și a verifica afară acest site? Corect. Deci, ceea ce vreau să vă arăt baieti aici este această imagine. Deci, aceasta este, un fel de, va fi ceea ce ai de gând pentru a vedea în interiorul de orice Fișier Xcode. De fapt, de ce nu ne ia doar o moment pentru a, un fel de, să ia această inch Deci, această carte - care este obiectul care avem de a face cu. Și apoi, e, evident, va fi moștenit de la un alt obiect, dar nu trebuie să vă faceți griji despre asta. Și apoi, ea, poate, a unele variabile membre. Cel mai important lucru pe care vreau să-ți arăt este metodele de exemplu, aici. Deci, metodele de instanță sunt notate prin acest semn minus. Și apoi, așa cum veți observa, suntem deja încep să vadă paradigma pentru declarația metoda, nu? Tipul de retur, numele metodei, și apoi tipul de argument, și apoi numele argument. Și acest semn minus înseamnă că este o Metoda exemplu, ceea ce înseamnă că aceste metode sunt disponibile numai la obiecte care au fost instanțiate. Pentru contrast care, metode, cu un plus semn în fața lor sunt de clasă metode, ceea ce înseamnă că puteți apela aceste metode, chiar dacă nu aveți un obiect creat încă. Deci, de un exemplu clar, NSString este un clasa. Și puteți apela, de exemplu, Metodele de clasa pe NSString - real, cum ar fi, cuvânt NSString. Cu toate acestea, în scopul de a utiliza aceste metode, de fapt, au nevoie pentru a crea un șir. De exemplu, șir stele NSString egal în ghilimele, salut lume. Și apoi, puteți folosi aceste metode - Metode de exemplu - pe care șir hello world. Deci, care este diferența dintre Metode de instanță și metode de clasă. Si, ne-am acoperit doar această parte. Proprietăți sunt un alt lucru, care sunt în interiorul obiectelor, practic. Și le declara cu la cheie de proprietate. Aveți aceste opțiuni, aici, pe care o voi explica mai târziu, când vom merge într-un demo. Da? Hi. Audiența: Ai putea mări, te rog? Rhed SHI: Oh, da. Scuze. Audiența: Mulțumesc. Rhed SHI: Asta ar trebui să fie mult mai bine. Audienta: Da. Mulțumesc. Rhed SHI: Da, vă rog să îmi amintesc dacă Am uitat pentru a mări sau micșora. Deci, asta e tot ce am vrut să-ți arăt de - Uau, asta e mult - pentru acest site. Deci, să ne întoarcem la slide-uri noastre. De fapt, acum haideți să o clipă să se scufunde într-un demo. Deci, vom începe cu o nou proiect Xcode. Deci, dacă veți deschide Xcode pe toate utilajele dumneavoastra, ar trebui să vă ia ceva pagină în care se spune, ca, fie deschis la un proiect existent sau un nou proiect, și ar trebui să faceți clic pe un nou proiect. Și apoi, ar trebui să ia te la acest ecran. Da? Audiența: Dacă nu avem un Mac, avem doar un fel de calmezi? Rhed SHI: Sau uite pe cu cineva, da. Da. Vă puteți relaxa, de asemenea. OK. Deci, ceea ce am de gând să facă în primul rând, acum, este, de fapt, vom face o singură cerere vedere. Deci, dacă veți observa, ceea ce e minunat despre sprijinul Apple pentru Xcode și dezvoltatori este că aveți o mulțime de template-uri pentru a lucra cu deja. Ai putea, de exemplu, face, o aplicare master-detaliu. Puteți face un joc - și, de fapt, eu nu voi intra în jocuri, pentru că jocurile sunt o altă poveste pentru dezvoltare iOS. Și ei un fel de separat, asa ca nu va merge în care. Apoi, v-ați bazat pe pagina aplicații. Aveți o aplicație tab - astfel ca, de exemplu, Bank of America probabil, are, ca, un app cu file. Sunt cei care aveți butoanele de la partea de jos. Și apoi, ai un kit de joc Sprite. Sau se poate lucra de la zero, care este ceea ce vom face mai târziu. Dar hai, în primul rând, începe cu o singură cerere vedere. Apoi, se va cere un nume de produs, și putem face doar de test. Numele organizației - astfel, numele organizației, Compania de identificare - acestea sunt importante, dacă ai de gând pentru a pune app pe App Store. Altele decât că, codul se va rula absolut în regulă, fără acest lucru. Acest lucru va fi important dacă vrei - deci, în sine, cum ar fi, pune aplicația pe dvs. de telefon sau ceva, și de testare l, știți, în viața reală - acest lucru va fi important. Acest lucru tinde să fie, de obicei, asociate cu un fel de cont de dezvoltator cu Apple. Și așa, eu știu, probabil, o mulțime de tine nu va avea nici conturi de dezvoltator. Știu că universitatea are unul. Cred că CS are unul. Dar, puteți să-mi e-mail și voi încerca pentru a seama de asta pentru tine. Dar acum, am pus doar în unele lucruri substituent aici. Și puteți, desigur, aici, alegeți dacă doriți să fie exclusiv în iPhone, în iPad, sau ambele - aplicație universală. Deci, de acum, să facem universal, doar pentru a vedea ambele părți ale platformei. Să vedem. Deci, chiar acum, am de gând să salveze se într-un fel de dosar. Nu conteaza unde - ai puteți muta întotdeauna mai târziu. Și, acum, suntem aduși pentru proiectul nostru Xcode. Nu mi-aș face griji despre toate astea. Aș sugera nu atinge nici de acest lucru, dacă nu știi exact ce ce faci. Deci, toate acestea, doar ignora cea mai mare parte. Nu va fi nevoie să-l atingă, și dacă te pui niște lucruri aici, devine un pic complicat. Deci, de ce nu ne uităm în fișierele de pe partea stângă în navigatorul nostru. Aici, avem AppDelegate.h. Avem AppDelegate.m Deci, cum veți preaviz, am antet fișiere, care se încheie în dot h, și ne-am punere în aplicare - de fapt, lasă-mă să zoom inch OK. Lasă-mă să zoom inch Corect, așa că le-ați antet fișiere și aveți fișiere de implementare. De fapt - OK. Acesta este un pic ciudat, dar să poarte cu mine. Apoi, pentru că ne-am ales un singur punct de vedere cerere, vom fi de lucru cu storyboard. Deci, storyboard este ceva ca Apple a venit cu pentru a ajuta cu adevărat dezvoltatorii prototip rapid aplicațiile lor. Deci, acest lucru este în cazul în care puteți crea o aplicație fără a scrie o o singură linie de cod. Cu toate acestea, în nostru singură vedere cerere, facem, desigur, au un fișier pentru punctul nostru de vedere, care este un controler vedere. Deci, avem antet și fișier de punere în aplicare, aici. Și, am de gând pentru a micșora acum, deoarece vom avea nevoie pentru a lucra în rezumat. Deci, aici e punctul nostru de vedere. Dacă ne-am, pur și simplu, rulați aplicația chiar acum, nu e prea interesant se întâmplă. Deci, veți vedea acest ecran alb. OK? Și, în zona noastră utilități, putem adăuga o grămadă de lucruri diferite pentru a-l. Deci, atunci când ai de a face cu ecrane în iOS, vedere controlorii sunt obiecte care încapsulează, un fel de, opiniile dumneavoastră. Deci, un controler vedere întotdeauna are o proprietate numita vedere. Și acest punct de vedere, de obicei, conține, stii, ceea ce Vreau să văd pe un ecran. Deci, ei bine, hai să începem prin a pune, poate, poate o etichetă. Deci, să punem o etichetă pe acolo - stick-l la mijloc. Deci, acum că am făcut clic pe eticheta, am poate merge în inspectorul de proprietăți și începe să schimbe valoarea sa. Să-l numim CS50 Culori. Și, eu pot schimba, de asemenea, fontul. Astfel, în loc de sistem, care este a face implicit, putem face un obicei. Ne poate schimba - știți, UltraLight, face 32. Și apoi, ne putem face cutia noastră mai mare. Audiența: Credeți că puteți mări în doar un pic mai mult, poate? Rhed SHI: Da? OK. Audiența: Doar atingeți? Rhed SHI: Să vedem. Face acest lucru? Audiența: trece Doar Xcode? Rhed SHI: Sigur. OK. Minunat. Audiența: Eticheta sub? Eticheta? Rhed SHI: Ce-i asta? Audiența: Ce drop-down a fost sub eticheta? Rhed SHI: Deci, întrebarea a fost, ceea ce drop-down a fost sub eticheta? Acesta ar trebui, pur și simplu, fie sub aici. Cred că e un lucru cub. Dar, de obicei, acest lucru este implicit - Mă duc jos aici până când am găsi o etichetă. Da. Deci, acum, ne-am eticheta nostru. Să-l centru. Xcode și ne dă instrucțiuni pentru obiecte de centrare. Deci, acum să executați din nou codul nostru. Acolo mergem. Deci, ne-am CS50 Culori. Și acum, hai să punem un buton pe acolo, nu? Pentru că vrem să facem această interactiv. Deci, hai să punem un buton aici. Și vom numi acest buton "robinet aici pentru a continua. "Vom centru, de asemenea, De fapt, este deja centrat. Da. Deci, acum avem un buton. Și dacă vom rula din nou, vom pentru a avea un buton de drăguț aici. Și eu pot faceți clic pe el, dar nu se face nimic, pentru că nu am făcut ceva cu butonul încă. Deci, haideți să creeze un alt punct de vedere, nu? Deci, să spunem că vreau să atingeți care buton și vreau să du-te la o altă pagină - un alt punct de vedere. Ceea ce am de gând să faceți este, eu pot crea un controler de vedere, corect? Acum voi faceți clic pe butonul meu, și apoi, cel mai important lucru este, am de gând să faceți clic pe - sau - da, de control apăsați pe tastatura mea. Control. Faceți clic pe butonul, și apoi trageți. Deci, nu uitați să țineți apăsată tasta de control. Hai să facem asta din nou. Deci, ține de control, faceți clic și trageți pentru ceea ce vrei sa faci. OK. Și acum, am mai multe opțiuni aici. Pot fie împinge, sau pot face o modal, sau pot face un obicei. Push este numai în cazul în care aveți un controler de navigare. Chiar acum, primul nostru de vedere controler nu este în interiorul de orice controler de navigare. Deci, controlerul de navigare este cea care vă oferă pe butonul înapoi pe app iOS cazul în care aveți, știți, că partea de sus, un fel de, bar gros - unde poti sa te duci înapoi, sau înainte, et cetera. Chiar acum, nu am asta. Și astfel, de aceea eu nu pot face o împinge. Deci, am făcut clic pe împinge accidental, aici. Și, de fapt, să executați codul, și ar trebui să accident de pe mine. Numai dacă apăs butonul deși, așa - dreapta. Deci, acest lucru este rău. Și, după cum puteți vedea, aici, ne-am au mesajul de eroare. Deci, "segues Push poate fi utilizat numai atunci când controler sursă este gestionat de către o exemplu de controlor de navigare UI. " Deci, pentru că aceasta nu a fost în interiorul unei controler de navigare, Nu am putut face asta. Deci, chiar acum, mă duc înapoi la folder, merge înapoi la storyboard. Audiența: Ce este navigarea controler, din nou? Rhed SHI: Deci, acum vă voi arăta. Să vedem. Deci, am de gând să faceți clic pe acest punct de vedere controlor, și apoi am de gând să merg până la produs - de fapt, nu, îmi pare rău - editor. Și am de gând să merg în - De fapt, am faceți clic pe ea? Nu. Acolo mergem. Am de gând să meargă în sus, în editor, du-te în jos de a încorpora în, și apoi de navigare controler. OK. Și, spațiul de lucru meu arata foarte murdar, asa ca hai sa curat asta. Deci, toate acestea sunt storyboard. Și în acest fel - OK, nu mai - Eu pot construi rapid ceva ca aceasta. Și apoi, acum pot merge înapoi, știi? Dar aceasta este un fel de plictisitor, nu? Deci, ceea ce vreau să fac este, nu vreau pentru a face, pur și simplu, o vedere controler. Să spunem că am vrut să fac de fapt o vizualizare tabel de control, așa că am putea pune în unele culori frumoase, în masă. Deci, acum că m-am pus în opinia mea masă controler, am nevoie să-l conectați din nou din acest buton pentru a vedere controler. Așa că am nevoie de a face controlul meu, clic, lucru trage din nou. Și acum pot să fac împinge, pentru că am încorporați în interiorul unui controler de navigare. Audiența: controler de navigare doar vă permite să meargă din loc în loc? Rhed SHI: Da. Deci, mai multe punct de vedere tehnic, este un obiect în care - astfel, în interiorul de navigare obiect controler, ea ține evidența de o matrice. Și că matrice deține tot ulterioare vizualiza controlere. De aceea, atunci când apăsați din nou, ea merge înapoi la pagina anterioară. Deoarece sistemul de control de navigare obiect, sau codul de care are grijă de acest obiect, are o serie pe care o păstrează urmări aceste controlere vedere, și poate atunci, știți, DQ punctul de vedere controler și vă va oferi înapoi unul anterior. Deci, aceasta este de chestii tehnice, dar - și vă voi arăta mai târziu în cod, dacă avem timp. Sunt un fel de a rula pe timp, dar - Deci, cu scopul de masă, ceea ce putem face este - Este, de obicei, setat automat a dinamic Prototype - am de gând să-l Celule statice face, altfel vom rula în unele probleme. Și apoi, să spunem că am de gând pentru a avea o secțiune. Deci, secțiuni este ca - dacă le-ați văzut vreodată app muzică, atunci când aveți artiști, secțiuni ar fi fie o prin Z's - scrisorile - și apoi, știți, individul rânduri ar fi numele de artist. Și astfel, ceea ce e bine aici, este că eu pot accesa toate din interiorul obiectelor de storyboard mea prin acest drop-down meniu, de asemenea. Deci, am de gând să faceți clic pe sectiunea mea, si eu vreau, stii, poate cinci rânduri. Și apoi, în interiorul fiecărui rând, Vreau să pun o etichetă. Și am de gând pentru a apela acest albastru. Și apoi, vreau să pun o vedere UI, te stiu, poate pentru, ca, o cutie mica. Astfel încât să pot arăta oamenilor o previzualizare a culorii. Și Mă voi întoarce la proprietate și schimba culoarea la, oh, eu nu fac Știu, asta. Și apoi, observa, de asemenea, aici, când am accesoriile, pot avea o mulțime dintre diferitele accesorii pe care le vezi de obicei. Indicatorul de divulgare, detaliile, sau verifica marca, sau pur și simplu doar detalii. Deci, poate că putem face, cum ar fi, o dezvăluire indicator, de exemplu. Și apoi, de ce nu am lua aceste, copie lipiți-le, și le-a pus în masă următorul rând. Deci, putem apela acest galben. Și am putea avea de a extinde acest lucru. Să fac galben. Și în acest fel, putem copia lipiți drumul nostru în jos. Ce a fost? Purpuriu. Deci, acestea sunt toate CS50 tipic Culorile pe care le-ați văzut în clasă - de fapt, îmi pare rău - sau pe site-ul web. Să sperăm că voi puteți vedea ceea ce fac aici. OK. Ultima. Audiența: Cum ai adăuga rândul inițial? Rhed SHI: Deci, întrebarea a fost, cum am adăuga rândul inițial? M-am dus în această secțiune tabel - sau toate acestea pot selectați secțiunea de masa - și apoi, aici, am actualizat numărul de rânduri. Și, permiteți-mi să sperăm că acest lucru funcționează. OK. Să vedem dacă merge. Oh, perfect, minunat. OK. În timp ce am fost construirea demo-ul meu, unele lucrurile nu s-au aliniat, astfel, multumesc pentru aplauzele. Da. Deci, să vedem. Vom face acest lucru doar pentru a face nouă totul - sau, de fapt, hai să rândul său, toate acestea în divulgare indicatori. Și apoi, ce vreau să vă arăt, de asemenea, a fost cum pot lua fiecare dintre cei rânduri de masă și le-au interacționeze - oh. Nu. Oh. De asemenea, vreau să vă arăt - aici, eu pot pune titlul meu controler de navigare, corect? Deci, de fapt, veți observa, de îndată ce am încorporat acest punct de vedere controler de interior a controlerului de navigare, vom vedea aceasta bara de navigare în partea de sus a noastră reprezentare storyboard de un controler de vedere. Și astfel, acest lucru ne dă, ca, vizual, un fel de, ghid de ecran nostru vizibil. Acest lucru este, evident, va fi bara de navigare. Și ceea ce vreau să fac mai repede, acum, se pune într-un alt - astfel încât acest punct de vedere tabel controler am făcut de a lua una dintre acestea și trăgând-o aici, și asta e ceea ce mi-a permis să rapid, într-adevăr, de a crea o vizualizare tabel controler. Dacă avem timp, deși, veți a se vedea că, programatic, e un pic mai dificil de a crea un tabel vedere controler, pentru că nu există o serie de metode care sunt necesar pentru tine de a, un fel de, scrie în ordine pentru vizualizarea de masă controler pentru a fi afișate corect. Cu toate acestea, vreau doar să vă arăt, acum, un exemplu de unde, dacă iau acest lucru, de exemplu - I-am pus într-un alt vedere controler. Și acum, să zicem vreau să controleze Alt prima mea albastru rând masa de aici. Și vreau să numesc acest albastru. Și apoi - Să vedem. Sunt la vedere acum, și eu pot schimba fundalul la albastru. Și astfel, notificare, aici, acest drop-down meniu, de asemenea, vă oferă o ierarhie a tuturor de aceste obiecte. Deci, un lucru important de reținut, aici, este că toate aceste lucruri, aici - acest punct de vedere tabel de control, masa vedere, vizualizare tabel secțiune, vizualizare tabel celulelor - toate acestea sunt obiecte, în cod. Deci, știți, o etichetă chiar acum este în curs de vizualizarea de conținut, etc. Așa mai departe și așa mai departe. Deci, dacă vom rula acest cod, ne-am Ar trebui să vedeți ceva - să vedem dacă asta - da. Deci, aici vom merge. Dar, dacă nu facem asta, nici unul de aceste lucruri de lucru. Corect? Deci, funcționează doar pe asta. Și, de dragul de timp, nu voi du-te în, știi, punerea în jos pe celelalte. Și acest lucru este sfârșitul, un fel de, storyboard - ceea ce am vrut să arăt te pentru storyboard. Și, eu nu am un exemplu lucrat, de fapt, chiar aici. Deci, acesta este rezumat pe care am făcut anterior. Deci, după cum puteți vedea, aceasta a fost controlor meu de navigare. Apoi am avut primul meu de vedere controler, apoi am avut meu de vedere de masă de control, și apoi am avut toate acestea - deci anterior, am făcut ceva foarte diferit. Deci, scuză aceste lucruri. Probabil voi curăța mai târziu, înainte de L-am trimit la producție. Dar, dacă vom rula aceasta, vom vedea că toate opțiunile sunt disponibile pentru noi. Doar că nu a făcut fundaluri aceste culori. Deci, cererea frumos simplu. Acum, haideți să încercăm să abordeze acest programatic. OK. Deci, pentru a face acest lucru, vom doar de gând pentru a începe un nou proiect Xcode. Vom face o cerere gol face acum, pentru că nu vrem să aibă storyboard. Deci, eu sunt pur și simplu limitarea mine pentru a nu utiliza oricare din storyboard, și o aplicare gol nu va da-mi un storyboard. Acest lucru este doar pentru a preveni eu de la inselat. Să vedem. Așteaptă. Am făcut - Da. OK. Corect. Deci, aici, am rămas cu nimic altceva decât cod. Deci, lasă-mă să mute această fereastră puțin peste. Corect. După cum puteți vedea aici, numai fișierele suntem dat sunt AppDelegate.h și punct m, iar noi nu avem mai storyboard. Deci, dacă vom rula aceasta, suntem încă de gând să ajunge la ecranul alb, mulțumesc lui Dumnezeu. OK - ecran alb, dar nimic altceva. Și, aici este partea importantă. Acest lucru este în cazul în care se întâmplă acțiunea. În versiunile anterioare, nu există de obicei, nici un cod de aici, dar storyboard prevede, în esență codul pentru această parte. Nu voi intra în detalii cu privire la modul. Și ceea ce vrem să facem acum este, ne-o dorim pentru a merge în aici, iar acest spațiu mic începe crearea din nou aplicația noastră. Așa - da? Audiența: Zoom? Rhed SHI: Zoom. Da, sigur. OK. Voi fi tastarea, astfel încât aceasta nu ar trebui să contează prea mult. OK. Deci, în primul rând, amintiți-vă am vrut să creăm un controler de navigare, corect? Și, de asemenea, după cum puteți vedea aici, Xcode face o treabă foarte mare de auto-umplere. Deci, după cum veți observa, numele tot ceea ce este mult mai mult decât de obicei, dar Xcode se umple pentru tine. Deci, eu pot doar să apăsați Enter. Deci, vreau să creeze o navigare UI controler pointer, și pot să-l numesc navigationController. Acum, ce fac acum? După acest semn egal, am nevoie pentru a, în primul rând, a crea în interiorul de memorie. Deci, am de gând să fac NavigationController alloc - deci, acest lucru este similar cu malloc, că voi folosite în C - și apoi, am de gând să-l init. Deci, este foarte important ca orice obiect pe care le creați, pe care doriți să alloc și init-l. Asta o să-l creeze și instantialize în interiorul de memorie, și acum îl puteți folosi. În regulă? Dacă nu faci asta, obiect dumneavoastră nu nu exista, și veți rula într-un buchet de probleme. Și apoi, vreau să creați un controler de vedere, corect? Deci, vreau să creați un UIViewController stele - astfel, tot ceea ce este un indicator în Objective-C, și am de gând să fac ceva asemănător, aici - Alloc, init. OK. Și atunci ce am de gând să faceți este, eu sunt O să - așa, amintiți-vă, atunci când am făcut embed în controler de navigare? Acesta este modul în care o faci in cod. Ai de gând să faci navigationController pushViewController - Audiența: [inaudibil]. Se va întâmpla acest lucru pentru noi, sau -? Rhed SHI: Oh, da. Nu. Ea mă place mai bine. Nu, acesta va lucra pentru tine, de asemenea. Deci, acestea sunt toate metodele. Deci pushViewController este o metodă, și de asemenea, mai precis, este un exemplu metoda de UI controler de navigare. Pentru că am avut de a crea navigare mea UI stele controler, și apoi am pot apela acest pushViewController pe meu exemplu specific de o navigare UI controler. Audiența: Nu trebuie să facem exact cuvânt, sau nu mai există deja pentru ea? Rhed SHI: Da, pentru că este o metodă. E ca o funcție. E ca printf. E ca scanf. E ca strcompare. Doar că nu știe ce ar putea să doriți să tip, și observați că-l voi mereu veni cu lucruri care sunt permis din punct de vedere pentru tine. Deci, în cazul în care nimic nu apare aici, atunci ceva este greșit. Deci, pushViewController. Deci, acum, vreau să împingă meu nou creat UIViewController, și apoi, animate - poate că nu. Deoarece acest lucru va fi la prima vedere controler. Vreau să spun, chiar dacă am făcut animat, probabil că nu va apărea, pentru că este primul ecran. Și amintiți-vă paranteze. Deci, amintiți-vă cum am folosit paranteze? Și în interiorul paranteze, obiect solicită o metodă - deci obiectivul nostru este de navigare controler, iar metoda este un impuls vedere controler animat. Și a vedea cum este nevoie în două argumente, și acestea sunt separate de, un fel de, cuvinte, și un colon. Deci, Objective-C, încearcă să-l frumos și ușor pentru tine de a citi cu voce tare - Codul dvs. - și l-au semi, un fel de, face sens. Cu toate acestea, a face doar asta nu este de ajuns. Permiteți-mi micșora acum. Face doar acest lucru nu este suficient pentru a obține ceea ce avem pentru a anterior. Deci, aici, veți observa că există de fapt, nu va fi nici un fel de bar, aici, nu? Nu există nici o bara de navigare, ceea ce înseamnă că noi încă nu am ajuns. Și putem testa asta, de asemenea, de, probabil, schimbarea fondul ViewController, corect? ViewController.background-- ah. Deci, a se vedea cum ViewController nu au avut o culoare de fundal, chiar dacă am a vrut să-l acces? Și asta pentru că ViewController este un container pentru vedere. Deci, ea are o vedere de proprietate, care apoi are o culoare de fundal. Și, eu pot seta, un fel de plictisitor, sunând la culoare pe obiect UIColor. Deci, o notificare aici, redColor este o metodă. Este o metodă de clasă de UIcolor. Pentru că nu am avut de a crea un exemplu real al unei UIColor în ordine pentru a apela metoda pe ea. Eu doar, pur și simplu, a numit-o pe numele de tip asemănător. Eu, ca, a numit-o pe int, dacă Int avea, cum ar fi, o metodă de a-l, de exemplu. Și așa, dacă vom rula acest cod, vom observă că fundalul este de fapt, nu roșu. Este încă alb. Și cum o putem obține în jurul valorii, care este, observați cum nu e self.window. Adică, cum ar fi, recipientul final pentru aplicația dumneavoastră. Acesta este cel final care conține totul de pe ecran, pentru o iPhone sau aplicații iPad. Și, în mod convenabil, self.window are această proprietate numit rootViewController. Și care va fi indicatorul a la prima vedere controler interior din aplicația. Deci, ce vrem să facem aici, acum, este pentru a seta ca egal la navigare nostru controler. Corect? Pentru că, tehnic, de navigație controler este primul nostru de vedere controler. Ea ține evidența de o serie de alte vedere controlere, și am împins această vedere controler în care matrice în controlerul de navigare. Deci, tu nu vrei să faci asta. Asta nu ar fi chiar te ajuta. Pe care doriți să faceți acest lucru, dacă ai vrut să faci un controler de navigație, care mai dintre voi, probabil, va pentru că veți dori la, un fel de, au un fel de, cum ar fi, meniu pentru a reveni la sau unele pagina de start pentru a reveni la, mai degrabă decât o ecran gol. Da? Audiența: Este incomod pentru tine pentru a mări - Rhed SHI: Da. Deci, da. Acesta este codul, și acum haideți să-l testeze. Deci, aici vom merge. Magie. Deci, OK. Mulțumesc. OK. Deci, acum, ce vrem să facem este - așa, suntem un fel de limitat, aici, nu? Am putea scrie potențial totul în interiorul acestui singură funcție. Dar, asta nu e modul în care dezvoltarea iOS de obicei, funcționează. Deci, ceea ce am de gând să faci este, suntem va crea unele fișiere noi. Dar, mai precis, vom a crea o altă clasă Objective-C, sau un alt obiect - clasă și obiecte sunt interschimbabile aici. Și, iată cum am putut, eventual, a crea o altă clasă de controlere U. Deci, este o sub-clasă, așa cum veți observa, aici, este o sub-clasă a Vedere UI controler, dar eu pot numim orice alt nume aici. Am putea numi acest CS50, am putea numi acest punct de vedere controler, am putea numi acest bla vedere controler - tot ce vreau. Aceasta este doar numele de clasa. Cu toate acestea, va fi important pentru că, în esență, ce fac aici este, creez un alt nume de clasă. Deci, aceasta va fi, cum ar fi, unele un fel de tip sau a unui obiect. Deci, ar trebui să fie un pic generic. Acesta nu va fi foarte specifice. Și, de asemenea, vreau să subliniez aceste două opțiuni. Pentru că facem totul în interiorul cod, uneori este mult mai ușor pentru a aduce într-un fișier de interfață, astfel încât Am posibilitatea să glisați și să fixați literalmente, ca am facut mai devreme cu storyboard - Știi, o etichetă, sau un buton, sau orice altceva. Și astfel, xibs sunt fișiere care vă permit să se că, și tu trebuie să-l cârlig la acest fișier controler de vedere. Deci, am de gând să în mod deliberat nu a verifica acest lucru. De obicei, mi-ar verifica acest lucru, și dacă am doar a facut acest lucru pentru iPhone sau iPad, am ar verifica acest lucru și pur și simplu au o pentru, știți, iPhone sau iPad. Dar din moment ce eu fac universal, am de gând pentru a crea două dintre cele mai târziu. Deci, am de gând să în mod deliberat debifați această. Acest lucru este, de asemenea, foarte important. O mulțime de ori, am avut bug-uri în cazul în care acest lucru nu a fost verificat. Și astfel, în mod evident, acest fisier nu este, un fel de, cum ar fi, inclus sau importate în interiorul acestui folder de test. Și astfel, codul meu nu are absolut nici o idee de existența acestui dosar, și care provoacă o mulțime de durere și ore de depanare. Dar, asigurați-vă că doar acest lucru este verificat atât de că, știți, obiectivul acestei fișier este pentru această aplicație. OK. Deci, acum am creat două fișiere noi. Și aceste fișiere arata destul de gol. Și, de fapt, de asemenea, să continue pe de crearea fișierelor XIb. Deci, în prealabil, am fost în Cocoa Touch drop-down. Acum, am de gând să merg în Utilizatorului Interfata touch, și după cum puteți vedea, am poate crea un storyboard. Deci, chiar am început cu un gol cerere, pot folosi în continuare un storyboard. Deși, acesta devine dificil din punct de vedere de modul în care doriți să vă conectați care la codul. Deci, eu nu va merge acolo. Dar, ceea ce vrem să facem acum este să creați o vizualizare. Și puteți alege pentru un iPhone sau un iPad. Și de obicei, pentru a desemna diferență - dacă faci o utilizare universală - vă fie pus un iPhone de subliniere, sau puteți face o Twiddly. Acesta nu contează cu adevărat. Este pur și simplu pentru tine să se diferențieze care punct de vedere este pentru dispozitiv care. Și așa, acum uite. Am un ecran care pot lucra cu. Și astfel, de exemplu, pot pune o etichetă pe aici, știi, și, de asemenea, pot pune un alt buton aici. Nu voi deranja schimbare valorile de aici. Dar, ceea ce este important aici este că proprietarul fișierului - deci, eu sunt în interiorul iPhone vedere, fișier iPhone XIb. Și în acest domeniu de navigare sau drop-down meniu, vreau să merg la proprietar fișier. Și aceasta este într-adevăr pas important aici. Vreau sa fac vizualizarea de clasă controler, astfel ca si acest fisier este XIb vor fi asociate cu punctul meu de vedere controler. Și nimic din ce fac eu în interiorul meu de vedere controler de programare este O să se reflecte pe aici. Deci, cu toate acestea, observă că - De fapt, hai să facem acest punct de vedere albastru fundal, de exemplu. Sau verde. Și apoi, așa că, dacă veți observa, înapoi în acest cod, acest lucru este în cazul în care am ajuns să ne controler de navigare. Chiar dacă am făcut acest pas, este încă de gând să fie roșu, nu verde. Și nu există un motiv. Este pentru că, atunci când am inited vedere controler nostru, aici - îmi pare rău, e un pic nebun - când ne-am inited vedere controler aici, am inited de tipul general UIViewController. OK? Așa că nici măcar nu fac cu această clasă. Deci, amintiți-vă, aceasta este ca o clasă acum. Acesta poate fi considerat ca un tip, doar ca UIViewController este un tip. Și în scopul de a utiliza că, ceea ce trebuie să facem este de import-l - ViewController import - și, după cum puteți vedea, ea AutoFills-o pentru mine. Deci, ViewController - și acum, aici, eu pot schimba acest lucru UIViewController la ViewController. Și acum, aici, eu pot schimba aceasta a ViewController. Să facem asta din nou. E încă roșu. Și motivul pentru care este încă roșie se datorează faptului că - woah, ce sa întâmplat acolo? Ne-am dorit să asocieze această XIb fișier cu vedere controlerul. Cu toate acestea, în scopul de a face de fapt, că, avem nevoie pentru a merge în această. Și când vom face init, vrem să facem initWithNibName, iar apoi ne-am dori să face la șir View_iPhone, de exemplu. Puteți ignora pachet aici. Și acest lucru se întâmplă pentru a permite ne, de fapt - uh oh, există o problemă. Corect. Și astfel, există o problemă, deoarece, în fișierul nostru de vedere XIb, avem o etichetă și avem un buton. Cu toate acestea, chiar dacă ne-am conectat cei doi, nu e nimic în interiorul ViewController.h sau ViewController.m care reflectă cele butoane sau aceste etichete. Deci, avem nevoie pentru a scrie celor de la drept Proprietățile de vedere controlerului. Deci, acesta este modul în care declara o proprietate. Este nevoie în, de obicei, aceste două opțiuni. În scopul de noi și acest seminar, Aș spune că, în general, cele mai multe proprietăți sunt nonatomic și reține. Puteți citi de către Google căutare, știți, diferența dintre nonatomic și să păstreze pe, tine știu, Google sau ceva. Și te voi duce la, cum ar fi, stivă Preaplin, în cazul în care oamenii vor avea răspunsuri pentru diferențele între cei. Dar de acum, asta e ceea ce ne-am Vreau să fie preocupat de. Și vrem să facem o etichetă UI, stele, și putem să-l numim ceea ce ne dorim. Putem numi acest lucru, știți, eticheta. Si, vom crea un alt una pentru butonul. Și amintiți-vă pentru a include asterisc, pentru că avem de-a face cu indicii destul de mult peste tot în interiorul de Objective-C. Cu toate acestea, că nu va mai rezolva problema, după cum puteți vedea aici. Iar motivul este că, ori de câte ori ne-am doriți să conectați o etichetă fișier XIb sau un buton pentru a programului, sau antetul și dosar de punere în aplicare, vrem să adăuga acest bucată de cod - priză. Observați că este un cuvânt cheie. Și, de îndată ce am terminat tastarea asta, ar trebui să aibă aceste două cercuri, aici. De obicei, ei nu sunt completate inch Eu nu sunt sigur de ce ei sunt. Dar, de obicei, va trebui să manual a le conecta prin a merge la această parte a zona de utilitati. Și astfel, chiar acum, am eticheta mea selectat, și vreau să trageți acest nou corelarea priză la proprietar dosar meu, și apoi faceți clic pe Etichetă. Deci, acum, în cele din urmă, această etichetă este conectat la această etichetă. Și această etichetă este ceea ce am de gând să folosesc programatic pentru a schimba sale text, fontul, fundal sale culoare, etc. Deci, de ce nu facem aceeași pentru butonul? Și, după cum veți observa, de pe butonul, E un pic mai complicat. Pentru ca, vreau sa spun, tu ar trebui să apăsați pe un buton, asa ca are un lot de opțiuni pentru modul în care utilizatorii poate apăsa pe un buton. Și apoi, vom vedea mai târziu că ne putem conecta la acest noastră cod pentru a face să funcționeze. Deci, de acum, deși, vrem să vă conectați acesta a butonului real interiorul codul nostru. Deci, mergem la noua priza de afiliere, și apoi a face butonul. Acum, haideți să ruleze din nou. Uh oh. OK. Nu știu ce se întâmplă aici, acum. Whoa. Doar un moment, aici. De fapt, de ce nu am lua o uita-te la un alt exemplu, în interesul de timp. OK. Deci, aici e mai ușor de preparat exemplu pentru ViewController. După cum puteți vedea aici, am inclus proprietățile pentru eticheta și butonul. Și apoi, această bucată de cod aici - acest IBaction - o legătură la acest buton aici. Deci, după cum puteți vedea aici, Touch Up Inside este conectat la selectorul numit apăsat butonul. Deci, putem merge de fapt, prin mișcare din nou, aici, prin luarea Touch Up În interiorul și trăgându-l la Fișier Proprietarul, și apoi faceți clic pe butonul apăsat. Acum, haideți să ruleze codul nostru. Deci, acum, acest buton funcționează acum și ne va duce la următoarea pagină. Și, în termeni de vedere controler noastre, aceasta este o bucată de cod care a avut de îngrijire a butonului apăsat. Și este important de observat aici, că Am creat un alt tip de vedere controler numit un tabel vedere controler. Deci, acest lucru a fost similară la spate în storyboard, când am tras una din aceste controlere vezi tabelul în storyboard. Creez un alt Pointer la vizualizare tabel controler, alloc și init-ING, și apoi a face controler de navigație de sine punct, împinge ViewController, acest nou viewController. Și am stabilit ca animația să da, pentru că acum interiorul app mea, și eu vrei sa vezi de fapt, animația va din pagina de start a tabelului vedere controler. Audiența: Nu vă mai faceți griji de colectare a gunoiului? Rhed SHI: Ce-i asta? Nu. Deci, întrebarea a fost, ai de a lucra cu colectarea gunoiului? Deci, Xcode 4 a avut ca ARC, care este numărare de referință automat. Și așa, de obicei, atunci când începe un nou proiect, ar trebui să verificați, pentru că nimeni nu vrea cu adevărat să se ocupe de eliberarea de memorie și alte chestii. Dar cred că în Xcode 5, nu există nici măcar această opțiune pe noul proiect. Deci, în mod automat face asta pentru tine. Da? Audiența: Poți să exportați un PDF în storyboard-ul? Rhed SHI: Da, cu siguranta. Deci, toate acestea vor fi incluse în codul sursă, astfel încât voi puteți verifica proiectului Xcode real pentru ea. Da? Audiența: Dar, vreau sa spun, ca, pot imprima un PDF cu storyboard meu? Dacă vreau doar să exporte imagini pentru a arăta pe cineva. Rhed SHI: Oh, da. Cred că, poate, puteți doar să ia o captură de ecran. Da, și trimite-le un ecran împușcat sau ceva. Da. Deci, să vedem. În interesul de timp, cred asta e tot ce pot acoperi azi. Dar, eu știu că e, de fapt, doar abia atinge suprafața de iOS dezvoltare. Deci, vă rugăm să nu ezitați să mă contactați dacă aveți orice întrebări despre iOS dezvoltare. Și, sperăm, voi fi în măsură pentru a curăța o parte din codul sursa fișiere de cod, astfel încât veți avea unele exemple foarte frumos de a lucra cu. Altele decât că, dacă voi sunt de gând la CS50 Hackathon, eu pot sau să nu fie acolo, și eu pot ajuta cu unele de dezvoltare iOS, de asemenea. Deci, mulțumesc foarte mult, băieți.