[Powered by Google Translate] [Seminar] [iOS: Pisanje Apps Kot Boss] [Tommy MacWilliam] [Harvard University] [To je CS50.] [CS50.TV] V redu, vsi, dobrodošli na iOS: Pisanje Apps kot Boss. Seminar se bo osredotočil na pisanje aplikacij za iPhone in v zameno pisanje aplikacij za iPad, zato smo v bistvu gre na sprehod skozi nekaj različnih primerov, kako narediti aplikacijo, preprosta igra, kot Tic Tac Toe, ali če ste bolj zainteresirani za izdelavo aplikacijo kot neke vrste bralnik novic ali kaj podobnega, da komunicira z internetom bom govoril o tem, kot dobro. Tukaj je naš kratek program. IOS programi so napisana v jeziku, ki se imenuje Objective-C, in zato je to malo podobna C, vendar ni res na vse, Tako bomo lahko govorili malo o jeziku samem in potem kako graditi iPhone aplikacije, ki uporabljajo to aplikacijo program, imenovan Xcode, ki, če niste prenesli še vas prosimo, da začnete prenos zdaj. To je nekaj gigabajtov. To bi moralo biti brezplačno na voljo na App Store, tako da boste morali imeti Mac idealno nameščeno najnovejšo različico OS X. Če niste, ni problema. Imamo Macov v znanosti centru je na voljo za vašo uporabo z Xcode nameščen, zato vas prosimo, da uporabite tiste za razvoj. Če želite aplikacijo, vendar nimajo Mac, ne skrbite. Obstaja veliko kampusu sredstva za to. In tako potem bomo za kritje 2 večje primere različnih aplikacij, ki jih lahko naredite. Objective-C je tehnično, kar se imenuje super sklop C. To pomeni, da vsaka koda C velja tudi Objective-C kodo. To pomeni, da smo nekako kanal posnet na nekaj dodatnih funkcij za C. Nekatere od teh funkcij so, ne da bi kdaj napisal malloc enkrat, hvala bogu, ne da bi morali skrbeti teh neumnih kazalcev in njihovo sprostitev in vse te stvari sovražiš o C, in to je nekako izginil v Objective-C. Zdaj, Objective-C ima tudi veliko večjo standardno knjižnico, tako da je veliko več, funkcionalnost, ki jo dobite v prosti notranjosti Objective-C. Se spomniš, ko smo pisali PHP smo opazili, da smo šli iz to najmanjši jezik, velikan knjižnici vseh teh norih stvari, ki jih lahko storite. Isto se dogaja v iOS. Tam predmeti za stvari, kot budistični koledar, in res nič si lahko morda misliš verjetno že obstaja v izvajanju Objective-C je. Cilj del Objective-C je navajanje nekaj imenovano objektno programiranje. To je neke vrste nov koncept, vendar smo dejansko v glavnem naučili Veliko teh konceptov je že. Ideja objektno programiranje je, da greš za strukturiranje Veliko kodo okoli teh stvari, imenovane razrede, in so ti razredi res praznoval konstrukti. Notranjost je struct smo v bistvu rekel, tukaj je stvar, in lahko to stvar ima člane. Na primer, lahko vozlišča v povezanem seznamu so tudi druge stvari kot vrednost, kazalec na naslednji vozel v seznamu, in skupaj, da kazalec in da je vrednost sestavljajo to en primerek struct. Razredi so zelo podobni, razen razredi imajo lahko tudi funkcije znotraj njih. Ko smo razglasila struct, bi lahko samo rečem, int n ali vozlišče * naslednji. Zdaj z Objective-C lahko dejansko dal nalog znotraj teh stvari. Še ena stvar, ki lahko storite, je, da razredi more dedovati podatkov iz drugih razredov. Na primer, bomo morali iskati na kup vgrajeno v razredih Objective-C. Eden od njih bi lahko bil razred, ki predstavlja pogled za zaslon, in tako z besedami, želim izvajati svoj pogled smo v bistvu pomeni nekoga na Apple, verjetno res prijazni ljudje, napisal ta razred za mano, in je obdelal stvari, kot prikazuje gumbe ali bi bil zaslon, in mi bi bilo res bolečino izvajati vse te funkcije sami, zato jih preprosto dedovanje podatkov lahko rečemo, da ste storili vse, kar je v tem razredu Želim tudi znotraj mojem razredu, potem pa bom še nekaj drugih stvari, sicer izvaja aplikacijo. To je, kaj ta beseda pomeni, dedovanje. Bomo videli bolj konkreten primer. In končno, ključ z objektno programiranje, da vodi k inkapsulacijo podatkov. V nekaterih naš problem kombinacije lahko imamo te velike, globalne spremenljivke globals in povsod, in to je, kako sva spremljali stanje. Z razredov lahko začnemo inkapsulaciji informacij znotraj objekta. Če imamo en zaslon na naše spletne smo v resnici ne potrebujejo nobenih podatkov še en zaslon v naši notranjosti app, da in tako z zapornim stvari v razredih to dejansko vodi veliko bolje oznako modela, in to je mogoče z nekaj dodatnih funkcij Objective-C. OBVESTILA, sintaksa za Objective-C je banane. To je nekaj, česar smo videli prej, zato je malo krivulja učenja navaditi Kaj za vraga to pomeni? Toda, ko boste dobili mimo začetni krivulja učenja je to res, res gladka , da začnete pisati programe. Za prijavo razred, da sem rekel, je moj razred, obstaja, in morda tukaj je nekaj stvari, ki jih bom pozneje določiti, Jaz bom rekel @ vmesnika. Jaz bom rekel @ vmesnika. Jaz bom dal moj razred ime. In potem kasneje nekje drugje bom rekel @ konec, in vse vmes @ @ vmesnikom in na koncu se bo moj razred. To se bo, kaj je notri naših datotek. H. Tako kot v C naši h datoteke. Bistvu rekel tukaj je nekaj stvari, ki bodo obstajajo. Jaz ne nujno ti, kaj počnejo še, ampak prevajalnik mora vedeti, da obstaja. Kasneje znotraj našega. M-datoteke, ker m za Objective-C kjer se bomo dejansko dogaja, da določite, kaj ti razredi storiti. Podobno kot naše. Datotek c, če smo za implementacijo funkcij. Znotraj našega. M datoteko bomo tukaj povedati, kaj vse funkcije Notranjost moj razred, kar vsi. In končno, notranjost struct lahko rečemo, znotraj teh zavitih oklepajih int n ali vozlišče * naslednji, in Objective-C bomo uporabil ključno besedo @ nepremičnine, in to je tisto, kar se dogaja, da določite lastnosti, ali ne-funkcije, ki so del mojih razredov. Klicanje funkcije v Objective-C je tudi banane. Ko smo prijavljeni funkcije v C smo rekli nekako takole int foo in odprt paren, nato pa ji je dal seznam argumentov. To je tisto, o razglasitvi metode ali funkcije izgleda v Objective-C. Če želim, da razglasi funkcijo ali način če pravim način je res samo funkcija, ki je član razreda, Tako nekako zamenljivi, vendar ni res, tako znotraj mojega načina želim ustvariti novo metodo. To se dogaja, da se vrnete nič, tako da se bo praznine tipa. To je vrnitev vrsta moje funkcije. Zdaj imamo parens tukaj, ker, ne vem. Nato se bo ime moje funkcije, in na koncu bomo imeli podpičje, tako kot smo v C. Kaj je novega tukaj je ta človek tukaj. Ta vezaj je dejansko potrebno, in kaj to pove, da je Ta metoda tukaj mora biti imenovana na primer za razred. Ko smo objavili naše konstrukti bomo verjetno rekel nekaj takega kot struct vozlišča n, in da je dejansko ustvaril ali zaženejo eno izmed teh konstrukti, tako da sem dejansko začela delovati s tem, kar je znotraj njega, tako da je ta črtica pomeni, da moramo sprožajo razred, tako kot mi, da zaženejo struct preden lahko rečemo te metode na njej. Če želim, da začnete dodajati argumente mojih metod postane še bolj banane. Tukaj je moje ime metode. Potem bom imela debelo črevo, debelo črevo in po tem, da pravi, da prihaja nekaj argumentov. Ta metoda vzame en argument. Vrsta svoji trditvi je int, in ime te trditve ali je spremenljivka, da bom za začetek uporabe notranjost metodo sem klical. Tudi to je način. To traja en argument. Če želite začeti dodajanjem več argumentov, da postane bolj banane v tem, da smo to debelo črevo, ki pravi, tukaj je moj seznam argumentov. Ta prvi argument je celo število. No, to Drugi argument je zanimivo. Spremenljivka, da bom lahko v notranjosti z moje funkcije se imenuje f, tako znotraj mojega delovanja lahko rečem, f + = 1 ali kaj podobnega. To stvar tukaj je v bistvu ključno za to trditev ali parameter. Tako kot smo imeli parov ključev vrednost in nekaj podobnega JSON ali združevanja nizi Objective-C je odločitev za povedati, v redu, samo zato, da je zelo jasno, Ko kličete metodo, kaj vse ti parametri so Jaz sem dejansko dogaja, da naštejemo vse. Ko pokličete metodo, boste dejansko rekel andFloat, in potem boš dajati noter Zanimivo je, da se ta ne imenuje, ampak vseh drugih parametrov, tako da, če bomo imeli 3. trditev bi rekel andFloat in še plavajo in tako naprej. Ko sem klical te metode je seveda banane, tako da, če imam cilj in sem opredelila metodo imenovano foo, in želim, da ga pokličete, kot pravijo foo za odpiranje / zapiranje parens Grem odpreti konzolo. Tukaj je ime moje metode. Jaz grem zapreti nosilec, in to je predmet Kličem ga na. Ne pozabite, da vseh teh metod obstajajo znotraj razredov ker lahko razrede, določene metode znotraj njih. Tukaj sem samovoljno ustvaril predmet nekaterih razreda, in to je sintaksa za tem. Obstajata 2 koraki za ustvarjanje predmeta. Prvi korak je, da sem želite dodeliti prostora. To je enako, kot knjižnične funkcije malloc. Nimamo torej malloc več. Mi padla m, jo ​​alloc in je nadomestil. C. Z m. Ko smo alloc kaj bomo potem morali zagnati. V bistvu, ko ustvarjate predmete, boste morda želeli, da imajo nekaj logike ki izvrši, ko si ustvarjena, tako da lahko preide na nekaterih privzetih vrednosti ali kaj podobnega, zato je ta metoda init je tisto, kar dejansko ustvarja predmet. Najprej smo dodelitev prostora, tako kot smo to storili v C, in potem smo ga inicializirati, ki lahko ali pa ne naredi veliko. Potem bomo to stvar vrača v predmeta o. Tam je zvezda tu, ker je to tehnično kazalec, vendar ne skrbite, kazalci niso tako velik posel v Objective-C več. Zdaj smo zaženejo ta razred, imenovan NSObject, in to je samo naključna razred, ki ga je Apple. Smo zaženejo to, zdaj pa imam primerek tega razreda V tem objektu O, to pomeni, da če sem opredeljen Te metode bi jih lahko kličem takole. Podobno je, če sem hotel poklicati metodo z enim argumentom tako da je to bar metoda, da se vzame en argument, in tukaj je BAZ: razvrstitev za postopek, tako da to traja 2 argumente. To kliče eno funkcijo, o tem predmetu o. Smiselno? Sintaksa je smiselna, vendar se nekako navadil. V redu, kaj je govoril o nekaj stvari, ki so vgrajene v Objective-C ki niso nujno vgrajeni v C. V C smo nekako se je ukvarjal s strunami, kot teh neumnih znakov nizi, in je dobil zelo nadležno. Objective-C ima vgrajeno vse tiste, za nas, in to je vgrajeno v uporabljate ta razred, imenovan NSString. Ko želim ustvariti NSString imamo več Skrivnosten sintakso. Namesto da bi rekel "cs50 rečemo" @ "cs50" in to je samo sintakso za razglasitev nizov v Objective-C. To je zelo enostavno pozabiti, da ne. Zdaj, ko imam to, to je niz, ampak obvestilo to je res samo predmet. Rekel sem NSString, kar pomeni, da zaženejo razred imenovano NSString, ki je nekdo napisal za mene, in bili so zelo lepo o njem, in sedaj Lahko začnete kliče metode na njej. Če kličem metodo dolžino na ta predmet s da se bo vrnil k meni na dolžino niza. To je tako kot strlen v C. To bi vrnili 4. Podobno je drug način sem morda želeli, da skrbi za to characterAtIndex. To je metoda, ki pravi, da na ta niz s Želim si, da bi dobili 0. značaja, in zato bi se ta vrne k meni znakov c, in tam je cel kup več teh metod, ki jih lahko Google res enostavno. Dokumentacija Apple je super, in bomo lahko ogledate, da v malo. Tisti, ki so strune. Prav tako smo spremenljive velikosti nizi zgrajena palcev Se spomniš, ko smo v C prijavljeni niz smo morali reči, da imate 5 elementov, konec zgodbe. Ko smo prišli do JavaScript in PHP lahko začnemo počeli stvari, kot je dodajanje elementov ali premikanje elementov. Mi lahko storite enako v Objective-C. Namesto da bi ustvarili množico na običajen način C imamo še eno skupino, imenovano NSMutableArray. Tam je tudi NSArray, in to se dogaja, da v bistvu zajame nekaj matriko. Ta pravi, da je prva stvar, želim storiti, je, da sem želite dodeliti prostor za nov niz, in ko sem ga dodeliti Nato sem potrebo, da se zažene. Še enkrat, samo opozarjajo teh 2 načinov. No, to pomeni, da je znotraj tega predmeta je Imam prazen niz sedi tam. Če želim dodati nekaj tem polju, lahko pokličete addObject metodo. Želim dodati predmet v polju, a, in želim dodati niz CS50. Če bi želel nasprotno odstraniti, da lahko rečem, hočem odstranite predmet na prvo mesto na polju ali ugovarja. Smiselno? Ok, nekako navadil na to kvadratni stvar držala. Mimogrede, v notranjosti veliko knjižnic Apple boste videli to NS. NS dejansko stoji za naslednji korak, ki je bil eden izmed Steve Jobs družb, 1. in to je, če je res začel pisati veliko kode kot nekakšno osnovo za Mac OS X in vse druge stvari, zato je ta NS je nekako to lepo zapuščino zakričal na eno izmed prejšnjih družb nazaj, ko Apple prvič začenjajo. To je povsod. Oglejmo si na bolj celosten Objective-C, na primer. Tukaj sem znotraj Xcode. Da tu, sem najprej naložiti Xcode iz App Store, jo odprli, potem pa sem šel gor do dokumentacije, sem na novo, nato pa projekt. Ko sem naredil, da imam vse te možnosti, kaj želim ustvariti, in tako bomo lahko pogled na te možnosti kasneje, ampak samo za ta primer, ker smo dejansko ne dogaja, da imajo aplikacijo še Prišel sem sem, in sem rekel Command Line Tool, in to je aplikacija, ki lahko tečem v ukazni vrstici tako kot smo bili teče iz C. Tako sem ustvaril ta projekt, in sedaj sem tu, Torej, kaj je prvi vpogled v to zadevo, in to je treba videti precej pozna. Imam int ime. Tukaj je moj prijatelj argc, argv moj drugi prijatelj. Tako lahko vidimo, da je to vstopna točka za moj prvi cilj-C vloge. Tu lahko odmislimo to za zdaj. To je v bistvu upravljanje pomnilnika stvari, ki vam ne bo res nikoli treba skrbeti. Oglejmo si te prve bloka tukaj. Ta prva vrstica, če rečem, Študentska * alice = [[Student alloc] pr] kaj je to delaš? Ta prvi študent sem, da je to verjetno razred. To ni razred, ki je napisal Apple, vendar je razred, ki sem jih napisal. Prva stvar, želim storiti, je, da sem želite dodeliti prostor za novega študenta, in potem ga hočem zagnati, tako da to mi daje nazaj ta novi študent predmet, in sem to shranjevanje v spremenljivko, imenovano Alice. Odkod ta razred prišel? No, tukaj je na levi strani so vse različne datoteke znotraj mojega projekta. Tukaj lahko vidite, sem imel Student.h in Student.m. H datoteko., Se spomniš, ko je izjavljam, vse stvari, da obstajajo v razredu. Oglejmo pogled na to. V redu, tukaj imamo to @ vmesnik, kar pravi, da prihaja izjave o vsem, kar se bo obstajal v mojem razredu. Potem sem imel debelo črevo. Potem imam to NSObject stvar. To pomeni, da ima debelo črevo dediščino, malo smo se pogovarjali malo prej. To pove vse NSObject lahko storite če je ta razred NSObject napisal nekdo drug, Vse to lahko storite NSObject želim, da bi lahko to naredil. Z besedami: NSObject to pomeni, da sem v bistvu podedoval vso funkcionalnost drugega razreda. To je res mi je dal cel kup različnih metod in lastnosti, ki lahko uporabljajo. Tu spodaj sem ustvariti 2 lastnosti. To pomeni, da sem študent, če bi bilo to struct, bi bilo to v 2 stvari znotraj mojega struct, zato je vsak študent ima ime to je niz, študent ima tudi razred, ki je int. Končno, tukaj bom najti način za moje učence. Klical sem moj način, initWithName, in to traja en argument, in da argument je niz, sem poklical, da ime. Zdaj pa si poglejmo, kako smo dejansko izvaja ta razred. Tukaj, zdaj sem znotraj moje datoteke. M, m za izvajanje, se mi zdi. Imam izvajanje, svoj konec in tu je, če sem dejansko opredelitvijo kaj initWithName ne. Imam initWithName, ime mojega parametra, nato pa to Tu sem dejansko ustvarja študenta, in zato je to malo skrivnosten, ampak to je nekako boiler , ki jih želite vključiti v svoje proizvajalci. Ta funkcija inicializacije tukaj initWithName je tip konstruktor. Vi ste v bistvu izgradnjo novega študentskega predmet in morda pošiljanje nekaterih podatkov v njej. Prva stvar, želim storiti, je, vas vabim, da init na to super stvar. Se spomniš, ko sem rekel, tukaj v datoteko. H da je vse NSObject ima študent tudi je. To pomeni, da ko sem ustvariti študenta, kar sem tudi morate storiti je, poskrbite, da NSObject, da sem podedoval vse te podatke iz tudi inicializira pravilno. Kaj moram reči, je to super se dejansko dogaja, da se nanašajo na matično razred da sem podedoval od, zato želim, da poskrbite, da sem inicializacijo vse, kar sem glede na to, preden začnem poskušam uporabljati. Potem, če je pravilno inicializiran je to tako, kot pravijo, če malloc Ni zadetka za nično, potem lahko začnem nastaviti nekaj lastnosti. V JavaScript in PHP sva to ključno besedo imenujemo to, in to iz sedanjega primerek razreda. V Objective-C imenujemo to jaz. Ko rečem self.name, kar pomeni, da je predmet Pravkar sem ustvaril, ko sem rekel študent alloc init, da se dogaja, da mi vrne predmet. To pomeni, da želim, da nastavite ime tega predmeta za kar sem opravil noter Tako kot v C, imamo dostop člane s to piko, Tako pravi self.name ime študenta predmeta Zdaj bo vse, kar si pravkar opravil noter In tako končno bom lahko vrnil, zato sem dejansko dobil nekaj nazaj. Vprašanja? Ok, tako da to samo init = super, če ne popolnoma razumejo dediščino stvari, ne skrbite. Samo vem, da če si kdaj želeli, da bi svoj način samo init storiti, in boste na dobri poti. Ja. >> [Študent] Kaj pa, če je samo pomeni? To pomeni, da ko smo malloc kaj moramo vedno preveriti, če je bila enaka null, in če bi bilo nič, potem smo zapustili. To je ista stvar, kajti če ta vrne null, potem bomo verjetno bo SEG napake če začnemo poskuša manipulirati. To je naš študent razred. To pomeni, da lahko zažene naših študentov na enega od dveh načinov. Če rečem, študent alloc init ne bom na ta način, da sem napisal, in namesto tega lahko preprosto rekli alice.name, in zdaj bom, da nastavi ime lastnosti. Podobno je, če želim uporabljati to metodo initWithName Lahko preprosto reči alloc, nato pa kot pravijo pr Bom poklical, da je metoda, ki sem jo pravkar ustvarili, in bom poslati v Bobu. Na tej točki, je ta predmet Bob ima enako ime Bob. V redu, tukaj sem s pomočjo tega NSMutableArray, da smo pogledal prej. Jaz sem dodelitev space.Then sem inicializacijo nov niz. Jaz bom dodal 2 stvari za to. Ta matrika ima zdaj v lasti študentske predmetov. Obvestilo, da nikjer ni moram reči, to je množica študentov. Rekel sem, da je matrika, obdobje. Potem bom lahko dal karkoli znotraj nje, ki ga želim. Tukaj imam 2 predmetov. Končno imam drug predmet tukaj, to LTE. Tukaj v TF.h v bistvu ista stvar. Jaz sem podedoval od NSObject, in mimogrede, Ko ustvarite razrede je vse to naredil za vas, ta vrsta boiler vmesnika. To je lastnost študentov. Imam nekaj metod, tu se res ne naredi veliko, in tako to pomeni, da ko sem ustvariti ta objekt TF Lahko pokličete to metodo oceno o njem, kot je ta. Vsa vprašanja v zvezi sintakso Objective-C, preden smo začeli premikati v nekaj več Zanimivo programi za razvoj stvari? Ok, tako da je dejansko lahko iPhone app. Jedro razredov, da boste v notranjosti z uporabo vašega iPhone app se imenujejo pogled krmilniki, in pogled na krmilnik v bistvu predstavlja en zaslon znotraj vašega app, tako da če sem na glasbeni app, na primer, 1 Pogled na regulator lahko zastopa stališče, v kateri sem si ogledate vse skladbe na svoj iPhone. Še en pogled nadzornik lahko, ko kliknem na skladbo in začeli igrati ali, kot sem pomikanjem umetnikov. Vsak od teh različnih zaslonih bi lahko zastopali drugega upravljavca pogled, in pogled na krmilnik je res samo razred, ki pravi, kako ta zaslon deluje. Stvari, ki spolzi iz pogleda upravljavca, da bomo imeli lastnosti, tako da stvari, kot na gumb se bo premoženje našem mnenju upravljavca. Mi smo tudi dogaja, da imajo metode, in to so v bistvu rutine za obravnavo dogodkov. Ta metoda pravi, ko pritisnete na ta gumb Hočem nekaj narediti, in končno, spet, bomo uporabljali samo to ključno za dostop do trenutni primerek. Za izgradnjo vmesnikov v iOS je pravzaprav zelo, zelo enostavno. Imajo to lepo povleci in spusti vmesnik, imenovan Interface Builder, in 2 ključni koncepti, ki vodnika do vašega cilja-C vmesnikom Builder so IBOutlet in IBAction. IBOutlet preprosto pravi, da če ugotovi lastnost, ki je gumb, in želite, da ga priključite na nekaj, kar v vašem dejanskega UI, boš rekel, da je izhod. Podobno, če želite, da predstavljajo za obravnavo dogodkov potem boš rekel, da je tožba. Da dejansko žico to grafični prikaz in kodo to je res, res preprosta. Če želite priključiti IBOutlet, vse kar morate storiti je, da nadzor nad klik, in bomo videli zgled za to zelo hitro. Vi nadzirate kliknite, kjer piše View Controller. Ti boš povlecite v vmesniku, ali obratno, Če želite priključiti dogodkov za obravnavo boš povleči iz vmesnika v drugo smer. Oglejmo si res preprost primer iOS. Ustvarimo nov projekt. Jaz bom prišel sem, da bi prijave, in bom še en pogled aplikacijo. Jaz bom še naprej. Bom dal svoj projekt ime. Poklical bom mu Pozdravljeni. Zanimivo je, da Apple ne prevzema želite ustvariti izdelek tako, da ga prodajajo in jih lahko zaslužite. Tu spodaj bom rekel, da je to iPhone app. Ustvarite lahko iPad app, ali če želite ustvariti eno izmed teh aplikacij , ki podpira obe napravi, ki jih lahko storite, da preveč. To so tisto, kar želite, checkmarks bi izgledal. Če želite uporabiti storyboards, ki jih bomo videli pozneje, in boste zagotovo želeli uporabiti avtomatsko referenčni štetju ki je lepa lastnost, ki vam preprečuje, da bi morali reči malloc in free. Razen če želite klic malloc in free, jaz bi zapustiti to preveriti. Bom še naslednji, in končno, to se dogaja, da bi me vprašal, če želim, da se shrani. Jaz bom udaril ustvariti, in gremo. Ustvaril sem nov projekt. Tukaj na levi so vse datoteke, ki so bili v moji projekta, in opazil, da imam cel kup in sploh nisem naredil. IOS je super. Na primer, tukaj je ta ViewController.h, to se dogaja, da predstavlja svoj prvi krmilnik pogleda, Tako prvi zaslon znotraj mojega app. Zdaj vemo, kaj je to rekel. Mi govoriš Kličem tem razredu ViewController, in ViewController pa vse, kar počne UIViewController, in to je spet nekaj razred, ki je zapisal, da Apple ne veliko stvari priročno za nas želel prikazati na zaslonu. Tu se lahko dejansko začela z določanjem, kaj je moj pogled na krmilnik ne, in izkazalo se je, da res ne potrebujem tega. To je koda, ki boiler Apple mi daje zastonj. Sem, da je treba prvo vrstico, ali pa nimam razred, tako da bomo znebili tega in se znebite tega. Ok, to je moj prazen zaslon. Zdaj pa še o tem MainStoryboard.storyboard, in to je, če se začne, da se zanimivo. To je prvi zaslon na moj app. Če želim dodati gumb, v HTML sem moral ustvariti gumb oznako. V Android morate ustvariti gumb oznako, ampak v iOS, če sem prišel sem, da bi v spodnjem desnem in če sem kliknite na to 3. 1 tukaj, kjer piše predmetov, in sem lahko pomikate navzdol, ali sem lahko začel iskati gumb. In poglej, gumb, tako da če sem dejansko povleci in spusti to pravico tam, Pravkar sem dodal gumb za ta zaslon na moj app. Če želim spremeniti besedilo, lahko sem jo dvokliknite, povedati nekaj zapeljivih kot "Me pritiskom." Ok, zdaj, če sem teči ta program, zato smo ga pripravi, tako da bi sistem deloval kliku na gumb za predvajanje v zgornjem levem kotu, in tam je moj app. Nisem naredil nič, in sem dobil videti sladko iPhone app. Če želim, da ga ustaviti, lahko kliknete gumb za izklop ker je bolj zabavno. Recimo, da sem dejansko želijo nekaj zgodilo, ko pritisnem na ta gumb. Za to, kaj moram storiti, je, da moram ustvariti Novi trener dogodek ali dejanje. To pomeni, da moram ustvariti neko metodo, ki jo želim, da se imenuje Ob pritisku na gumb, tako da je ustvaril novo metodo. Jaz sem znotraj ViewController.h. Moram reči, da obstaja način. Rabim vezaj 1. ker bom lahko kličem te na ogled krmilnika. Moram dati to vrsto. Vrsta to se bo, da IBAction stvar, ki smo videli prej. To je dogodek trener, tako da se bo vrnil IBAction, in to je namig, da Xcode reči, da To je nekaj, kar želim, da nakaže nekaj. Ne morem ji dati ime, kot buttonPressed, podpičjem. Zdaj sem se razglasi za novo metodo globoko v mojem razredu. Sem rekel, ta metoda obstaja. Zdaj pa je prišel v ViewController.m, in recimo, kaj lahko ta metoda storiti. Če začnem tipkati, na primer (prazno) buttonPressed Obvestilo Xcode je res lepo in autocompletes zame. To je zares čudovito. Obvestilo tukaj, da notranjost. M datoteko morem reči tudi za neveljavno, in to je zato, ker IBAction pravzaprav ni tip. To je hashtag dejansko definirana nekje, da je nična, in spet, to je samo namig, da Xcode, ki pravi, Hočem, da je to dogodek trener, pa bomo videli, zakaj v samo sekundo. Ob pritisku na ta gumb bom nekaj siten želel prikazati pojavno okno. Če želite to narediti, da sem lahko ustvarite nov primerek tega razreda, imenovano UIAlertView, in to je razred, ki je zapisal, da Apple se dogaja, da se prikaže siten ljudstvo. Poklicali bomo to pojavno okno opozorilo, in imam 2 koraka, ne pozabite, da ustvarjanje tega predmeta. Prva stvar, kar morate storiti, je dodelitev prostora. Želim UIAlertView. Želim dodeliti prostora. To je moja prva metoda. Moj naslednji način je rad za inicializacijo, in tako imam to veliko, dolgo metode, imenovane initWithTitle. To je v bistvu gre za nadzor, kaj je to ljudstvo pravi. Naslov mojega popup lahko pozdravi. Sporočilo je to ljudstvo lahko "To je iOS." Delegat stvar, ne vem, kaj to je. Recimo, da to ni nič. Sedaj lahko gumb, ki se dogaja, da se pojavi rekel nekaj podobnega "Seveda je," in res ne želim nobenih drugih gumbov, tako da je brisanje tem in zaprite nosilec. Ok, sem ustvaril dodaten 1. Takole. To je, kako sem lahko ustvarite novo ljudstvo. Če želim, da bi dejansko kažejo, ljudstvo vas vabim, da v oddaji metodo. Če želite to narediti, da lahko rečem, opozorilo in pokazati, in spet, autocomplete je bila super lepo. Če sem pozabil, kaj je bilo, če sem tipkal vs, Jaz lahko pomikate tukaj, da ugotovimo, kaj je bilo, in filtrira lepo. Sedaj sem ustvaril to novo ljudstvo. Vrnili se bomo na to, kar pomeni, delegat kasneje, in zdaj želim povedati hočem to metodo za kurjenje Ob pritisku na gumb, tako da se bom vrnil v svoj snemalni knjigi in želim, da se zdaj priložite ta IBAction. Prva stvar, ki jo želite storiti, je, kliknite na gumb. Ko sem pritisnite ta gumb želim nekaj zgodilo. Ne bom se držite nadzor. Grem kliknite in povlecite gumb do tja, kjer piše View Controller. Vidimo lahko, da je lepo prižgal. Če spustim z mojo miško imam sedaj to ljudstvo tja, kjer sem imel nekaj možnosti. Ena od teh je, da se dogodki, lahko registrirajo. To so vse te metode I, se navede v svojem spisu h, kot IBActions. To je, kako Xcode ne ve, kaj bi morale biti v tej mali seznamu tako da je le namig. Če sem kliknite na gumb pritisniti, da sem sedaj registriran obravnavo dogodkov. V JavaScriptu bomo imeli za povedati moram nekaj kode, ki so registrirana obravnavo dogodkov. V Objective-C je bilo res tako enostavno. Če bom tekel še enkrat Zdaj, ko sem pritisnite gumb moja obravnavo dogodkov se bo ogenj, in jaz bom dobil to pojavno okno. Super, super enostavno tam. Če boste kdaj želeli videti vse dogodke, ki se zgodijo je treba registrirati na komponento, če kliknete na gumb in sem prišel sem na desni strani 1. si lahko ogledate tukaj ne morem narediti stvari, kot so tip gumba tako da, če hočeš eno izmed tistih, ki sem je, ali add kontaktne gumb ali karkoli. Če želim videti vse dogodke, ki so na ta gumb če sem prišel do sem na desni strani lahko ogledate tukaj na dogodkih, ki jih imam vse te različne dogodke. Jaz lahko s pritiskom na gumb, ko sem spustil na gumb, ko sem dvakrat pipo ali karkoli, in tisti, pravkar sem se prijavila, je to dogodek, imenovan Touch Up Inside, in ta pravi, da je takoj, ko je moj prst odlepi gumb ta dogodek se bo ogenj, in to je točno to, kar se je zgodilo. To je nekako gumb neplačila stisnjenega dogodka. Vsa vprašanja tako daleč? Ok, to je, kako lahko začnemo žice se stvari v našem zakoniku v stvari znotraj našega vmesnika. Ne pozabite, prva stvar, ki jo je moral storiti, je bilo, da bi našli kodo, in potem ožičen vmesnik s kodo, in tam je naš prvi app. Ok, to je bilo res kul, in smo ustvarili ta gumb. Kaj pa, če ne želimo, da ustvarite kup lastnosti kar te gumbe? Na primer, v Tic Tac Toe Imam 9 gumbov, in bi bilo super, super siten, da so za povleci in spusti 9 krat ali če sem imel, da bi Tic Tac Toe z 81 namesto 9 in sem morala povleci in spusti 81-krat, in to je slabo. Kaj lahko namesto tega je podobno kot HTML ko smo imeli stvari, kot so ID-ji in imena, in ne moremo iskati stvari njihov ID, tam je podoben pojem v iOS pozval oznake. Tag je preprosto edinstven številčno oznako za komponento. Če rečem, to je oznako 0, na primer, če ustvarite gumb in ji dati oznako 0, pa bomo videli, kako to storiti v samo sekundo, če želite, da se ta gumb lahko preprosto povedati hočem, da pokličete the viewWithTag metodo na objektu tukaj, the self.view, ki predstavlja sedanjo zaslon, na primer. Če vas vabim, da se viewWithTag način, bom vleči nazaj na gumb z oznako 0. Oglejmo si na tem opira Tic Tac Toe. Prvič, to je moja storyboard. Ustvaril sem te UI 10 gumbov. Obvestilo so vsi enake velikosti. Če sem kliknite eno od teh in sem prišel nazaj sem na tej desni strani boste videli, da prilagodi pisavo tukaj, tako da sem pisavo, malo večji, ampak tisto, kar sem tudi storil sem bila nastavljena to oznako. Rekel sem, da ima to oznako 1, in da je zgoraj levo. Zdaj, če sem kliknite drug gumb, kot je ta drugi tu, Zdaj boste videli, da je moj tag je 2. Vsaka od teh gumbov, samo ima edinstveno oznako, in tako je to pozneje, kako bom začel interakciji s svojo aplikacijo. To je vse znotraj enega pogleda upravljavca, ampak tukaj je tisto, kar imamo. Imamo 3 lastnosti tukaj. Prva in zadnja se bo pomenilo stanje moji ladji. V bistvu je to prva je matrika predstavlja kjer Xs in so Os. Ta druga tukaj nam pove, katere je na vrsti. Opazili boste, da imam tudi te stvari tukaj. Pred ko smo prijavljeni lastnosti smo jim dali ime in tip. Prav tako lahko dobijo dodatne informacije tukaj. Ta prvi pravi nonatomic, in kaj to pove je v bistvu samo ena stvar, kdaj se poskušate dostopiti do te spremenljivke hkrati. Lahko naredite bolj kompleksne aplikacije, ki so multi-navojem, in tako nazaj Scratch smo imeli različne teme, in bi lahko zaradi različnih sprites se delaš različne stvari hkrati. Če to ne drži, kar pa ni v nič, da bomo lahko gledaš, če rečemo, da je nonatomic dejansko dogaja, da se stvari malo hitreje. Imamo tudi to stvar, imenovano dodeliti, močna ali šibka. Ta dodeli samo pravi, da je to standardni tip. To ni predmet ali kazalec, saj je to le int, Tako je bool vgrajen v Objective-C. Ta pravi, da ne poskušajo storiti ničesar fancy s kazalci tukaj. To je redni stara Scaler. Močne in šibke, je to slaba pravi, da je dejansko Želim, da se to kaže na nekaj, kar je po mnenju upravljavca. Ne bom se dejansko dodelijo ali init to sam. Vmesnik builder, ko sem prost app, da se bo ravnanje z vso to inicializacijo. Če rečem šibka, ki pravi, da je nekdo drug se bo ta ustvarja. Če rečem, močna, ta pravi, da bom lahko 1 ki jo ustvarja ta deska predmeta, zato tu imam nekaj več metod tukaj na primer tožba, ko pritisnete gumb za novo igro, dejanje, ko pritisnete na katero od drugih gumbov, in tako dalje. Ne bomo dobili v preveč logike Tic Tac Toe, čeprav je zelo razburljivo, vendar pa si oglejte nekatere stvari, ki jih počnemo znotraj iOS. Ta nova metoda igra se bo odpuščen ko pritisnem gumb za nov igro. Kavelj, da do sem le prišel v mojo snemalno knjigo. Sem kliknil na novo igro. Če sem prišel sem na desni vidim, da se Dotaknite Up Inside je nakazan na newGame metodo. To je, zakaj se to dogaja, da bi dobili službo. Metoda newGame bo naredil nekaj postavitev. To se dogaja, da hočem, da počistite stanje sveta. To je lep način za spremenljive nize. To se dogaja, da pravijo, da je zdaj na vrsti Xa, in zdaj bom to izkoristil viewWithTag stvar. Vem, da mi gumbi imajo oznake, 1-9, in to je nekaj, kar sem samovoljno izbrala. Če želim iz besedila vsak gumb, da je prazna ker sem pravkar začel novo igro in ne želim vse Xs ali OS, ki so ostala, lahko to storim. Lahko rečem, hočem pogled z oznako, 1, 2, 3, 4 in tako naprej. To bo pull drug gumb vsakič. Tukaj bom, da ga oddanih UIButton. Tako kot smo lahko odda ints, da plava in obratno Ta pravi, da želim, da glasuje za to UIButton. To pomeni, da bo tip to * UIButton ker kazalcev, vendar ne skrbite, saj niso več strah. Ko sem ta gumb, vam bom poklical metodo na njej. Ta metoda se imenuje setTitle forState, zato je ta pravi Rad bi postavil besedilo gumb za prazen niz, in želim, da bi bilo prazen niz, ko ni pritisnjena. Če bom na ta način, lahko spremenite besedilo na gumb takoj, ko je nekdo udari, ampak želimo povedati, ko je gumb samo sedel tam Želim besedilo na prazno. Na koncu bomo za inicializacijo desko, in bom rekel, da je vse, kar je trenutno na 0, tako da je ta svet člani nespremenljiva, je spremenljiva polja, kar pomeni, da lahko pokličete addObject način in samo 0 notri. To se zgodi, ko sem ustvariti novo igro. Oglejmo si še enega. Ta metoda tukaj je IBAction, da bo treba pritisniti vsakič, ko pritisnete eno od teh kvadratov. Zdaj imamo nekaj Tic Tac Toe logiko tukaj. Ugotovimo, katere je na vrsti, in na tej podlagi smo bodisi določi X ali O, vendar smo opazili, da smo ponovno ta isti dogodek za obravnavo Za vsako od teh gumbov. To pomeni, da nimam način za zgornji levi gumb, drugačno metodo za gumb spodaj desno, lahko pa se moram storiti. To ne bi bilo res dobro oblikovanje. Kaj delam tukaj je, da sem dejansko dogaja, da določi Kaj je oznaka na gumb, ki je bil stisnjen je. Ste opazili, da je ta igra metoda vzame en argument. Imenuje se pošiljatelj in kaj je pošiljatelj pošiljatelj bo predstavljajo točno tisto, kar je ukrepala na podlagi. Če pritisnem na gumb, s pošiljateljem se bo, da UIButton da sem dejansko pritisnil, to pomeni, da UIButton ima oznako, ker sem ustvaril oznako. Če želim, da se na oznaki, lahko sem le reči, Želim oznako pošiljatelja, in spet sem samo ulivali na UIButton. Slučajno vem, da bo pošiljatelj je UIButton. To pa ni vedno nujno, da je UIButton. Lahko bi, na primer, registrirati isto za obravnavo dogodka  enega za enega gumba, enega za drsniku. V tem primeru, vem, da so vsi gumbi, tako da bom povedal Hočem, da je to gumb, nato pa lahko dobim oznako, in z oznako Zdaj vem, kje sem znotraj odbora. Potem lahko preprosto nastavite bodisi X ali O, lahko prezrcali na vrsti, preveriti, kdo je zmagal, in tako naprej. Vsa vprašanja v zvezi s tem sedaj? V redu, vsi smo številka objavljene na spletu, ne želimo, da se v preveč za Tic Tac Toe logiko, zdaj pa lahko vidite, da res vsi delamo, je da smo zanka v tem polju, tako da imamo nekaj za zank tukaj, in mi smo samo primerjavo za prikaz imamo tekmo v vseh vrstah, podobno v koloni ali kaj podobnega. V resnici vodi ta program, če se dotaknete enega od teh gumbov da igra metoda je bila odpuščena, tako da pomeni, da sem ravnokar Gumb za X, tako da bo zdaj na ta gumb bo O in tako naprej, in da je, kako smo začeli sodelovati s to eno samo aplikacijo strani. Bomo objavili kodo, zato vas prosimo, da se seznanijo z vsebino, pa kaj je zdaj govoriti o nekaterih aplikacijah, ki so več kot le eno stran. Tako razburljivo, kot Tic Tac Toe bilo veliko aplikacij znotraj iOS so vrste teh vrtanje navzdol stvari z več zasloni. Prvi koncept, da bomo morali govoriti o so protokoli, in protokol je zgolj skupek metod da lahko obljubim opredeliti. Če sem ustvaril tega novega protokola z 2 metodami, ta prvi, Če donos tip je nična, klicala sem ga foo. To traja nobenih argumentov. Imam drugo metodo. To vrne int. Poklical sem ga ovira, in to traja en argument. Vse to je protokol, ki se imenuje SomeProtocol tu gor, To je niz stvari, ki jih lahko nekdo izvajajo. Nisem znotraj tega protokola povedal, kaj počne foo. Namesto tega, samo pravim, da bi lahko določite foo, če želite. Če sem ustvariti pogled upravljavca ali ustvarjanje razred Jaz lahko znotraj tega razreda obljubo, da bo izvajanje nekatere od teh metod, tako da na primer, če pravijo to zdaj pravi, da delam obljubo, da vam, da v notranjosti tega razreda pogled kontrolorja bom imel definicije tako za foo in bar. Zakaj je to uporabno? Veliko delov notranjosti za iOS izkoristiti to design vzorec se imenuje delegacijo, in kaj pravi delegacija je, da je, na primer, če imam polja z besedilom in obstaja nekaj dogodkov, ki bi lahko registrirani znotraj mojega polje z besedilom, namesto ustvarjanja ločenih dogodkov, kar lahko storim je, lahko rečem, Delegat to polje z besedilom bo nekaj predmetov. Ko sem rekel, da je to delegat zdaj to pomeni, da ko bi bili nekateri dogodek odpustili v polju z besedilom namesto da bi morali registrirati ali kaj podobnega to je le, da bo poklical metodo za delegata. Na primer, znotraj mojega polje z besedilom imam metodo, ko pritisnete da narediti gumb v spodnjem desnem kotu, in tako namesto registracije za obravnavo dogodkov, kar lahko rečem je polje z besedilom, tukaj je cilj, ki ga želim vam, da pokličete metode na Vsakič, ko nekdo pritisne gumb Končano, in to pomeni, da je ta objekt ima nekaj za izvajanje protokola , ki pravi, obljubim, da bom naredil, da se opredeli ukrepe gumb, ker če ne opredeljuje to metodo in jo pritisnite Done, potem se bo lahko zavajajoče. Oglejmo si primer. Tu sem le eno polje z besedilom, in ena izmed lastnosti tega polja z besedilom, več o tem tukaj desni strani je delegat. To je lastnost razreda. Kar sem storil je, da sem tukaj, nadzor kliknili, in sem vlekel iz tega mesta tukaj za ogled krmilnik, in ki pravi, da se zdaj delegata to polje z besedilom se bo pogled na krmilnik. To pomeni, da ko se nekateri ukrepi zgodilo, namesto registracije ločene viličarji dogodek Želim si, da jih pošlje delegatu. Zdaj pa si oglejte mojem mnenju upravljavca. Znotraj datoteke. Ure sem obljubil. Sem obljubil, da bo izvajanje nekaterih metod znotraj tega protokola imenovano UITextFieldDelegate, in spet, To je le nekaj seznam nekaterih stvari, ki jih lahko izberejo, da izvajajo. Če bom prišel v mojo. M datoteko, ki sem jih izvaja en tak način. Sklical sem jo textFieldShouldReturn ker to je tisto, kar je bila imenovana znotraj protokola. In zdaj, ko sem pritisnite gumb Končano znotraj tega polja z besedilom To je tisto, kar se dogaja, da pokličejo, tako da nisem registrirati za obravnavo dogodkov. Povezal sem delegata, in ko je odpuščen ta dogodek To je metoda, ki se bo imenoval, tako da če sem prišel sem, da bi mi snemalno knjigo in jo vodijo, medtem ko je nakladanje vidimo kaj sledi. Na mojem zaslonu imam 2 stvari. Imam besedilno polje, in imam to nalepko. Jaz samo pravim, da želite, da se besedilo te oznake da so enaki ne glede na Vtipkali v notranjosti polje. Ta naslednji line tukaj je preprosto način, da kličem na polje, ki pravi, želim, da skrijete tipkovnico. To je le samovoljno način, da je Apple odločil. Še enkrat, preden sem naredil vse, kar sem imel za žice vse gor, tako da sem prišel sem. Z vidika upravljavca sem povlecite čez besedilnega polja. Pustil sem šel, in sem lahko tukaj vidite, da sem lahko to lastnost besedilno polje saj sem v pogledu krmilnik sem določeno lastnost da je IBOutlet za polje z besedilom. Ta pravi, da sem lahko priključite nepremičnino navzgor na polje v svojem uporabniškem vmesniku. Zdaj, ko sem kliknite na to lahko začnem tipkati. Zdaj, če sem kliknite na gumb Done to se dogaja na ogenj dogodek, ki lahko zdaj odzvali. Brez rutine za obravnavo dogodkov. Tako sem odgovorila na to opravljeno gumb. Smiselno? To ni design vzorec, da, morda ne boste nikoli našli sami ustvarjanju lastne protokol, ampak samo vem, da nekateri različne komponente iOS registracijo dogodkov na različne načine. Gumbi, na primer uporabo teh IBActions. Besedilna polja, na drugi strani pa se bo uporaba delegatov. Vidimo lahko, in si lahko ogledate vse do notranjosti te dokumentacije. Mimogrede, tam je pravzaprav tone stvari UI vgrajen v iOS za vas, Tako, na primer, je tako, kot sem rekel, da je naredil v spodnjem desnem I izbrali to polje z besedilom. Prišel sem. Jaz se pomika navzdol malo, da se vrnete ključ in sem lahko dejansko narediti to cel kup stvari, kot če želim povedati, da je Klic v sili namesto tega lahko storim to, kar je povsem naključno, in ne vem, zakaj je vgrajen gumb za klic v sili, vendar pa pravi, klic v sili, v resnici malimi črkami. Tukaj imaš. Zagotovo raziskati vse te različne možnosti v iOS. Vsa vprašanja v zvezi delegatov? Še enkrat, samo zanimiv design vzorec, da bi morali biti seznanjeni z. V redu, naslednji si oglejte tabele mnenj. Pogled tabele je v bistvu, da seznam predmetov, ki je po vsem mestu v iOS. Ko ste lahkota skozi vse svoje stike, gledate nastavitev strani, in da je vrsta seznamu stvari, ki se imenuje pogled tabel. Izvajanje tabele pogled na iOS je zelo preprosta. Namesto da bi v razredu, ki se spušča iz te UIViewController tako kot smo naredili, preden smo preprosto morali reči ne vse UIViewController ne želim storiti, Rečem vse UITableViewController ne želim storiti, tako, da preprosto dodaja nekaj dodatnih stvari, ki so v celoti naredil za nas. Moramo storiti zelo malo, v bistvu izpolniti obrazec znotraj preglednice. Za prikaz tabele moram odgovoriti na nekatera vprašanja. Prvo vprašanje moram odgovoriti, je, koliko so oddelki v tabeli? Ko ste brskanja po telefonskem imeniku spletne boste opazili, da je vrsta organizira Ker potem boš imel BS, in imate, da se malo sub glavo. Vsak od teh se imenuje oddelek. Vi lahko ali pa ne potrebujejo teh. Prva stvar, kar morate storiti je, da izvaja metode imenovano tableView: numberOfSectionsInTableView. To preprosto vrne, koliko delov imate, tako da bi to lahko rekli vrne 1, če imajo eno veliko mizo pogled. Naslednje vprašanje, ki iOS mora vedeti, koliko vrstic imaš? Na primer, ste lahkota skozi pogledu tabele. Imate določeno število pesmi, ki jo iščete ali na določeno število stikov. Če si me, seveda, ni tako veliko, in da je, kako iOS ve, koliko celic prikazati. Še enkrat, to lahko pomeni nekaj podobnega zameno 3. Moj pogled tabele ima 3 vrstice. Končno iOS mora vedeti, kaj vsaka celica izgleda, tako da tisto, kar je dejansko storil, je klic te metode tukaj, To tableView: cellForRowAtIndexPath. To se dogaja, da pokličete na ta način vsako posamezno celico znotraj vaše mize. Kako to vem kolikokrat, da ga pokličete? No, ti je to povedal v notranjosti število vrstic v oddelku. Mi jo bomo imenovali to na vseh naših celic, in znotraj tega je, kjer lahko dejansko narediti stvari, kot so Nastavite besedilo ali povedati, kaj ta mali modri gumb na desni strani ne. Vzorec za pridobivanje teh celic, bomo uporabili to metodo imenovano dequeueReusableCellWithIdentifier. Objective-C je dejansko zelo dobro znano, za smešno dolžino njihovih imen metoda, in to je res lepo zgodilo v primeru točke. Kaj je ta metoda pa je to le pravi, da želim, da mi celico. Samo stvar iOS. Če imate kaj takega 100.000 skladb na iPodu kaj iOS ne želite storiti, je dodelila 100.000 celic, ker če ste na vrhu seznama, pa je res treba dodeliti pomnilnika za celico, ki je 99.000 vrstic navzdol? Ne, ker, kot ste vi lahko pomikate vrste dodelijo kot greste skupaj. To se naredi za vas. Ni vam treba skrbeti za vse te neumne stvari uspešnosti. Vse, kar ste rekli se kličeš to metodo dequeueReusableCellWithIdentifier, in ta pravi, v redu, če želite bom ustvaril novo enoto za vas. Ampak, če ste na dnu tabele in ste že dodeljene nekaj celic Na vrhu tabele, ki si res ne bo treba kmalu Bom dal eno tistih nazaj, namesto dodelitve novega, in zato je to lepo uspešnosti skrb. Če ne bi bilo treba nameniti celicah sami. To se dogaja, da vam nazaj v celico. To se dogaja, da se vrnete na vas mobilni objekt. Ko imate mobilni predmet, ki ga lahko naredimo nekaj za to. Nastavite lahko besedilo v celici s tem premoženjem, imenovano besedilo okolje. Lahko dodam, da puščico na desni ali kakšno drugo naključno stvari s to drugo premoženje pozval accessoryType, in tako naprej in tako naprej. Oglejmo si na dejansko izvajanje pogled tabel zdaj. Ko sem ustvaril ta projekt kot pravi sam pogled na vlogo sem dejansko prišel sem za uporabo v glavni podrobnosti, in tako v bistvu to ustreza mail app na iPad z pogledu tabele na levi in ​​nato se vsebina na desni strani. Na iPod ali iPhone se bo to ustreza enem pogledu tabele. To je, če sem dobila zagon kode. Naj najprej pogledamo na snemalno knjigo. Vse to je bilo narejeno za mene, v bistvu ustvarjen. Ta vrstica za krmarjenje mi je pokazal, kako lahko na primer celice videti, in sem lahko dvokliknete to, spremenite naslov. Vsi drugi pomisleki, UI bom zmogel tam. Glava datoteke izgleda res preprosta. Namesto da bi rekel je to UIViewController smo zdaj pravi, da je to TableViewController, tako da vemo, da smo želeli poklicati vse te tabele metod. Naslednja želim ustvariti lastnost, ki se dogaja, da zastopa stvari znotraj moje mize. Ta tabela se bo samovoljno prikaz seznam sadja, zato moram ustvariti neko vrsto , v kateri lahko vstavite sadove. Znotraj mojega izvajanja datoteke prva stvar, želim storiti Želim se prepričati sem inicializacijo to vrsto. Rekel sem alloc pr ustvaril svojo sadno vrsto, in sem dodal 4 stvari z njim, od katerih je ena veliko bolj sporen kot drugi 3. In zdaj imam celo paleto velikosti 4. Mi smo jo stresa v CS50. Zdaj imam celo paleto velikosti 4. Zdaj bom začel odgovorih na ta vprašanja, in dejansko, ko sem ustvaril ta program je bilo vse to že storil zame. Nisem imel vnesti navedeno število oddelkov v pogledu tabele. To je bil že tam, jaz pa izpolnite prazne. Koliko oddelki imam? Ena. Vse opravljeno. Koliko vrstic imam? No, jaz imam eno vrstico za vsako sadje, zato je to število je lastnost vsake matrike, ki pravi, kako velik je? To je, koliko vrstic imam. Na koncu moram reči, kaj vsaka celica videti? Jaz bom rekel dequeueReusableCellWithIdentifier. Spet je bilo to že napisal zame. Nisem moral to storiti sam, in želim, da bi dobili nazaj ta celica na tej lokaciji. Ne pozabite, da smo kličeš to isto metodo na vsako posamezno celico, in ta argument tukaj, ta argument indexPath, Kaj pa pravi vrstica sem noter Če rečem, indexPath.row tukaj to bo 0, potem bo 1, potem bo 2, in to ne vem kaj celica Jaz sem trenutno na zaslonu. Rad bi postavil besedilo celice prek te nepremičnine textLabel iti v mojo sadja in dobili niz objekt, ki ustreza vsako vrstico. Če je to niz, sem sedaj določa Besedilo nepremičnine v niz. Lahko naredim še eno stvar. Jaz se lahko prijavijo za obravnavo dogodkov na vsako od celic, Ko sem izkoristiti vsako od teh celic To didSelectRowAtIndexPath, to se dogaja, da se imenuje za mene, Tako preprosto z določitvijo to lahko sedaj ravnati, kaj se zgodi ko pritisnete celico in spet smo mimo, v kateri je izkoristiti celic tako da smo ponovno ta isti trener dogodek za vse naše celice. Tudi to je nekaj, iOS dela za mene. Naj se prikaže drugo siten ljudstvo , ki preprosto pravi, da si si izbrala nekaj, kjer da nekaj se bo vrsta objekta. Ko sem teči to, da bom, da je to lep pogled tabele z eno vrstico za vsako od teh sadja, in če sem se dotaknite 1 to mi pove, kaj se je zgodilo. Smiselno? Zgradimo malo bolj zapletena od app, toliko, kot si izbral tako, da kliknete paradižnik je. Lepo del o storyboarding se je ne samo nam bo pomagal oblikovanje zaslonov posamično, Prav tako nam bo pomagal povezali našo celotno aplikacijo, tako da končna ca bomo Stavba je to lepo športne novice bralec, in zato se dogaja, da imajo več zaslonov, in da bom lahko dejansko predstavljajo vsaka od teh več zaslonih na snemalni knjigi in sem lahko povečate, in glej moje aplikacije na visoki ravni. Da bi ustvarili nov element znotraj mojega snemalno knjigo to je zelo preprosta notranjost Builder vmesnika. Če želim dodati še eno zaslon za to, na primer, Jaz lahko najprej pomanjšati s ščepcem zoomom, da Apple ljubi tako zelo, in dol, preden sem poiskal na gumb in sem povleci in spusti gumb če želim ustvariti nov zaslon, lahko dejansko samo povleci in spusti Celoten krmilnik pogled, tako da če sem izbral ta, ga potegnite tukaj, hej, tam je še en zaslon, zato zdaj s to isto storyboard slika Lahko imam vse zaslonov znotraj moje app, in lahko pomanjšate in videli, kako med seboj sodelujejo. To še ne bo interakcijo. Način, na katerega so ti zasloni 2 interakcijo je definirati odnose. Lahko v bistvu pomeni ta zaslon, ko pritisnete na ta gumb, Želim si, da zdrsne v tej novi zaslon. To pomeni, da je ta vrsta odnosa med  Prvi zaslon in drugi zaslon. Boste v bistvu ima puščico, od tega gumba na drugem zaslonu pravijo, da ko pritisnete na ta gumb, da je, če hočem. Tako kot smo krmiljenja kliknete in vlečete za opredelitev trgov bomo narediti isto stvar za opredelitev teh segues. Bomo videli zgled za to, in preden smo dejansko prehod iz enega zaslona na drugega iOS je dovolj prijazen, da pokličete to metodo imenovano prepareForSegue, in to je, če lahko začnemo pošiljanje podatkov iz enega v drugo aplikacijo. V primeru, da smo na tem, da pogled na to bo v bistvu nam omogočajo za filtriranje baseball ekipe, ki jih lige in delitve. Ko sem izberete ligo, na primer, želim, da prehod v mojem naslednjem zaslonu, kjer lahko prikažete vse oddelke v tej ligi ali vseh različnih ekip. Moram poslati tem zaslonu, kaj ekipe morate prikazati. Če želite to narediti, da bom izkoristil te metode tukaj. Končno, samo naključna točka na iOS. Če želite shraniti podatke pa je to stvar, ki se imenuje temeljni podatki, ki je pravzaprav nekako zapleteno delati. Prav tako lahko uporabite SQL za shranjevanje podatkov, , ki je spet lepo, ampak nekako na bolj zapleten strani delati, ampak iOS podpira tudi to res kul stvari, imenovane lastnine navaja, in premoženje seznam je samo datoteka, ki predstavlja ključne parov vrednosti. Ti določajo seznam tipk, in vi pravite na to tipko se bo matrika. Ta ključ se bo niz, v bistvu vse, kar lahko V JSON lahko počnejo na nepremičnine seznama in zato je to res lepo nam omogoča delo z nekaterimi podatki. Na primer, imam Teams.plist, ki sem jo ustvaril. Ustvaril sem novo PLIST datoteko in sem lahko v globino. To je slovar, to je slovar, so strune, in zato je to lepo grafični prikaz listine JSON ali samo nabor ključnih parov vrednosti, in tako to je podatek, da bom delal z mojo notranjost cca. Naj prvi pride sem. Imamo veliko več datotek sedaj. Ampak kaj je prvi pride sem v snemalno knjigo. Storyboard tukaj, če mi pomanjšati- Sedaj lahko vidimo, da je to tok moj app. Jaz sem jih prej začeti na tem zaslonu. Bom vrtanje navzdol na tem zaslonu in bom vrtanje navzdol na tem zaslonu, in bomo lahko tukaj vidimo, da če sem nekako premakniti eno od teh, ki smo jih okoli te puščice gredo od tu do tu, in tako sem določiti, da je bila puščica, če se približate malo, in če sem prišel na ta pogled upravljavca, in tukaj je celica, želim povedati, da ko se dotaknete celico Želim si, da zdrsne na drugo zaslonu. Lahko preprosto držite nadzor, pomaknete preko malo, držite nadzor, povlecite celico znova in spusti. In tukaj govorimo, kaj je prehod, ki ga želite uporabiti? Ali želite uporabiti to slide stvar, ki se imenuje pritisk? Ali želite, da zdrsne od spodaj navzgor? Temu se reče prenosa. In ko sem kliknite eno od teh, da se bo pripraviti na to puščico za mene, kar pomeni, da sem dejansko obravnava, kaj se zgodi, ko pritisnem na ta gumb grafično. Nisem napisati kodo, da dejansko potegnite iz enega zaslona na naslednjo. Jaz to opredelil vizualno znotraj Builder vmesnika. Če sem kliknite na to puščico, lahko vidimo, da sem dal to stvar ime. Poklical sem ga showDivisions, in to je, da bom lahko vedel Kaj prehod se bo zgodilo, pa bomo videli, zakaj v samo trenutek. Tako sem ožičen različne zaslone v moji app. Če bi bilo to tipko, na primer, ne pa pogled tabele, Lahko nadzor, kliknite na gumb, povlecite prenesejo v naslednji zaslon, in to je, kako lahko naredim, da navigacijsko pot. Res hitro, če pridemo v MasterViewController, še enkrat, bomo preprosto bo, da se opredeli seznam stvari, , ki bo prikazan v pogledu tabele. Tu govorim Želim si, da to PLIST datoteko in želim, da ga naložiti gor v slovarju, in ko ste to zbirko, bom odgovoriti na ta ista vprašanja znova. Tu je število oddelkov. Ena pa je ena vrstica za vsako ligo, in besedilo vsake celice morajo biti bodisi prvo, 1. liga, 2. liga, in tako naprej. Končno bom uporabo te metode, da smo videli samo z imenom prepareForSegue, in to je način, da se dogaja, da se izstreli ko kliknem na eni od teh vrstic in zato aktivira ta prehod da sem ustanovljen s puščicami. To se pravi, da sem lahko več odnosi z enega zaslona na drugega. Če imam 2 gumboma in vsak gumb vas popelje v drug zaslon Jaz bom imel 2 segues, 1 za vsak gumb. Ampak to je prepareForSegue spet bo treba ponovno za vsako od različnih razmerij, to pomeni, da moram pot identifikacije, če pritisnete gumb za 1. ali pritisnete drugi gumb. Se spomniš, ko sem dal tej segue ime, to showDivisions, Tako sem zdaj vem, da je to segue, ki je bil aktiviran. Vse, kar želim storiti, je, hočem reči, Želim, da ugotovimo, kaj sem zadel, in tako priti, da lahko rečem, da hočem indexPath za izbrano vrsto, Spominjam se indexPath samo pravi, če sem kliknil, in potem hočem povedati želim, da ugotovimo, kam grem. Ta destinationViewController, ki je last segue. To je zaslon grem, zato vem, da je zaslon bom pozval DivisionsViewController ker sem ustvaril ta razred, in sedaj, če rečem d.divisions Sedaj sem z določitvijo lastnost ogled krmilnika sem o kraju. To je, kako sem pošilja podatke iz enega zaslona na drug zaslon. Tako si ogleduje ta DivisionsViewController si lahko ogledate tukaj, da je v datoteki. h pa je, da je premoženje oddelki, in to je tisto, kar sem v bistvu poselitve, tako, da je, kako sem vedel, da bom prikaz delitve, ki ustrezajo liga, da sem kliknil, in spet, Dejansko miza, izgleda precej enako, le odgovor tistim 3 preprostih vprašanj, kot tudi prepoznavanje kaj se zgodi, ko se premaknete na naslednji zaslon. Samo nekaj drugih stvari tukaj. Ste opazili, na vrhu tukaj, da ne pravim # include Zdaj sem rekel # uvoziti. To je samo Objective-C stvar. Uvoz je v bistvu lepše različica vključujejo, in, na primer, moramo vedeti, kaj je to razred, tako da ne morem reči, DivisionsViewController. Če nismo hashtag standardio.c znotraj naše datoteke. C prevajalnik imel pojma, kaj je bilo printf. Podobno, če ne uvažajo DivisionsViewController prevajalnik res nima pojma, kaj je DivisionsViewController. Samo poskrbite, da znotraj vaše različne. Datotek m ste prepričani, da za uvoz ustrezna. h datoteke, tako da prevajalnik ne ve, kaj se dogaja. Končno, kaj Apple na koncu pa je prikaz nekaterih podatkov prek spletnega pogled, in tako spletno pogled je objekt, v katerem lahko vključite Malo spletni brskalnik znotraj vašega programa. Vse kar morate storiti je, da predloži URL v spletni brskalnik, zato želim iti v mlb.mlb.com, in to je, kako lahko dostopate na domači strani za vsako ekipo, in tako, da gre v tem URL-ju Spletna pogled lahko prikažete to zame, in sem lahko okoli brskanje, in simulator je v uporabi ta. No, to pa mi je PLIST. Če sem kliknite to tudi to pa mi je PLIST, in to drsenje bil obravnavan Z opredelitvijo teh segues. I kliknite to in še eno, in zdaj je moj UIWebView, tako da kar tako Tukaj je spletna stran za URL, da sem vključen, in nisem imel ničesar za obravnavo norega. To je, kako prikazati spletne strani. Stvari, kot je ta zadnji gumb tukaj so tudi z mano popolnoma brezplačno, ker sem te odnose s pomočjo opredeljena segues. Kakšno vprašanje? Ja. [Študent] Torej, če uporabljate alloc, ne boste nikoli več prostega kaj? Točno tako, ko kličem alloc in pr vam ni treba sprostiti. IOS bo ročaj vse to za vas. To je čudovito, in ti ne kršijo nobenih pravil. Ja. [Študent] Če bi vključili več ekip, ki bi ustrezali na zaslonu, bi bilo avtomatično pomikanje možnost, ali je to nekaj, kar morate dodati? Točno tako, če bi imel več skupin, na primer, bi to avtomatično ročaj pomikanjem za mene, in vsi pomisleki uspešnosti z veliko mizo tudi ravna povsem zame. Druga vprašanja? Vse to oznako se bo objavljen. Mi nekako prezrli malo bolj manjših podrobnosti, vendar stvari, kot določa nekatere lastnosti na spletni mnenju so samo stvari, ki jih lahko dobite z brskanjem dokumentacijo Apple, , ki je zelo, zelo lepo urejeni. Imajo veliko vzorčnih aplikacij in primer običajih različnih API-jev, tako da zagotovo seznanijo z vsebino tistih, če lahko. Tako bi lahko nekaj koristnih povezav, ki jih želite, da pogled na. To je le nekaj priročnih dokumentacija navodila. URL-ji so velike, tako da si skrajša. Ta prva je celotna knjižnica dokumentacije. Še malo palice iskanje, tako da če začnete tipkati gumb bo začela vam daje vse informacije o vseh stvareh, ki jih lahko storite z gumbom. Jaz sem tudi za programiranje pogledu tabele Guide. Skrbi tabele stališča precej bolj podrobno, kako narediti stvari, kot so dinamično dodate celice ali celice, urejanje ali odstraniti. Obstaja veliko vzorčnih aplikacij od Apple, ki vam bo pokazal, kako to storiti, in nazadnje, ta zadnja je vmesnik človek smernice in to je v bistvu pogovor komponent uporabniškega vmesnika, stvari, kot je, ne da bi gumb, ki je 4 točk za 4 pik. To je slaba ideja, in druge stvari, ki jih Apple želi, da narediš spodbujati dobro oblikovanje. Kakšne zadnje vprašanje, preden bomo zaključili do? V redu, vsekakor vas prosimo, da sva-se dogaja, da imajo posebne oznake na razpravo. Bomo imeli iOS 1, tako da zagotovo vas prosimo, da izkoristijo to. Če želite delati s svojimi sošolci na projektih ali pomagajo ugotoviti nekaj naključnih stvari iOS vas prosimo, da email mi in zagotovo skrbno pregledati vse kode na spletu, saj samo v interesu takrat, ko smo nekako prezrli več lepši zrnata podrobnosti o stvari. Ampak, če ne, potem veliko sreče na vaše projekte iOS, in upam, da bomo imeli Velik priliv aplikacij v App Store. [CS50.TV]