[Powered by Google Translate] [Seminar] [iOS: Pisanje Apps Poput Boss]
[Tommy MacWilliam] [Sveučilište Harvard]
[Ovo je CS50.] [CS50.TV]
>> U redu, svi, dobrodošli na iOS: Pisanje Apps poput Boss.
Ovaj seminar će se usredotočiti na pisanje aplikacija za iPhone
i opet pisati aplikacije za iPad, pa smo u osnovi idemo šetati
par različitih primjera kako napraviti aplikaciju, jednostavno igra poput Tic Tac Toe,
ili ako ste više zainteresirani za izradu aplikacije kao neka vrsta čitač vijesti
ili nešto da komunicira s internetom ću govoriti o tome kao dobro.
Evo naš kratki program.
>> IOS aplikacije su pisane u jeziku zove Objective-C,
pa to je malo sličan C, ali stvarno ne na sve,
pa ćemo razgovarati malo o jeziku sama
i onda kako izgraditi iPhone aplikacije koriste ovaj app program pod nazivom XCode,
što ako ga niste preuzeli još slobodno započeti preuzimanje sada.
To je nekoliko gigabajta.
To bi trebao biti slobodan na App Store, tako da ćete morati imati Mac
idealno trčanje najnoviju verziju OS X.
Ako niste, nema problema.
Imamo Macove u znanstvenom centru na raspolaganju za svoj rad
s XCode instaliran, pa slobodno koristiti onima za razvoj.
Ako želite napraviti aplikaciju, ali nemaju Mac, ne brinite.
Ima dosta kampusu resursa za to.
I tako onda ćemo pokriti dvije veće primjere različitih aplikacija koje možete napraviti.
Objective-C je tehnički ono što se zove super set C.
To znači da svaki C koda je također vrijedi i Objective-C koda.
To znači da smo vrsta kanala sniman na nekim dodatnim značajkama do C.
Neke od tih značajki ne uključuju vlasništvo ikada napisati malloc opet, hvala Bogu,
ne moraju brinuti o tim glupim pokazivače te ih oslobađaju i sve te stvari
što je mrzio o C, a to je vrsta otišao u Objective-C.
>> Sada, Objective-C također ima mnogo veći standardni knjižnicu,
tako da je puno više funkcionalnosti ste dobili za besplatno unutrašnjost Objective-C.
Sjetite se kada smo pisali PHP primijetili smo da smo išli od
to najmanji jezik div knjižnica svih tih ludih stvari koje možete učiniti.
Ista stvar se događa u iOS.
Postoji objekti za stvari kao što su budističke kalendaru, a zapravo ništa
vam eventualno mogu misliti vjerojatno već postoji u Objective-C je provedbe.
Cilj dio Objective-C je pozivom nešto
zove Objektno programiranje.
To je vrsta novog koncepta, ali smo zapravo sam uglavnom naučila
Puno tih pojmova već.
Ideja Objektno orijentirano programiranje je da idete na strukturu
puno kodu oko tih stvari zove nastavu,
i ove klase su stvarno proslavio tvorevina.
Unutar jedne struct smo u osnovi rekao ovdje je stvar,
a to stvar može imati članova.
Na primjer, čvor u povezane liste mogao imati i druge stvari
kao vrijednosti, pokazivač na sljedeći čvor u popisu,
i zajedno da pokazivač i da je vrijednost sastoji ovu jednu instancu struct.
Klase su vrlo slični, osim
klase također mogu imati funkcije unutar njih.
Kada smo proglasili struct, možemo samo reći int n ili čvor * sljedećoj.
>> Sada s Objective-C zapravo možemo staviti funkcije
unutar tih stvari.
Još jedna stvar koja razredi mogu učiniti je da može naslijediti podatke iz drugih razreda.
Na primjer, mi ćemo biti u potrazi na hrpu izgrađen-in Objective-C klase.
Jedan od njih mogao bi biti klasa koja predstavlja pogled za ekran,
i tako rekavši želim provesti svoj pogled
smo u osnovi reći nekome nad na Apple, vjerojatno stvarno lijepih ljudi,
pisao ovu klasu za mene, a to obrađuje stvari kao što su prikazivanje tipke
ili pružanje ekran, a mi bi jako bolan
provesti sve da funkcionalnost sami, i tako jednostavno
nasljeđivanje podataka možemo reći sve što ste učinili u toj klasi
Također želim unutar mog razreda, a onda ću napraviti neke druge stvari,
naime implementirati aplikaciju.
To je ono što ta riječ znači nasljedstvo. Vidjet ćemo više konkretan primjer.
>> I na kraju, ključ s objektno orijentirano programiranje je da
to dovodi do podataka kućištima.
U neke od naših problema postavlja bismo mogli imati ove velike, globalne varijable
i globals svugdje, a to je kako ćemo pratiti stanje.
S klasa možemo početi encapsulating informacije unutar nekog objekta.
Ako imamo jedan zaslon na naše aplikacije, mi stvarno ne trebaju imati nikakve podatke iz
drugi zaslon u našoj aplikaciji unutar toga,
i tako encapsulating stvari u klasama to zapravo vodi
da puno bolje kod dizajna, a to je moguće uz neke od dodatnih mogućnosti
od Objective-C.
Forewarning, sintaksa za Objective-C je banana.
To je kao da se ništa što smo vidjeli prije,
tako da je malo krivulja učenja navikavaju
Koji je kurac to znači?
Ali jednom kada se prošlosti da početna krivulja učenja je stvarno, stvarno glatka
početi pisati aplikacije.
>> Da proglasiti klase, reći ovdje je moj razred, ona postoji,
a možda i ovdje su neke stvari koje ću definirati kasnije,
Ja ću reći @ sučelje.
Ja ću reći @ sučelje. Ja ću dati mom razredu ime.
A onda kasnije negdje drugdje ću reći @ kraj,
i sve između @ sučelje i @ kraja
će biti moj razred.
To će biti ono što je unutar naših. H datoteka.
Baš kao u C naši. H datoteke u osnovi rekao ovdje su neke stvari koje će postojati.
Ja ne nužno vam reći što im je činiti, ali,
ali prevodilac treba znati da oni postoje.
Kasnije unutar naše. M-datoteke jer m za Objective-C
tamo gdje mi zapravo idemo definirati što ove klase učiniti.
Slično kao i naše. C datoteke, pod uvjetom da je provedba za funkcije.
Unutar našeg. M. datoteku ćemo reći ovdje je ono što sve funkcije
unutar moj razred-što oni sve učiniti.
I na kraju, unutar jedne struct mogli bismo reći unutar tih vitičastih zagrada
int n ili čvor * next,
i Objective-C idemo ključnu riječ @ imovine,
i to je ono što se događa definirati svojstva,
ili ne-funkcije koje su dio moje klase.
>> Pozivanje funkcije u Objective-C je također banane.
Kada smo proglasili funkcije u C mi je rekao nešto poput int foo
i otvorena zagrada, a zatim ga je dao popis argumenata.
To je ono što izjavljuje metode ili funkcije izgleda u Objective-C.
Ako želim da se proglasi funkciju ili metodu
gdje sam rekao metoda je zapravo samo funkcija koja je član klase,
tako nekako međusobno, ali ne i stvarno,
tako da unutar moje metode Želim stvoriti novu metodu.
To će vratiti ništa, tako da će to biti tipa prazninu.
Ovo je povratak vrsta moje funkcije.
Sada imamo parens ovdje jer-ne znam.
Sljedeća će biti ime moje funkcije,
i onda napokon imamo zarez baš kao što smo imali u C.
Što je novo ovdje je ovaj momak ovdje.
Ova crtica je zapravo potrebno, i što to govori da je
ova metoda ovdje mora biti pozvan na primjer klase.
>> Nakon što smo proglašeni naše tvorevina smo vjerojatno rekao nešto poput
struct čvor n, te da je zapravo stvorio
ili instanciraju jedan od onih tvorevina, tako da sam zapravo mogao početi raditi
s onim što je unutar njega, tako da je ovo crtica znači da moramo
instantiate razred baš kao što smo instanciraju da struct
prije nego što možemo nazvati ovu metodu na njega.
Ako želim početi dodavanjem argumente na moje metode
to dobiva još više banane.
Evo moja metoda ime.
Tada ću imati debelog crijeva, a nakon toga debelo piše ovdje dolazi neke argumente.
Ova metoda uzima jedan argument.
Vrsta svojoj argument je int, a ime tog argumenta
ili varijabla da ću početi koristiti unutar metode je sam nazvao.
Opet, ovo je metoda. To traje jedan argument.
>> Ako želite početi dodavanjem više argumenata da dobije više banane
u koji smo to debelo da kaže evo moj popis argumenata.
Ovaj prvi argument je cijeli broj.
Sada, ovaj drugi argument je zanimljivo.
Varijabla koja ću biti koristeći unutar moje funkcije
se zove f, tako da unutar mog funkciju sam mogao reći
f + = 1 ili tako nešto.
To je stvar ovdje je u osnovi ključ za taj argument ili parametar.
Baš kao što smo imali ključne parova i nešto poput JSON ili asocijativnih nizova
Objective-C je donio odluku za reći, ok, samo tako da je stvarno jasno
kada pozvati metodu ono što svi ovi parametri su
Ja sam zapravo događa u ime svih njih.
Kada zovete način, zapravo ćete reći andFloat,
i tada ćete ga proći u.
>> Zanimljivo, to nitko ne zove, ali svi ostali parametri su,
pa ako smo imali treći argument da sam mogao reći andFloat
a drugi float i tako dalje.
Kad sam poziv ove metode je, naravno, banana,
pa ako imam neki predmet, a ja definira metodu zvanu foo,
i želim ga nazvati, nego govoreći foo otvaranje / zatvaranje parens
Idem otvoriti konzolu.
Evo ime moje metode.
Ja ću zatvoriti zagradu, a to je objekt zovem ga na.
Zapamtite, sve ove metode postoje unutar klase
jer klasa može imati metode definirane unutar njih.
>> Ovdje sam samovoljno smo stvorili objekt neke klase,
i to je sintaksa za taj događaj.
Postoje dva koraka za stvaranje objekta.
Prvi korak je reći želim izdvojiti prostor.
Ovo je ekvivalent malloc. Mi ne moramo reći malloc više.
Mi ispao m, napravio ga alloc, a zamijenio. C sa. M..
Nakon što smo alloc nešto mi onda morate ga inicijalizirati.
Uglavnom, kada ste stvorili predmete možda želite imati neke logike
da izvršava kada oni stvorili, tako da možete proći u nekim zadanim vrijednostima
ili nešto slično, i tako to init metoda je ono što zapravo stvara objekt.
Mi smo prvi put dodijeliti prostor, baš kao što smo učinili u C,
i onda smo ga inicijalizirati, što može ili ne može učiniti puno.
Onda smo se vraćaju ovu stvar u objektu o.
Tu je zvijezda ovdje, jer je to tehnički pokazivač,
ali ne brinite, pokazivače nisu tako veliki posao u Objective-C više.
>> Sada smo instanciraju ovu klasu zvanu NSObject,
i to je samo slučajna klasa da Apple ima.
Mi smo instanciraju to, a sada imam instancu te klase
u ovom objektu o, tako da znači da ako sam definirao
ove metode mogu ih nazvati ovako.
Isto tako, ako sam htio pozvati metodu s jednim argumentom,
pa to je bar metoda, koja traje jedan argument,
i ovdje je baz: qux metoda, tako da to traje dva argumente.
Ovo je poziv jedne funkcije u ovom objektu o.
Smisla?
Sintaksa bi imalo smisla, ali nekako naviknuti na to.
>> Ok, ajmo razgovarati o nekoliko stvari koje su ugrađene u Objective-C
koje nisu nužno ugraditi u C.
U C mi nekako morali nositi s tim što su žice glupih znakova polja,
i to je dobio jako neugodno.
Objective-C ima onih koji su izgrađeni u za nas, a to je građena u
Korištenjem ove klase pod nazivom NSString.
Kad želim stvoriti NSString imamo više tajanstveni sintaksu.
Umjesto govoreći: "cs50" kažemo @ "cs50"
i to je samo sintaksa za proglašenje konce u Objective-C.
To je vrlo lako zaboraviti, pa ne znam.
Sada, kada sam ovo, ovo je niz, ali primijetiti
to je zapravo samo objekt.
Rekao sam NSString, što znači da sam instanciraju razred
zove NSString, koje je netko drugi napisao za mene,
i oni su vrlo lijepo o njemu, i tako sada
Ja mogu početi zovete metode o tome.
Ako ja zovem metoda duljinu na ovaj predmet je
to će se vratiti na mene duljinu niza.
To je baš kao i strlen u C.
To će se vratiti 4.
>> Isto tako, još jedan način sam možda želite stalo je ovo characterAtIndex.
To je metoda koja kaže da se na ovaj niz s
Želim vam da dobijete 0. karakter,
pa to bi se vratili na mene lik c,
i tu je cijela hrpa više od tih metoda koje možete Googleu stvarno lako.
Appleov dokumentacija je velik, a mi ćemo pogledati kako u malo.
Oni su nizovi.
Također smo varijabilne veličine polja izgrađen u.
Sjeti se u C kada smo proglasili niz
imali smo reći da imate pet elemenata, kraj priče.
Kad smo stigli na JavaScript i PHP bismo mogli početi
radi stvari kao što je dodavanje elemenata ili se kreće elemente.
Mi možemo učiniti isto u Objective-C.
Umjesto stvoriti niz u normalnom C putu
imamo opet drugi razred zove NSMutableArray.
Tu je također NSArray,
i to se događa u osnovi utjelovljuje neki niz.
To govori prva stvar želim učiniti je želim izdvojiti
prostor za novo polje, a nakon što sam ga izdvojiti
I onda je potrebno da ga inicijalizirati.
Opet, samo nazivajući ove dvije metode.
Sada to znači da unutar tog objekta je
Ja sam prazna polja sjedi tamo.
Ako želim dodati nešto na ovaj niz, ja mogu pozvati addObject metodu.
Želim dodati objekt na polju je, i želim dodati niz CS50.
Ako sam želio obratno ukloniti da mogu reći želim
ukloniti objekt na prvom mjestu na polje ili objekt.
>> Smisla?
Ok, vrsta naviknuti na ovom trgu noseći stvar.
Usput, unutar puno Appleovim knjižnica vidjet ćete ovu NS.
NS zapravo zalaže za sljedeći korak, koji je bio jedan od Steve Jobs prvih tvrtki,
i to je gdje je on stvarno počeo pisati puno koda
kao vrsta osnova za Mac OS X i sve druge stvari,
i tako to NS je vrsta ovog lijepog ostavštine kriknuti jednom od ranijih poduzeća
natrag kada je Apple prvi put počinje out.
To je svugdje.
Idemo pogledati više holistički Objective-C primjer.
Ovdje sam unutar Xcode.
Da biste dobili ovdje, sam prvi put skinuti Xcode iz App Store,
ga otvorio, a onda sam otišao do ovdje datoteci,
ovamo na novoj, a zatim projekt.
Nakon što sam to učinio sam sve ove opcije što želim napraviti,
i tako ćemo pogledati tih opcija kasnije,
ali samo za ovaj primjer, jer nismo zapravo će imati app još
Došao sam ovdje dolje, a ja sam rekao Command Line Tool,
i to je app da sam mogao pokrenuti na naredbenog retka
baš kao što smo bili trčanje iz C.
Tako sam stvorio ovaj projekt, pa sada sam ovdje,
pa neka prvi pogled na ovu sliku, i to bi trebalo izgledati lijepo upoznati.
Imam int ime. Tu je moj prijatelj argc, moj drugi prijatelj argv.
I tako možemo vidjeti da je to polazna točka za moj prvi Objective-C programa.
Ovdje možemo ignorirati to za sada.
To je u osnovi neke stvari upravljanje memorijom da nećete stvarno
ikada morati brinuti o tome.
>> Pogledajmo ovog prvog bloka ovdje.
Ovaj prvi red, ako kažem Studentski * alice = [[Studentski alloc] init] što je to radiš?
Ovo je prvi student ovdje, ovo je vjerojatno klasa.
To nije klasa da Apple napisao, ali to je klasa koja sam napisao.
Prva stvar želim učiniti je želim izdvojiti prostor za novi učenik,
i onda želim da ga inicijalizirati, pa to mi daje natrag
ovaj novi studentski objekt, i ja sam to spremanje u varijablu zove Alice.
Odakle da klase dolaze iz?
Pa, ovdje na lijevoj strani su sve različite datoteke unutar mog projekta.
Možemo vidjeti ovdje imam Student.h i Student.m.
. H datoteku, zapamtite, je mjesto gdje sam proglasiti sve stvari
koje će postojati unutar klase.
>> Idemo pogledati to.
U redu, ovdje imamo tu @ sučelje, a to govori da je ovdje riječ o
izjave o svemu što će postojati u mom razredu.
Onda imam debelo crijevo. Tada sam ovu NSObject stvar.
To znači da je debelo nasljedstvo malo smo raspravljali malo ranije.
To sve govori NSObject može učiniti
gdje NSObject je ova klasa napisao netko drugi,
sve to NSObject može učiniti Želim biti u mogućnosti to učiniti.
Po riječima: NSObject to znači da sam u osnovi
naslijedio sve funkcionalnosti druge klase.
To stvarno mi je dao hrpu različitih metoda i svojstava koje mogu koristiti.
Ovdje dolje sam stvara dva svojstva.
To znači moj učenik, ako je to bila struct, to će biti dvije stvari
unutar mog struct, tako da svaki student ima ime
da je niz i student ima ocjenu,
što je int.
>> Konačno, ovdje ću stvoriti metodu za moj učenik.
Zvao sam moj način, initWithName, i to traje jedan argument,
i taj argument je string, i nazvao sam ga nazvati.
Sada pogledajmo kako smo zapravo provodi ovu klasu.
Evo, sada sam unutar moje. M datoteku,
m za provedbu, pretpostavljam.
Imam svoju primjenu, moj kraj, i ovdje gdje sam zapravo definiranje
što initWithName radi.
Imam initWithName, ime mog parametra, a onda ova
gdje sam zapravo stvaranje učenika,
pa to je malo zagonetan, ali to je vrsta predloženi
koje želite uključiti u konstruktorima.
Ovo inicijalizacija funkciju ovdje, initWithName, je vrsta konstruktora.
Vi ste zapravo izgradnju novog studentskog objekt
a možda i slanje neke podatke unutar nje.
Prva stvar želim učiniti je želim pozvati init na ovom super stvar.
>> Zapamtite da kada sam rekao ovdje u. H datoteci
da je sve NSObject ima student ima.
To znači da kada sam stvoriti studenta što sam također trebate učiniti je
pobrinite se da NSObject da sam baštineći sve te podatke iz
također je inicijalizirana ispravno.
Što moram reći da je to super zapravo događa da se odnosi na matičnom razredu
da sam nasljeđivanje iz, pa želim da biste bili sigurni da inicijalizirati
sve što sam ovisno o prije nego što sam početi pokušavate ga koristiti.
Onda ako je to ispravno inicijaliziran to je samo kao što je rekao, ako malloc
nije se vratio null onda mogu početi postavljanje neka svojstva.
>> U JavaScript i PHP smo to ključna zove ovaj,
i to iz trenutne instance klase.
U Objective-C zovemo sebe.
Kad kažem self.name, to znači da je objekt
Upravo sam napravio kada sam rekao da učenik alloc init,
da će mi vratiti objekt.
To znači da želim postaviti ime tog objekta
što god sam prošao i.
Baš kao u C, imamo pristup članove s ovom točkom,
tako self.name kaže ime studentskog objekta
sada će biti ono što ste upravo prošli u.
I tako napokon, mogu ga vratiti tako da sam zapravo dobiti nešto natrag.
>> Pitanja?
Ok, tako da je ovo samo = super init,
ako ne potpuno razumijem nasljedstvo stvari ne brinite.
Samo znam da li ste ikada željeli napraviti svoj vlastiti init metodu samo
to, a vi ćete biti dobro ide.
Da. >> [Studentski] Što ako samo znači?
To znači da kada smo malloc nešto što mi uvijek provjeriti ako je to bila jednaka null,
a ako je nula, onda smo izašli.
To je ista stvar, jer ako se to vraća null, onda vjerojatno ide na SEG krivnjom
ako ćemo početi pokušava manipulirati.
To je naša studentica klase.
To znači da možemo inicijalizirati naše studente na jedan od dva načina.
Ako kažem učenik alloc init Ja ne koristim tu metodu da sam napisao,
a umjesto toga sam jednostavno mogu reći alice.name,
i sad ću postaviti tu imovinu ime.
>> Isto tako, ako želim koristiti taj initWithName metodu
Ja jednostavno ne može reći alloc, a zatim umjesto govoreći init
Idem nazvati taj način da sam upravo stvorili, a ja ću proći u Bobu.
U ovom trenutku, ovaj objekt Bob ima ime jednako Bob.
Ok, ovdje sam koristiti taj NSMutableArray da smo gledali na ranije.
Ja dodjele space.Then sam inicijalizirati novi niz.
Ja ću dodati dvije stvari na njega.
Ovo polje sada drži studentske objekte.
Primijetit ćete da nigdje nisam moram reći da je to niz studenata.
Rekao sam da je polje, razdoblje.
Tada sam može staviti što god u njemu da želim.
Ovdje sam dva predmeta.
>> Konačno, imam još jedan objekt ovdje, ovaj TF.
Ovamo u TF.h osnovi ista stvar.
Ja sam nasljeđivanje iz NSObject, i usput,
kada ste stvorili nastavu to je sve učinio za vas,
ova vrsta sučelja predloženi.
Ona ima svojstvo studenata.
Imam par Način da se ovdje ne stvarno učiniti puno,
pa to znači da nakon što sam stvoriti ovaj TF objekt
Ja mogu nazvati ovu metodu ocjene o tome ovako.
Sva pitanja o Objective-C sintaksu prije nego što počnemo kreće u neke više
Zanimljivo aplikacije razvoj stvari?
>> Ok, pa neka je zapravo napraviti iPhone aplikaciju.
Jezgra klase koje ćete se koriste unutar vašeg iPhone app se zove pogled kontroleri,
i pogled kontroler u osnovi predstavlja jednu ekran
unutar svoje aplikacije, pa ako sam na glazbenoj aplikaciji, primjerice,
jedan kontroler pogled moglo predstavljati pogled u kojem sam vidjeti sve pjesme na moj iPhone.
Drugi kontroler pogled moglo biti kada sam kliknite na pjesmu i početi igrati
ili kao što sam bušenje dolje u umjetnika.
Svaki od tih različitih ekrana mogao biti predstavljeni kao drugačiji pogled kontroler,
i pogled kontroler je zapravo samo klasa koja kaže kako se to radi ekran.
Stvari unutrašnjost pogledom kontroler, idemo da ima svojstva,
tako stvari poput gumba će biti vlasništvo naše more kontrolera.
>> Mi smo također će imati metode, a to su u osnovi događaj rukuju.
Ova metoda govori kada pritisnete ovu tipku
Želim učiniti nešto, i na kraju, opet,
mi smo idući u biti koristeći ovaj samo ključnu riječ za pristup trenutnu instancu.
Za izgradnju sučelja u iOS je zapravo jako, jako jednostavno.
Oni imaju ovu lijepu vuci i ispusti sučelje zove Sučelje Graditelj,
i dvije temeljne pojmove koji žica svoj Objective-C Interface Builder
su IBOutlet i IBAction.
IBOutlet jednostavno kaže da ako se proglasi imovine koja je tipka,
i želite ga spojiti na nešto u svom stvarnom UI,
ideš reći da je izlaz.
Isto tako, ako želite da predstavlja događaj rukovatelj
onda ćeš reći da je akcija.
>> Da zapravo spojiti se ovaj grafički prikaz
i tvoj broj je jako, jako jednostavan.
Ako želite priključiti IBOutlet, sve što morate učiniti je da kontrolirati klik,
pa ćemo vidjeti primjer za to jako brzo.
Vi kontrolirate kliknite gdje piše Pogledajte kontroler.
Ti si idući u povucite u sučelju, ili obratno,
ako želite spojiti događaj rukovatelj ćeš povući iz sučelja
u drugom smjeru.
Idemo pogledati stvarno jednostavan iOS primjer.
>> Idemo stvoriti novi projekt.
Ja ću doći ovdje na primjeni,
i ja ću kliknuti jednom pogledu zahtjeva.
Idem kliknite next. Ja ću dati moj projekt naziv.
Nazvat ću ga Zdravo.
Zanimljivo, Apple pretpostavlja da ste stvaranje proizvod
tako da možete ga prodati i oni mogu zaraditi novac.
Dolje ovdje ću reći da je to iPhone app.
Možete stvoriti iPad aplikaciju, ili ako želite stvoriti jednu od tih aplikacija
koji podržava oba uređaja možete to učiniti previše.
To su ono što želite da vaše checkmarks izgledati.
>> Vi želite koristiti storyboards, što ćemo kasnije vidjeti,
a vi svakako želite koristiti automatsko referentnu brojanja,
što je lijepo lice koje vas sprečava da ima za reći malloc i free.
Ukoliko želite nazvati malloc i free, ja bih napustiti ovaj ček.
Ja ću kliknite next, i na kraju, to će me pitati gdje želim da ga spasiti.
Ja ću pogoditi stvoriti, i ovdje mi ići.
Napravio sam novi projekt.
Više ovdje na lijevoj strani su sve datoteke koje su unutar mog projekta,
i primijetiti da sam dobio hrpu, a nisam ni ništa.
IOS je super.
>> Na primjer, ovdje je to ViewController.h,
to će predstavljati moj prvi pogled kontroler,
pa prvi ekranu unutar moje app.
Sada znamo što je to rekao.
Govorimo zovem ovu klasu ViewController,
i ViewController čini sve da UIViewController radi,
i to je, opet, neke klase da Apple napisao da se puno zgodan stvari za nas
sviđa prikazali zaslon.
Ovdje je mjesto gdje sam zapravo može početi definirati što je moj pogled kontroler radi,
i ispada da ja stvarno ne trebaju ništa od ovoga.
Ovo je predloženi broj da Apple mi daje besplatno.
Ja sam je potrebno da prvu liniju, ili nemam razred,
tako da možemo riješiti to i riješi to.
Ok, tako da je ovo moj prazan ekran.
>> Sada ćemo kliknite na ovaj MainStoryboard.storyboard,
i to je mjesto gdje počinje da biste dobili zanimljiv.
Ovo predstavlja prvi ekran na mom app.
Ako želim dodati gumb, u HTML-u morao sam stvoriti gumb oznaku.
U Android morate stvoriti gumb oznaku,
ali u iOS, ako sam došao ovdje dolje na dnu desno
a ako ja kliknite na ovaj treći jednom ovdje gdje piše objekte,
i ja mogu pomicati prema dolje, ili mogu početi u potrazi za gumb.
A pogledajte, gumb, tako da sam zapravo povući i ispustiti ovo pravo postoji,
Upravo sam dodao gumb na ovaj zaslon na mom app.
Ako želim promijeniti tekst, ja dvaput ga pritisnite,
reći nešto mami poput "Me Pritisnite."
Ok, sad ako sam pokrenuti ovu aplikaciju, tako da smo ga sastaviti,
tako da ga pokrenuti sam kliknite na gumb za reprodukciju u gornjem lijevom kutu, a tu je moj app.
Nisam ništa učiniti, a ja sam dobio slatko izgleda iPhone app.
Ako želim da ga se zaustavi, možete kliknuti gumb zaustavljanje
jer to je više zabave.
>> Ajmo reći da sam zapravo žele nešto dogoditi kad sam pritisnite ovu tipku.
Za to što trebam učiniti je da morate stvoriti
novi događaj rukovatelj ili akcije.
To znači da moram stvoriti neku metodu da želim da se zove
kad sam pritisnite gumb, pa neka je stvoriti novu metodu.
Ja sam unutar ViewController.h.
Moram reći da je metoda postoji.
Trebam crticu prvi jer ću se zove ova na more kontroler.
Moram dati ovo tip.
Vrsta ovo će biti da IBAction stvar koju smo vidjeli ranije.
To je događaj rukovatelj, tako da će se vratiti IBAction,
i to je nagovještaj da Xcode reći da
to je nešto što želim spojiti nešto.
Ja mogu dati ime, kao buttonPressed, zarezom.
>> Sada sam proglasio novu metodu unutar mog razreda.
Ja sam rekao ova metoda mora postojati.
Sada ćemo doći u ViewController.m,
i recimo ono što je ova metoda može učiniti.
Ako sam početi pisati, primjerice, (void) buttonPressed
Obavijest XCode je stvarno lijepo i autocompletes za mene.
To je stvarno prekrasno.
Obavijest ovdje da unutar. M. datoteku Ja također mogu reći prazninu,
a to je zato da IBAction nije zapravo vrsta.
To je zapravo hashtag definirana negdje biti nevažeće,
i opet, to je samo nagovještaj da Xcode da kaže
Želim da ovo bude događaj rukovatelj, pa ćemo vidjeti zašto je u samo sekundi.
Kad se pritisne tipka ću učiniti nešto neugodno
sviđa prikazati popup.
>> Za to sam može stvoriti novu instancu te klase pod nazivom UIAlertView,
i to je klasa koja Apple je napisao da će se prikazivati ​​dosadne pučanstvo.
Mi ćemo pozvati ovu popup upozorenja, a ja imam dva koraka, zapamtite, za stvaranje ovaj objekt.
Prva stvar što trebate učiniti je izdvojiti prostor.
Želim UIAlertView.
Želim da dodijeli prostor. To je moja prva metoda.
Moj sljedeći način je želim ga inicijalizirati,
i tako ja imam tu veliku, dugu metodu zvanu initWithTitle.
To u osnovi će kontrolirati ono što ovaj skočnu kaže.
Naslov moje popup može biti zdravo.
Poruka je to skočnu može biti "Ovo je iOS."
Delegat stvar, ne znam što je.
Recimo to je ništa.
Sada gumb koji će se pojaviti možete reći nešto poput: "To je sigurno",
a ja stvarno ne želim nikakve druge tipke, pa ajmo izbrisati da i zatvorite držač.
>> Ok, ja sam stvorio dodatni jedan. Tu ćemo ići.
Ovo je kako ja mogu stvoriti novi popup.
Ako želim da se zapravo pokazati popup želim pozvati show metodu.
Za to mogu reći i pokazati upozorenja,
i opet, samodovršetak je super lijepo.
Ako sam zaboravio što je to, ako sam upisali u s.,
Ja možete prelistavati ovdje shvatiti što je to,
i to filtrira lijepo.
Sada sam stvorio ovaj novi popup.
Vratit ćemo se na ono što delegat znači kasnije,
i sada želim reći želim ova metoda biti ispaljene
kad sam pritisnite gumb, pa ću se vratiti na moje scenarija,
i ja želim da sada pridaju ovu IBAction.
Prva stvar koju želite učiniti je kliknuti na tipku.
Kad sam pritisnite ovu tipku Želim nešto dogodi.
Neću da držite kontrolu.
Idem kliknite i povucite od gumb
na ovamo gdje se kaže View Controller.
Možemo vidjeti da je to lijepo svijetli.
>> Ako sam pustio s mojim mišem sada imam ovo skočnu ovamo gdje imam neke opcije.
Jedan od njih je i događaji koji mogu registrirati.
To su sve od tih metoda sam prijavljenih u mojoj h datoteku kao IBActions.
Ovo je način kako XCode zna što bi se trebao pojaviti u ovom malom popisu,
tako da je samo nagovještaj.
Ako sam kliknite na gumb pritisnut, ja sada ste registrirani događaja rukovatelj.
U JavaScriptu smo imali za reći imam neki kod koji registriran događaja rukovatelj.
U Objective-C to je stvarno tako jednostavno.
Ako sam pokrenuti ovaj opet
Sada kad sam pritisnite tipku moj događaj rukovatelj ide na vatru,
i ja ću dobiti ovaj popup.
Super, super jednostavna tamo.
>> Ako ste ikada željeli vidjeti sve događaje koji se dogoditi da bude registriran
na komponente ako ja kliknite na ovaj gumb
i ja doći ovamo na desnoj strani
prvi možete vidjeti ovdje mogu napraviti stvari kao tip gumba,
tako da ako želite jedan od onih koje sam je ili na Dodaj kontakt gumb
ili što god.
Ako želim vidjeti sve događaje koji su se na taj gumb
ako dođem skroz ovamo na desnoj strani
možemo vidjeti ovdje na događaje imam svih tih različitih događaja.
Ja mogu pritisnuti gumb, kad sam neka ide na gumb, kad sam dvostruko slavinu ili što god,
i jednom sam samo registrirani je ovaj događaj nazvao Touch Up Inside,
i to kaže da će, čim mi je prst dolazi off gumb
taj događaj ide na vatru, i to je upravo ono što se upravo dogodilo.
To je vrsta zadani gumb pritisnut događaja.
>> Sva pitanja do sada?
Ok, to je kako možemo početi spojiti se stvari u našem kodu
u stvari unutar našeg sučelja.
Zapamtite prva stvar koju smo morali napraviti je pronaći kod,
i onda smo poslali gore sučelje koda,
i tu je naš prvi app.
Dobro, to je stvarno cool, a mi smo stvorili ovu tipku.
Što ako mi ne želite imati stvoriti hrpa svojstava
predstavlja ove tipke?
Na primjer, u Tic Tac Toe imam devet tipke,
i to bi bilo super, super neugodno morati povući i ispustiti 9 puta
ili ako sam morao napraviti Tic Tac Toe sa 81, umjesto od 9
a ja sam morao povući i ispustiti 81 puta, a to je hrom.
Što možemo učiniti umjesto toga je mnogo kao HTML
kada smo imali stvari poput osobne iskaznice i imena i možemo tražiti stvari
njihov ID, tu je sličan pojam u iOS naziva oznake.
>> Oznaka je jednostavno jedinstvena brojčana oznaka za komponente.
Ako kažem to ima oznaku 0, na primjer,
ako sam stvoriti gumb i dati mu oznaku 0, pa ćemo vidjeti kako to učiniti u samo sekundu,
ako želim dobiti taj gumb sam jednostavno mogu reći želim pozvati
the viewWithTag način na objekt ovamo,
self.view, koji predstavlja trenutni zaslon, na primjer.
Ako sam nazvati taj viewWithTag metodu, ja ću se povući gumb s oznakom 0.
Ajmo pogledati ovo izgradnjom Tic Tac Toe.
Prvo, ovo je moja knjiga snimanja.
Ja sam stvorio te 10 UI tipke.
Obavijest oni su svi iste veličine.
Ako sam kliknite na jednu od tih i ja vratiti ovdje na ovoj desnoj strani
vidjet ćete da prilagoditi font ovdje, pa sam napravio font malo veći,
ali ono što sam i učinio je sam postaviti ovu oznaku.
Rekao sam da to ima oznaku 1, a to je vrh lijevo.
>> Sada, ako sam pritisnite drugi gumb, kao što je ovaj drugi jedan ovdje,
Sada ćete vidjeti da je moja oznaka je dva.
Svaki od tih tipki samo ima jedinstvenu oznaku,
pa to je kasnije kako ću početi interakcije
s mojom aplikacijom.
To je sve unutar jednog pogled kontroler,
ali ovdje je ono što imamo.
Imamo tri svojstva ovdje.
Prvi i zadnji će predstavljati stanje mog odbora.
Uglavnom ovo prvo je niz predstavlja kojima XS i Os su.
Ovaj drugi ovdje nam govori čiji red je.
Primijetit ćete da imam i te stvari ovdje.
Prije kad smo proglasili svojstva smo im dali ime i tip.
Također možemo im dati neke dodatne informacije ovdje.
Ovaj prvi kaže nonatomic, i što to govori
je u osnovi samo jedna stvar će ikada biti pokušavate pristupiti ovu varijablu na vrijeme.
Ti bi mogao učiniti više složenih aplikacija koje su multi-navojem,
pa natrag u Scratch imali smo različite teme,
i različiti duhovi mogu raditi različite stvari u isto vrijeme.
>> Ako to nije slučaj, koji se ne nalazi u svemu što ćemo biti obličje at,
ako kažemo nonatomic to zapravo događa da bi se stvari malo brže.
Također imamo ovu stvar zvanu dodijeli, jak, ili je slaba.
Ovo dodijeliti samo kaže da je to standardni tip.
To nije predmet ili pokazivač, jer to je samo bool,
tako bool je izgrađen u Objective-C.
To, kaže, ne pokušati učiniti ništa fantazija s pokazivačima ovdje.
To je redoviti djelitelj stari.
Jaka i slaba, to slaba kaže da je zapravo
Želim da se to upućuje na nešto u prikazu regulatora.
Neću da se zapravo izdvojiti ili init to sam.
Sučelje graditelj, kad sam pokrenuti aplikaciju, koja će nositi svu tu inicijalizacije.
Ako kažem slabi, da kaže netko drugi će biti stvaranje ovo.
Ako kažem jaka, to govori da ću biti jedan
da je stvaranje ovog odbora objekt,
pa ovdje imam još neke metode ovdje,
Primjerice, akcija za kada nova igra se pritisne tipka,
akcija za kada bilo koja od ostalih gumba se pritisne,
i et cetera.
>> Nećemo dobiti u previše logike Tic Tac Toe,
iako je to vrlo uzbudljivo, ali ajmo pogledati
neke od stvari koje možemo učiniti unutar iOS.
Ova nova igra metoda će dobiti otkaz
kad sam pritisnite tipku novu igru.
Za kuka da se ja jednostavno doći do moje scenarija.
Ja kliknuo na novoj igri.
Ako dođem ovamo na desno vidim da
Touch Up Inside je priključena na newGame metodom.
To je razlog zašto se to događa s dobiti otkaz.
The newGame način će se napraviti neki set up.
To će reći želim vam da jasno stanje na ploči.
To je lijepo metoda na promjenjiv polja.
To će reći da je sada X red,
i sad ću iskoristiti ovu viewWithTag stvar.
>> Znam da su moji gumbi imaju oznake 1-9,
i to je nešto što sam proizvoljno odabrao.
Ako želim postaviti tekst svakog gumba biti prazna
jer sam tek počeo novu igru, a ja ne želim da itko
XS ili OS da se ostavi preko mogu to učiniti.
Ja mogu reći hoću pogled s oznakom, 1, 2, 3, 4 et cetera.
To će povući drugi gumb svaki put.
Ovdje ću ga baci na UIButton.
Baš kao što smo mogli baciti Ints da pliva i obrnuto
to kaže da ja želim da se baci to na UIButton.
To znači da tip to će biti UIButton *
jer upućuje, ali ne brinite, oni nisu zastrašujuće više.
>> Jednom sam ovaj gumb ću pozvati metodu na njega.
Ova metoda se zove setTitle forState, i tako to kaže
Želim postaviti tekst gumba biti prazan string,
i ja želim da bude prazan string kada to nije pritisnuta.
Ako sam koristeći ovu metodu, ja mogu promijeniti tekst gumba
čim ga netko udari, ali želimo reći kada tipka samo sjedi tamo
Želim tekst bude prazan.
Konačno, mi ćemo inicijalizirati moju ploču,
a ja ću reći da je sve trenutno na 0,
tako da ova ploča članovi nepromjenljiv je promjenjiv niz,
što znači da se može nazvati addObject metodu i samo 0 unutar nje.
To je ono što se događa kada sam stvoriti novu igru.
>> Idemo pogledati još jedan.
Ova metoda je ovdje IBAction da će se pritisne
svaki put kada jedan od tih kvadrata se pritisne.
Sada imamo neke Toe Tic Tac logika ovdje.
Mi shvatiti čiji red je,
i na temelju toga mi ili postaviti X ili O,
ali smo primijetiti da smo ponovno korištenje ovaj isti događaj rukovatelj
za svaki jednoj od tih tipki.
To znači da ne moram metodu gornjem lijevom tipkom,
različite metode za gumb donjem desnom, iako sam mogao imati učinio.
To stvarno ne bi bilo dobar dizajn.
Što ja radim ovdje je zapravo sam ću odrediti
što je oznaka na gumbu koji je pritisnut je.
Možete primijetiti da je ova igra metoda uzima jedan argument.
To se zove pošiljatelja, a što pošiljatelj je pošiljatelj će
predstavljaju upravo ono što je poduzela akciju na.
Ako sam pritisnite gumb, to pošiljatelj će biti da UIButton
da sam zapravo pritisnuli, pa to znači da je UIButton
ima oznaku jer sam stvorio oznaku.
>> Ako želim da se na oznaku ja jednostavno mogu reći
Želim oznaku od pošiljatelja,
i opet, samo sam ga lijevani na UIButton.
Ja znam da je pošiljatelj će biti UIButton.
To ne mora uvijek biti UIButton.
Mogao bih, na primjer, registrirajte isti rukovatelj događaja
za jedan gumb, jedna za klizač.
U ovom slučaju, znam da su svi gumbi, pa ću reći
Želim da ovo bude gumb, a zatim mogu dobiti oznaku,
i od krpa ja sada znam gdje sam unutar uprave.
Tada sam jednostavno možete postaviti bilo X ili O, može okrenuti okrenuti,
Provjerite tko je osvojio, et cetera.
>> Sva pitanja na ovo do sada?
Ok, sve kod smo objavili online-ne želimo da se u previše
od Tic Tac Toe logike, ali sada možete vidjeti da je stvarno
Svi mi radimo je da smo petlje nad ovom polju,
pa imamo par za petlje ovdje, a mi smo samo usporedbom vidjeti
mi imamo utakmicu u svim redovima, utakmica u stupcu ili nešto slično.
Da zapravo pokrenuti ovu aplikaciju, ako sam kucnite na jednom od tih tipki
da igra je metoda otkaz, pa to znači da sam samo postaviti
Tipka biti X, tako da sada ova tipka će biti O, i tako dalje,
pa to je kako smo počeli komunicirati s tom jedinstvenom stranice app.
>> Mi ćemo postavljati kôd, pa slobodno prostudirati da,
ali ajmo sada govoriti o nekim aplikacijama koje su više nego samo jednu stranicu.
Kao uzbudljiv kao Tic Tac Toe je, puno aplikacija unutar iOS
su vrsta tih bušilica dolje stvari s višestrukim zaslonima.
Prvi koncept koji ćemo morati razgovarati o su protokoli,
a protokol je jednostavno skup metoda
da li mogu obećati da definiraju.
Ako sam napraviti ovaj novi protokol s dvije metode, ovaj prvi jedan,
ako povratni tip je ništetan, nazvao sam ga foo.
Potrebno nema argumente. Imam još jedan način.
To vraća int. Zvao sam ga zabranili, i to traje jedan argument.
Sve ovo je protokol koji se zove SomeProtocol ovdje,
ovo je set stvari koje netko može provesti.
Nisam unutar ovog protokola je rekao ono što foo radi.
Umjesto toga, ja sam samo rekao da bi mogao definirati foo ako želite.
Ako sam stvaranje prikaza kontroler ili stvaranje razred
Ja mogu unutar tog razreda obećanje da će provesti
neke od tih metoda, tako da za primjer, ako kažem
ovo sada kaže da izmišljam obećanje za vas da unutar
ove klase pogled kontroler ću imati definicije za oba foo i bar.
>> Zašto je to korisno?
Puno komponenti unutar od iOS iskoristiti ovu
dizajn uzorak zove izaslanstvo, a što delegacija kaže
je da, na primjer, ako imam tekstualni okvir
a tu su i neki događaji koji bi mogli biti registrirani unutar mog tekstualnog okvira,
nego stvaranje zasebne događaje što mogu učiniti je što mogu reći
delegat ovog tekstualni okvir će biti neki objekt.
Kad kažem da je to delegat sada to znači da
kad neki događaj koji bi bio ispaljen u tekstualni okvir
umjesto da se registrirate ga ili bilo što slično
to je samo ide na poziv način na delegata.
Na primjer, unutar mojeg tekstualnog okvira Imam metodu za kad sam pritisnite
da obavlja gumb u donjem desnom kutu,
i tako nego Registracijom događaj rukovatelj što mogu reći je
tekstualni okvir, ovdje je objekt koji želim pozvati metodu na
Svaki put kad netko pritisne gumb Gotovo,
a to znači da je taj objekt mora provesti neke protokol
koji kaže Obećavam da definira tu učinio gumb akciju,
jer ako on ne definira tu metodu i pritisnite Done,
onda će to biti zbunjujuće.
>> Idemo pogledati primjer.
Ovdje sam jednostavno imati jedan tekstualni okvir,
i jedna od karakteristika ovog tekstualnog okvira ovdje na ovoj desnoj strani je delegat.
Ovo je svojstvo klasi.
Ono što sam učinio ovdje sam kontrolirati kliknuo, i ja povući iz ove točke ovamo
za pogled kontroler, i da kaže sada izaslanika ovaj tekstni okvir
će biti pogled kontroler.
To znači da kada neke akcije dogoditi, nego Registracijom
odvojena događaja rukuju želim vam da ih poslati delegata.
Sada ćemo pogledati moj pogled kontroler.
Unutar. H datoteku sam napravio obećanje.
Ja sam obećao da će provesti neke metode unutar ovog protokola
zove UITextFieldDelegate, i opet,
ovo je samo neki popis nekih stvari koje mogu izabrati za provedbu.
>> Ako sam došao ovdje u mom. M. datoteku, sam provesti jedan takav način.
Zvao sam ga textFieldShouldReturn
jer to je ono što je nazvao unutar protokola.
I sad kad sam pritisnite gumb Gotovo unutrašnjost to polje
to je ono što se događa da se zove, pa nisam registrirajte događaj rukovatelj.
Ja spojen izaslanika, a kad je ovaj događaj je ispalio
ovo je metoda koja će se pod nazivom, pa ako dođem ovamo na moj scenarija i pokrenuti ga-
dok da je utovar možemo vidjeti što je to čini.
Na mom ekranu imam dvije stvari.
Imam ovaj tekst polje, a ja imam tu naljepnicu.
Ja sam jednostavno govoreći Želim tekst ove oznake
biti jednaka bez obzira korisnik upisao u unutrašnjosti tekstnom polju.
Ovaj sljedeći redak ovdje je jednostavno način da sam pozivom
na tekstualno polje na kojem piše Želim vam da sakriti tipkovnicu.
Ovo je samo proizvoljna metoda koja Apple je izabrao.
>> Opet, prije nego što sam učinio sve što sam morao spojiti sve gore, tako da sam prvi put došao ovamo.
Od pogleda kontroler sam povucite preko tekstualnog okvira.
Sam pustio, a ja mogu vidjeti da se ovdje mogu napraviti ovu nekretninu tekstualno polje
jer ovdje u prikazu kontroler sam definirao nekretnine
to je IBOutlet teksta polja.
To govori da mogu spojiti ovu nekretninu gore
u tekstualno polje u mom UI.
Sada kada sam kliknite na ovu mogu početi pisati.
Sada, ako sam pritisnite gumb učinio je to ide na vatru
događaj koji sada mogu odgovoriti.
Nema događaja rukuju.
To je kako sam samo reagirao na to učinjeno gumb.
Smisla?
>> Ovo nije dizajn uzorak koji-ne ikada mogli pronaći sebe
kreiranje vlastite protokol, ali samo znam da su neki
različiti iOS komponente registrirati događaje na različite načine.
Tipke, na primjer, koristiti one IBActions.
Tekstualna polja, s druge strane, će koristiti delegate.
Možemo vidjeti i možete gledati sve to do unutrašnjosti dokumentacije.
Usput, tu je zapravo tona UI stvari izgrađen u iOS za vas,
tako na primjer, način na koji sam napravio da kažu učinjeno u donjem desnom kutu
je sam odabrao ovaj tekst polje.
Došao sam ovamo.
Ja svitak dolje malo vratiti ključ,
a ja zapravo mogu napraviti ovo cijela hrpa stvari, kao što ako želim to reći
hitnog poziva umjesto ja mogu učiniti, što je potpuno slučajna,
i ne znam zašto je izgrađen-in hitne gumb,
ali postoje, ona kaže hitne u jako malim slovima.
Tu idete.
>> Definitivno istražiti sve ove različite mogućnosti u iOS.
Sva pitanja o delegatima?
Opet, samo zanimljiv dizajn uzorak koji bi trebali biti svjesni.
Ok, ajmo sljedeći pogledati tablice pregleda.
Tablica pogled je u osnovi da popis stvari koje je sve više mjesta u iOS.
Kada ste flipping kroz sve svoje kontakte, gledaš
postavljanje stranica, a takav popis stvari koje se naziva tablice pogled.
Implementacija tablice pogled na iOS je prilično jednostavna.
Umjesto donošenja klase koji se spušta iz tog UIViewController
kao što smo učinili prije jednostavno trebamo reći nego
sve UIViewController ne želim to učiniti,
Kažem sve UITableViewController ne želim to učiniti,
tako da jednostavno dodaje neke dodatne stvari koje su potpuno učinio za nas.
Moramo učiniti vrlo malo osnovi popuniti praznine unutar stola.
>> Kako bi se prikazali tablicu moram odgovoriti na neka pitanja.
Prvo pitanje moram odgovoriti je koliko dijelovi su u tablici?
Kada ste flipping kroz kontakata app primijetit ćete da je to vrsta
organizaciji Kao, onda imate BS, a imate taj mali sub zaglavlje.
Svaki od tih se zove dio.
Vi svibanj ili svibanj ne treba ti.
Prva stvar koju trebate učiniti je provesti postupak
zove tableView: numberOfSectionsInTableView.
To jednostavno vraća koliko sekcije imate,
tako da bi to mogao reći vratiti jedan ako imate jednu veliku tablicu pogled.
Sljedeće pitanje koje iOS treba znati je koliko redaka imate?
Na primjer, da ste flipping kroz prikazu tablice.
Imate određeni broj pjesama gledaš ili fiksni broj kontakata.
Ako ste mi, naravno, nije da su mnogi,
pa to je kako iOS zna koliko stanica za prikaz.
>> Opet, to bi moglo reći nešto poput povratka 3.
Moj stol pogled ima tri reda.
Konačno, iOS treba znati što svaka stanica izgleda,
tako što se zapravo događa učiniti je nazvati ovu metodu ovdje dolje,
ovo tableView: cellForRowAtIndexPath.
To će se zvati ovu metodu na svaku pojedinu ćeliju unutar vašeg stola.
Kako to znati koliko puta se to nazvati?
Pa, vi to rekao unutar broja redaka u sekciji.
Mi ćemo nazvati ovaj na svakoj od naših stanica,
i unutar toga je mjesto gdje možete zaista učiniti stvari kao što su
postaviti tekst ili vam reći što da se malo plavi gumb na desnoj strani radi.
Uzorak za dobivanje ove stanice, idemo koristiti ovu metodu
zove dequeueReusableCellWithIdentifier.
>> Objective-C je zapravo vrlo dobro poznat po smiješnim duljine njihovih metoda imenima,
i to je stvarno lijepo slučaj u točki primjer.
Što je ova metoda radi je to samo kaže želim da mi dati ćeliju.
Samo iOS stvar.
Ako imate nešto poput 100.000 pjesama na vašem iPod
ono što iOS ne želite učiniti je izdvojiti 100.000 stanice,
jer ako si na vrhu popisa, da li vi stvarno trebate alocirati memoriju
za ćeliju koja je 99.000 redaka dolje?
Ne, jer kao što ste listanje možete vrsta izdvojiti kao što ide zajedno.
To je učinio za vas.
Vi ne morate brinuti o svim tim glupim performansi stvari.
Sve što kažu da je nazovete ovu metodu dequeueReusableCellWithIdentifier,
i to kaže, u redu, ako je potrebno da ću stvoriti novu ćeliju za vas.
>> Ali, ako ste na dnu tablice, a već ste izdvojila neke stanice
na vrhu tablice da ste stvarno ne ide trebati uskoro
Ja ću vam dati jedan od onih natrag umjesto dodjele novu,
i tako je to lijepo performanse briga.
Vi ne morate izdvojiti stanicama sebe.
To će vam dati natrag ćeliju.
To će se vratiti na vas mobilni objekt.
Nakon što ste mobilni objekt možete učiniti stvari na njega.
Možete postaviti tekst u ćeliju s ovom objektu zvanom tekst natpisa.
Možete dodati da strelicu na desnoj ili nekom drugom slučajnom stvari
s ovim drugim imovine zove accessoryType, i tako dalje i tako dalje.
>> Idemo pogledati zapravo provedbi tablice pogled sada.
Kad sam stvorio ovaj projekt
nego govori jedan pogled aplikaciju sam zapravo došao ovamo
da gospodar-detaljno primjeni, i tako u osnovi to odgovara mail app
na ipad s tablice pogledom na lijevo i zatim sadržaja na desno.
Na iPod ili iPhone će to odgovarati jednom prikazu tablice.
To je mjesto gdje sam dobio starter kod.
>> Neka prvo pogledati ploču scenarija.
Sve je to učinio za mene, u osnovi stvorio.
Ovaj navigacijski bar mi nije pokazao što je primjer stanica moglo izgledati,
i ja dvostruko kliknuti to promijeniti naslov.
Svi ostali problemi UI mogu nositi tamo.
Datoteka zaglavlja izgleda jako jednostavno.
Umjesto da je ovo UIViewController mi sada reći je to
TableViewController, tako da smo znali da želimo pozvati sve one tablice metode.
Sljedeća Želim stvoriti nekretninu koja će predstavljati
stvari unutar mog stola.
Ovaj stol će se samovoljno prikaz
popis voća, pa moram stvoriti neku niz
u kojem mogu umetnuti voće.
Unutar moje provedbe datoteku prva stvar želim učiniti
je želim da biste bili sigurni da inicijalizirati ovaj niz.
>> Rekao sam alloc init, stvorio moju voćni niz,
i ja sam dodao četiri stvari na njega, jedan od kojih je mnogo više nego kontroverzni druge tri.
I sada imam niz veličine 4.
Mi smo ga trese u CS50.
Ja sada imaju niz od četiri veličine.
Sada ću početi odgovori na ta pitanja, i zapravo,
kad sam stvorio ovu aplikaciju je sve to već učinio za mene.
Nisam imao upisati se broj sekcija u prikazu tablice.
To je već bio tamo, a ja sam popunjavanje praznine.
Koliko sekcije imam?
Jedan. Sve učinjeno.
Koliko redaka imam?
Pa, imam jedan redak za svaku voća, pa to count
je vlasništvo bilo niz koji kaže kako je velika je to?
To je koliko redaka imam.
Konačno, moram reći ono što ne svaka stanica izgledati?
Ja ću reći dequeueReusableCellWithIdentifier.
>> Opet, to je već bio napisan za mene.
Nisam to morati učiniti ja osobno, i želim se vratiti
ova stanica na ovoj lokaciji.
Sjetite se da smo zovete ovaj isti način na svakom jednoj ćeliji,
i taj argument ovdje, ovo indexPath argument,
kaže ono red sam u.
Ako kažem indexPath.row ovdje dolje
to će biti 0, onda će to biti jedan, onda će to biti dva, i to je tako znam
ono stanica Ja sam trenutno prikazuje.
Želim postaviti tekst u ćeliju koristeći ovu textLabel nekretnine
ići u mojoj voća niz i dobiti
objekt odgovara svakom redu.
Ako je to niz, ja sam sada postavljanjem
tekst nekretnina u niz.
Ja mogu napraviti jednu drugu stvar.
Ja također mogu prijaviti događaj rukovatelj na svaku od stanica,
pa kad sam dotaknite svaku od tih stanica
ovo didSelectRowAtIndexPath, ovo će biti pozvan za mene,
tako jednostavno definirajući to ja sada mogu nositi ono što se događa
kad dodirnete ćeliju, a opet, mi prolazi u kojima stanica je odvodom
tako da možemo ponovno ovu istu događaj rukovatelj za sve naše stanice.
>> Opet, to je nešto iOS radi za mene.
Ajmo prikaz drugog dosadnih popup
da jednostavno kaže da bere nešto gdje da nešto
će biti red objekt.
Kad sam pokrenuti ovaj, ja ću imati ovu lijepu tablicu pogled
s jednim redom za svaku od tih plodova, a ako sam dotaknite jedan
to mi govori što se dogodilo.
Smisla?
Idemo graditi malo složeniji od app,
koliko klikom ste odabrali rajčice je.
Lijepo dio o storyboarda
se to ne samo da će nam pomoći da dizajn ekrane pojedinačno,
također će nam pomoći povezati cijelu našu aplikaciju,
tako da konačna app ćemo biti Zgrada je ovo lijepo sportsko čitač vijesti,
i tako to ide da imaju više ekrana, pa sam zapravo može predstavljati
svaki od tih više ekrana na scenarija,
i ja mogu zumirati i vidjeti moju aplikaciju iz visokoj razini.
>> Da bi se stvorili novi element unutar mog scenarija
to je stvarno jednostavan unutar sučelja Builder.
Ako želim dodati još jedan zaslon za to, na primjer,
Prvi put sam se udaljili s prikliještiti zoomom da Apple voli toliko,
i ovdje dolje prije nego što sam potražiti na gumb
i ja povucite i ispustite gumb
ako želim stvoriti novi ekran sam zapravo može samo povucite i ispustite
cijeli kontroler pogled, pa ako sam pokupiti ovo, povucite ga ovamo,
hej, postoji još jedan zaslon, pa sada koriste taj isti scenarija datoteku
Ja mogu imati sve ekranima unutar moje app, a ja mogu smanjivanje
i vidjeti kako su u interakciji.
To neće komunicirati gostiju.
Način na koji ti dva ekrani interakciju je definiranje odnosa.
Vi zapravo možete reći ovaj zaslon, kada pritisnete ovu tipku,
Želim vam da slajd preko ovog novog zaslonu.
To znači da je ova vrsta odnosa između
prvi zaslon i drugi zaslon.
Imat ćete osnovi strelicu iz tog gumba na drugom zaslonu
rekavši da kada pritisnete ovu tipku da tamo želim ići.
Baš kao što smo nadziru kliknuli i dovukao do definirati one poslovnice
idemo napraviti istu stvar za definiranje ove segues.
>> Vidjet ćemo primjer za to, i prije nego što smo zapravo prijelaz
iz jednog zaslona na drugi iOS je lijepo dovoljno pozvati ovu metodu
zove prepareForSegue, a to je mjesto gdje možemo početi
slanje podataka iz jedne aplikacije u drugu.
U primjeru smo o gledati na to u osnovi će omogućiti nam
za filtriranje bejzbol timova lige i podjelama.
Kad sam odabrati ligu, na primjer, želim da tranzicija
za moj sljedeći ekran gdje mogu prikazati sve podjela
u toj ligi ili svih različitih timova.
Trebam poslati na tom ekranu ono teams trebali prikazati.
Za to ću iskoristiti ovu metodu ovdje.
>> Konačno, samo slučajni točka na iOS.
Ako želite pohranu podataka tu je ta stvar, zvana osnovnih podataka,
koja je zapravo vrsta komplicirano raditi.
Također možete koristiti SQL za pohranu podataka,
koji, opet, je lijepo, ali nekako na više komplicirano strani raditi,
ali iOS također podržava ove stvarno cool stvari zove imovine popisi,
i nekretnina popis je samo datoteka koja predstavlja ključne parova.
Možete definirati popis tipki, a vi reći da je ovo ključan će biti niz.
Ovaj ključ će biti niz, i, zapravo, sve što možete učiniti
u JSON možete učiniti unutar jednog popisa svojstava,
pa ovo je stvarno lijepo nam omogućuje da rade s nekim podacima.
Na primjer, ja imam ovu Teams.plist da sam stvorio.
Napravio sam novu PLIST datoteku, a ja mogu izbušiti dolje.
To je rječnik, to je rječnik, to su žice,
i tako je to lijepo grafički prikaz JSON dokumenta
ili samo set ključnih vrijednosti parova,
pa to je podatak da ću raditi s unutarnje strane moje app.
>> Idemo prvi došao ovamo. Imamo puno više datoteka sada.
No, neka prvi došao ovamo na ploču scenarija.
Storyboard ovdje, ako ja mogu zumiranje-
sada možemo vidjeti da je to tijek mog app.
Prvi put sam ću početi na ovom zaslonu.
Idem drill down ovom zaslonu,
i ja ću izbušiti dolje na ovaj zaslon, a možemo vidjeti da se ovdje, ako sam vrsta
premjestiti jednu od njih oko koje smo ove strelice ide odavde do ovdje,
i način na koji sam definirati taj strelicu je ako sam povećavanje malo,
i ako sam došao preko ovaj prikaz regulatora,
i ovdje je mobitel, a želim reći da kad dodirnete ćeliju
Želim vam da slajd na drugu zaslonu.
Ja jednostavno držite kontrolu,
pomicanje na malo, držite kontrolu, povucite ćeliju više i pustiti.
>> I ovdje možemo reći ono što je prijelaz koji želite koristiti?
Želite li koristiti taj slide stvar koja se zove guranje?
Želite li da slajd s dna?
To se zove modalna.
I kad sam kliknite na jednu od njih, to će izvući ovu strelicu za mene,
a to znači da sam zapravo rješava ono što se događa kad sam pritisnite ovu tipku grafički.
Nisam pisati bilo koji broj zapravo micati s jednog zaslona na sljedeći jedan.
Ja definirana ovo vizualno unutar sučelja Builder.
Ako sam kliknite na ovu strelicu, možemo vidjeti da sam dao ovu stvar ime.
Zvao sam ga showDivisions, a to je tako da mogu znati
što tranzicija će se uskoro dogoditi, a mi ćemo vidjeti zašto u samo sekundi.
To je kako sam ožičen različite ekrane u mom app.
Ako je ovo bila tipka, na primjer, umjesto stol pogled,
Ja bi mogao kontrolirati kliknite na gumb, povucite preko sljedećem zaslonu,
a to je kako ja mogu učiniti navigaciju na taj način.
>> Stvarno brzo, ako dođemo u MasterViewController,
opet, mi jednostavno idemo definirati popis stvari
koji će se prikazati u prikazu tablice.
Ovdje govorim želim da se taj PLIST datoteku,
i želim vam da ga natrpati u rječniku,
i nakon što su taj rječnik, ja ću odgovoriti na ta ista pitanja opet.
Ovdje je broj odjeljaka.
Jedan od njih, postoji jedan redak za svaku ligu, a tekst svakoj ćeliji
mora biti ili prvi, prva liga, druga liga, i tako dalje.
Konačno, ja ću koristiti ovu metodu da smo upravo vidio zove prepareForSegue,
i to je način da će dobiti otkaz kad sam kliknite
na jednom od tih redaka i stoga aktiviranje taj prijelaz
da sam postavio sa strelice.
To govori da mogu imati više
Odnosi s jednog zaslona na drugi.
Ako imam dvije tipke i svaki gumb vas vodi na drugu zaslonu
Ja ću imati dvije segues, jedan za svaki gumb.
Ali to prepareForSegue je, opet, će biti ponovno
za svaki od različitih odnosa, pa to znači da moram način
identificiranja ako pritisnete prvi gumb ili pritiskom na drugi gumb.
>> Sjetite se kada sam dao da segue ime, to showDivisions,
to je kako ja sada znam da je to segue da je aktiviran.
Sve što želim učiniti je što želim reći
Želim shvatiti što sam pogodio,
i tako bi dobili da, ja mogu reći hoću indexPath za odabrani redak,
sjećam indexPath samo kaže gdje sam samo kliknuo,
i onda želim reći želim shvatiti gdje idem.
Ovo destinationViewController, koji je vlasništvo segue.
To je zaslon Idem,
pa znam da je ekran ću se zove DivisionsViewController
jer sam stvorio tu klasu,
pa sad ako kažem d.divisions
Ja sam sada postavlja svojstvo pogled kontroler sam o da ide.
To je, kako sam slati podatke s jednog zaslona na drugi zaslon.
>> Samo gleda ovaj DivisionsViewController
možete vidjeti da se ovdje u. h datoteci
tu je da se imovina podjele, i to je ono što sam zapravo sam naseljavanja,
tako da je kako ja znam da sam prikazujući podjele odgovaraju
liga da sam kliknuo, i opet,
stvarna tablica pogled izgleda prilično mnogo isto, samo odgovorite onima
3 jednostavna pitanja kao i identificiranje
što se događa kada se premjestiti na sljedeći zaslon.
Samo par drugih stvari ovdje.
Možete primijetiti na vrhu da se ovdje umjesto govoreći # include
Ja sada govorim # uvesti.
Ovo je samo Objective-C stvar.
Uvoz je u osnovi ljepše verzija uključuju,
i za, primjerice, moramo znati što je to klasa,
tako da ja ne mogu samo reći DivisionsViewController.
Ako nismo hashtag standardio.c unutar naše. C datoteci
prevodilac nije imao pojma što printf bio.
Isto tako, ako ja ne uvesti DivisionsViewController
prevodilac stvarno nema pojma što je DivisionsViewController.
Samo pazite da unutar svoje različite. M. datoteka koje pobrinite se uvesti
odgovarajuće. h datoteke, tako da prevodilac ne zna što se događa.
>> Konačno, ono što Apple u konačnici ne se prikazati neke podatke pomoću web pogled,
i tako web Pogled je objekt u kojem možete ugraditi
malo web preglednik unutar svoje aplikacije.
Sve što trebate učiniti je dostaviti URL web pregledniku
pa želim ići na mlb.mlb.com,
a to je kako ja mogu pristupiti početnu stranicu za svaku momčad,
i tako prolazi u ovom URL
Pogled web može prikazati ovo za mene, a ja mogu pregledavati okolo,
i simulator je u uporabi od strane tog jednog.
Sada je to došao iz mog PLIST.
Ako sam kliknite ovaj to također došao iz mog PLIST, a to je klizna rukovati
definiranjem one segues.
Ja kliknite ovaj i još jedan,
i sada ovdje je moj UIWebView, pa baš kao da je
evo web stranice za URL koji sam upravo ugrađen,
i nisam imala nositi ništa ludo.
To je kako prikazati web-stranicu.
Stvari poput ove leđa gumb ovdje su također dali mi
potpuno besplatno jer sam definirao tih odnosa pomoću segues.
>> Ima li pitanja? Da.
[Studentski] Dakle, kada koristite alloc, da nikada ne morate ništa besplatno?
Točno, kada nazovete alloc i init nemate ga osloboditi.
IOS će nositi sve to za vas.
To je prekrasno, a niste nego nikakva pravila. Da.
[Studentski] Ako ste bili na uključiti više timova koji bi mogli stati na zaslonu,
će automatski imati scroll opciju, ili je to nešto što vam je potrebno dodati?
Točno, ako sam imao više timova, na primjer, to bi automatski obrađuju
pomicanje za mene, i sve performanse zabrinutost
s ogromnim stolom također su obrađene totalno za mene.
>> Ostala pitanja?
Sve ove koda će biti objavljena.
Mi vrsta premazani preko malo više manjih detalja,
ali stvari poput postavljanja neka svojstva na web pogledom
su samo stvari koje možete dobiti pregledavanjem Appleov dokumentaciju,
što je stvarno, stvarno lijepo iznio.
Oni imaju puno primjera aplikacije i primjer uzance
različitih API-ja, tako da definitivno prostudirati oni, ako možete.
Samo neke korisne veze možda želite pogledati.
Ovo su neki zgodan dokumentacija vodiča.
U URL-ovi su masivni, pa oni skratiti.
Ovaj prvi je cijela knjižnica dokumentacije.
Tu je malo traži barovi, pa ako počnete tipkati tipku
počet će dajući vam sve informacije o svim stvarima koje možete učiniti s gumbom.
Također sam uključen priručnik za programiranje Table View.
Ona obrađuje tablice pogled na mnogo više detalja,
kako to učiniti stvari kao što su dinamički dodati stanice ili urediti stanice ili ih ukloniti.
>> Ima puno primjera aplikacije iz Applea koji će vam pokazati kako to učiniti,
i na kraju, ovo zadnje je Human Interface Smjernice,
i to je u osnovi nekih rasprava o UI komponente,
stvari kao što ne bi gumb koji je 4 piksela po četiri piksela.
To je loša ideja, i druge stvari koje Apple želi da učinite
poticati dobar dizajn.
>> Bilo zadnja pitanja prije nego što smo završili gore?
U redu, definitivno slobodno-Idemo imati posebne oznake na raspravljati.
Mi ćemo imati iOS jedan, tako da definitivno slobodno koristiti to.
Ako želite raditi sa svojim kolegama na projektima
ili pomoći shvatiti neke random stvari iOS
slobodno me e-mail, i definitivno pregledati sve kod online, jer
samo u interesu vrijeme smo vrsta premazani preko više
finije grained detalji stvari.
Ali, ako ne, onda sretno na svojim iOS projekata, a nadam se da ćemo imati
veliki priliv aplikacija u App Storeu.
[CS50.TV]