[Powered by Google Translate] [Seminár] [iOS: Písanie aplikácie ako šéf] [Tommy MacWilliam] [Harvard University] [To je CS50.] [CS50.TV] Dobre, všetci, vitajte na iOS: Písanie aplikácie ako Boss. Tento seminár sa bude sústrediť na písanie aplikácií pre iPhone a zase písať aplikácie pre iPad, a tak sme v podstate chodiť cez pár rôznych príkladov, ako vytvoriť aplikácie, jednoduchá hra ako Tic Tac Toe, alebo ak vás viac zaujíma pri vytváraní aplikácii ako akési čítačky správ alebo niečo, ktorý spolupracuje s internetu som sa o tom hovoriť rovnako. Tu je náš stručný program. IOS aplikácie sú napísané v jazyku nazvanom Objective-C, a tak je trochu podobná C, ale v skutočnosti vôbec, takže budeme hovoriť trochu o jazyk sám a potom, ako sa postaviť iPhone aplikácie pomocou tejto app program s názvom Xcode, ktorá, ak ste si nenačítali to ešte pokojne začať sťahovanie teraz. Je to niekoľko gigabajtov. Malo by to byť zadarmo na App Store, takže budete musieť mať Mac v ideálnom prípade beží najnovšiu verziu OS X. Ak si nie ste, žiadny problém. Máme Macu v science centre k dispozícii pre vaše použitie s Xcode nainštalovaný, a tak neváhajte využiť tie, pre rozvoj. Ak chcete, aby sa aplikácie, ale nemajú Mac, nebojte sa. Je tu veľa areáli zdrojov za to. A potom sa budeme na pokrytie 2 väčšie príklady rôznych aplikácií, ktoré môžete urobiť. Objective-C je technicky, čo sa nazýva Super sada C. To znamená, že kód C je tiež platný Objective-C kóde. To znamená, že sme trochu potrubia páskou na niektorých ďalších funkcií do C. Niektoré z týchto funkcií patrí nemajú niekedy písať malloc znova, vďaka Bohu, no museli starať o tie hlúpe ukazovateľov a uvoľňovať ich a všetko to okolo nenávidel si o C, a je to celkom preč v Objective-C. Teraz, Objective-C má tiež oveľa väčšie štandardné knižnice, takže je oveľa viac funkcií, dostanete zdarma vnútorné Objective-C. Pamätáš, keď sme písali PHP sme si všimli, že sme išli od Tento najmenší jazyk obrie knižnice všetkých týchto šialených vecí, ktoré môžete urobiť. Rovnaká vec sa stane v iOS. Je tu objekty pre veci, ako je kalendár budhistov, a naozaj nič môžete myslieť, zo snáď už existuje v implementácii Objective-C je. Cieľom časť Objective-C je odkazovanie niečo tzv Object-Oriented Programming. To je niečo úplne nového konceptu, ale my sme v skutočnosti väčšinou naučil Mnoho z týchto pojmov už. Myšlienka objektovo orientovaného programovania je to, že budete štruktúrovať veľa kódu okolo týchto vecí tzv tried, a tieto triedy sú naozaj oslávený structs. Vnútri struct sme v podstate povedal, tu je vec, a táto vec môže mať členov. Napríklad, môže uzol v prepojenom zozname iné veci ako hodnoty, ukazovateľ na ďalší uzol v zozname, a spoločne, že ukazovateľ a hodnota tvorí túto jednu inštanciu struct. Triedy sú veľmi podobné, s výnimkou triedy môže mať tiež funkcie vnútri z nich. Keď sme deklarovali, struct, mohli by sme len povedať, int n alebo uzla * ďalšie. Teraz s Objective-C skutočne môžeme dať funkcie vnútri týchto vecí. Ďalšia vec, ktorá triedy môžu urobiť, je, že môžu dediť dáta z iných tried. Napríklad, budeme sa pozerať na veľa vstavaných Objective-C triedy. Jedným z nich by mohla byť trieda, ktorá predstavuje pohľad na obrazovke, a tak tým chcem realizovať svoj vlastný názor sme v podstate povedať, niekoho firmy Apple zrejme naozaj milí ľudia, napísal túto triedu pre mňa, a to zvláda veci, ako je zobrazenie tlačidiel alebo vykresľovanie na obrazovku, a my by sme boli naozaj bolestný vykonávať všetky tie funkcie sami, a tak jednoducho zdedenie údajov môžeme povedať všetko, čo urobil v tejto triede Chcem tiež vnútri mojej triede, a potom budem robiť nejaké ďalšie veci, konkrétne implementovať aplikáciu. To je to, čo to slovo znamená dedičnosť. Budeme vidieť viac konkrétny príklad. A konečne, kľúč s objektovo-orientovaného programovania je to, že to vedie k dátovej zapuzdrenie. V niektorej z našich problémov nastaví by sme mohli mať tieto veľké, globálne premenné a globals všade, a to je, ako by sme sledovať stav. S triedami môžeme začať zapuzdrenie informácie vo vnútri objektu. Ak budeme mať o jednu obrazovku na našej aplikácii, nemáme naozaj potrebujú mať všetky dáta z na inú obrazovku v našom app vnútri toho, a tak by zapuzdrenie veci v triedach to vlastne vedie na oveľa lepšie kódu designu, a to je možné s niektorými z ďalších funkcií Objective-C. Varuje, syntaxe Objective-C je banány. Je to ako nič sme nevideli, tak to je trochu krivka učenia zvykať Čo sakra to znamená? Ale akonáhle sa dostanete v minulosti, že počiatočné krivka učenia je to naozaj, ale naozaj hladký začať písať aplikácie. Ak chcete deklarovať triedu, teda tu je moja trieda, existuje, a možno tu sú niektoré veci, ktoré budem definovať neskôr, Idem povedať @ rozhranie. Idem povedať @ rozhranie. Chystám sa dať svojej triede meno. A potom neskôr niekde inde budem hovoriť @ koniec, a všetko medzi @ rozhranie a @ konca bude moja trieda. To bude to, čo je vo vnútri našich. Súborov h Rovnako ako v C naše. H súbory v podstate povedal, tu sú niektoré veci, ktoré budú existovať. Ja nie nevyhnutne tí, čo robia ešte, ale kompilátor potrebuje vedieť, že existujú. Neskôr vo vnútri našej. M. súbory, pretože m pre Objective-C je miesto, kde sme sa to vlastne bude definovať, čo tieto triedy robiť. Rovnako ako naše. Súbory C, sme poskytli implementácia pre funkcie. Vnútri našej. M. súboru budeme hovoriť tu je to, čo všetky funkcie vnútri moja trieda-čo všetci robia. A konečne, vnútri struct by sme mohli povedať, vnútri týchto zložených zátvoriek int n alebo uzol * budúci, a v Objective-C budeme používať na základe kľúčového slova @ majetok, a to je to, čo sa deje na definovanie vlastností, alebo non-funkcie, ktoré sú súčasťou mojej triedy. Volanie funkcie v Objective-C je tiež banány. Keď sme vyhlásili funkcie v jazyku C sme si povedali niečo ako int foo a otvorené párenie a potom dal jej zoznam argumentov. To je to, čo prehlasuje, metódy alebo funkcie vyzerá ako v Objective-C. Ak chcem, aby deklarovať funkciu alebo metódu kde hovorím metóda je naozaj len funkcia, ktorá je členom triedy, tak trochu vzájomne zameniteľné, ale nie v skutočnosti, tak vnútri mojej metódy Chcem vytvoriť novú metódu. Bude to nič vrátiť, takže to bude typu void. To je návratový typ mojej funkcie. Teraz máme parens tu, pretože-neviem. Ďalšie bude meno mojej funkcie, a potom konečne máme bodkočiarku, rovnako ako sme mali v C. Čo je nové tu je ten chlap tu. Táto pomlčka je skutočne nevyhnutné, a to, čo to hovorí, je to, že táto metóda tu musí byť volaná na inštanciu triedy. Potom, čo sme vyhlásil naše structs sme pravdepodobne povedal niečo ako n struct uzol, a že v skutočnosti vytvorili alebo inštancie jeden z tých structs tak, že som sa mohol skutočne začať pracovať s tým, čo je vo vnútri nej, takže to pomlčka znamená, že musíme inštanciu triedy, rovnako ako my, že inštancie struct Než budeme môcť túto metódu volať na neho. Ak chcem začať pridávať argumenty mojich metód to dostane ešte viac banánov. Tu je moje meno metódy. Potom budem mať dvojbodku, a po tomto dvojbodkou sa píše tu prichádza nejaké argumenty. Táto metóda prijíma jeden argument. Typ argumentu je int, a meno tohto argumentu alebo premenná, ktorá budem začať používať vnútri metódy sa nazýva i Aj v tomto prípade je metóda. Trvá jeden argument. Ak chcete začať pridávať ďalšie argumenty, že dostane viac banánov v tom, že sme to hrubého čreva, ktorá hovorí, že tu je môj zoznam argumentov. Tento prvý argument je číslo. Teraz, tento druhý argument je zaujímavé. Premenná, ktorá budem používať vo vnútri mojej funkcie sa nazýva f, takže vnútri mojej funkcie som mohol povedať, f + = 1, alebo tak niečo. To, čo je tu v podstate kľúčom k tomuto argumentu alebo parametra. Rovnako ako sme mali kľúčové hodnotové páry aj niečo ako JSON alebo asociatívnych poliach Objective-C sa rozhodli povedať, jo, len preto, že je to naozaj jasné, Pri volaní metódy, čo všetky tieto parametre sú Ja som vlastne bude menovať všetky. Keď zavoláte metódu, budete vlastne hovoria andFloat, a potom miniete ho dovnútra Je zaujímavé, že sa tento nie je pomenovaná, ale všetky ostatné parametre sú takže ak sme mali tretí argument, aby som mohol povedať andFloat a ďalšie plavák a tak ďalej. Keď som volať tieto metódy je samozrejme banánov, takže keď mám objekt, a som definoval metódu nazvanú foo, a chcem volať, skôr než hovoriť foo OPEN / CLOSE parens Idem otvoriť konzolu. Tu je meno môjho metódy. Chystám sa zavrieť držiak, a to je objekt Volám to na. Pamätajte si, že všetky tieto metódy existujú v rámci tried pretože triedy môžu mať metódy definované vo vnútri nich. Tu som svojvoľne vytvoril objekt nejakej triedy, a to je syntax pre to robí. K dispozícii sú 2 kroky na vytvorenie objektu. Prvým krokom je, že chcem, aby prideliť miesto. To je ekvivalent malloc. Nemáme hovoriť malloc už. My upustil m, robil to alloc, a nahradil. C s M.. Potom, čo sme Alloc niečo, čo potom je treba ju inicializovať. V podstate, keď si vytvárať objekty budete chcieť mať nejakú logiku , Ktorý vykonáva, keď ste vytvorili oni, takže si môžete prejsť v niektorých predvolených hodnôt alebo niečo také, a tak to init metóda je to, čo v skutočnosti vytvára objekt. Sme najprv vyčleniť priestor, rovnako ako sme to urobili v C, a potom sme ju inicializovať, ktoré môžu alebo nemusia urobiť veľa. Potom sa vraciame túto vec do objektu o. Je tu hviezda tu, pretože je to technicky ukazovateľ, ale nebojte sa, ukazovatele nie sú tak veľký obchod v Objective-C už. Teraz sme inštancií tejto triedy s názvom NSObject, a to je len náhodná trieda, ktorá má Apple. Sme inštanciu to, a teraz mám inštanciu tejto triedy v tomto objekte O, to znamená, že keď definovaná Tieto metódy som mohol zavolať im takhle. Podobne, keď som chcel volať metódu s jedným argumentom, tak toto je bar metóda, ktorá berie jeden argument, a tu je baz: qux metóda, tak to trvá 2 argumenty. Toto je volanie jednej funkcie na tohto objektu o. Zmysel? Syntax by mala zmysel, ale tak nejako na to zvyknúť. Dobre, poďme hovoriť o pár vecí, ktoré sú zabudované do Objective-C , Ktoré neboli nutne zabudovaný do C. V jazyku C sme trochu museli vysporiadať s reťazcami, pretože tieto hlúpych postáv poľa, a to mám naozaj otravné. Objective-C má tie všetko postavené v roku pre nás, a je postavená v roku Pomocou tejto triedy s názvom NSString. Keď chcem vytvoriť NSString máme viac obskurní syntaxe. Skôr než hovoriť "cs50" Hovoríme @ "cs50" a to je len Syntax pre deklarovania reťazcov v Objective-C. To je veľmi jednoduché zabudnúť, takže sa nemusíte. Teraz, keď som sa to, je to reťazec, ale všimnete je to naozaj len objekt. Povedal som NSString, čo znamená, že inštancia triedy volal NSString, ktoré niekto iný písal pre mňa, a oni boli veľmi milý, a tak teraz Môžem začať volať metódy na ňom. Ak som volať metódu dĺžky na tento objekt s to bude návrat ku mne dĺžku reťazca. To je rovnako ako strlen v C. To by sa vrátiť 4. Podobne, iný spôsob by som mohol chcieť len o to characterAtIndex. To je metóda, ktorá uvádza na tento reťazec je Chcem, aby ste si 0. charakter, a tak by to ku mne nevráti znak c, a tam je celá partia viac z týchto metód, ktoré môžete Google naozaj ľahko. Dokumentácia Apple je skvelá, a my sa na to pozrieť v trochu. Tí sú reťazce. Máme tiež variabilný veľkosť poľa zabudovaný Zapamätať si ma na C, keď sme vyhlásili, pole sme museli povedať, že máte 5 prvky, koniec príbehu. Keď sme sa dostali do JavaScriptu a PHP môžeme začať robiť veci, ako je pridávanie prvkov alebo pohyblivých prvkov. Môžeme to urobiť to isté v Objective-C. Skôr než vytvorenie poľa v normálnym spôsobom C máme opäť ďalšiu triedu s názvom NSMutableArray. K dispozícii je tiež NSArray, a to bude v podstate zostručniť nejakú ponuku. To hovorí, že prvá vec, ktorú chcem urobiť, je chcem prideliť priestor pre nové pole, a potom, čo som prideľovať Aj potom je potrebné, aby ju inicializovať. Opäť platí, že len volaním týchto metód 2. Teraz čo znamená, že vo vnútri tohto objektu sa Som prázdne pole tam sedí. Ak chcem pridať niečo na toto pole, môžem volať AddObject metódy. Chcem pridať objekt do poľa a, a chcem pridať reťazec CS50. Ak by som chcel naopak odstrániť, že môžem povedať, že chcem, aby odobrať objekt na prvom mieste na pole alebo objekt. Zmysel? Dobre, tak nejako zvyknúť hranatá zátvorka vec. Mimochodom, vo vnútri mnohých knižníc Apple uvidíte túto NS. NS vlastne kandiduje na ďalší krok, ktorý bol jednou z firiem Steve Jobs prvý, a to je, kde sa naozaj začal písať veľa kódu ako druh základ pre Mac OS X a všetky ostatné veci, a tak to NS je druh tejto peknej odkazu vykríknuť jedného z predchádzajúcich spoločností späť, keď Apple bol prvý začínate. Je to všade. Poďme sa pozrieť na viac holistického Objective-C napríklad. Tu som vnútri Xcode. Ak chcete sa sem dostal, som sa prvýkrát stiahli Xcode z App Store, otvoril ju, a potom som išiel sem do súboru, sem do nového, a potom sa projektu. Potom, čo som robiť, že som sa všetky tieto možnosti, čo chcem vytvoriť, a tak budeme sa pozrieť na tieto možnosti neskôr, ale len pre tento príklad, pretože sme v skutočnosti bude mať aplikácie ešte, Prišiel som sem, a ja som povedal Nástroj príkazového riadku, a to je aplikácia, ktorá by som mohol bežať na príkazovom riadku rovnako ako sme boli beží od C. To je, ako som vytvoril tento projekt, a tak som tu, tak nech sa pozrieť na prvú tohto súboru, a to by malo vyzerať celkom povedomý. Mám int meno. Tu je môj priateľ argc, môj druhý kamarát ArGV. A tak môžeme vidieť, že je to vstupný bod pre moje prvé Objective-C aplikácie. Tu môžeme ignorovať to pre teraz. To je v podstate nejaký správa pamäte veci, ktoré budete naozaj niekedy sa čoho báť. Poďme sa pozrieť na tohto prvého bloku tu. Tento prvý riadok, keď poviem, že Student * alice = [[Študent alloc] init] čo to je robí? Táto prvá študent tu, je to pravdepodobne triedy. To nie je trieda, ktorá Apple napísal, ale je to trieda, ktorá som napísal. Prvá vec, ktorú chcem urobiť, je chcem prideliť miesto pre nový študent, a potom chcem k inicializácii, takže to mi dáva späť Tento nový študent objekt, a ja som to ukladanie do premennej s názvom Alice. Kde sa to trieda pochádza? No, tu na ľavej strane sú všetky rôzne súbory vo vnútri môjho projektu. Vidíme tu mám Student.h a Student.m. . H súboru, pamätajte, je miesto, kde som sa vyhlásiť všetky tie veci, že bude existovať v rámci triedy. Poďme sa na to pozrieť. Dobre, máme tu túto @ rozhranie, a to hovorí, že prichádza vyhlásenie o všetko, čo bude existovať vo svojej triede. Potom mám dvojbodku. Potom som si tento NSObject vec. Táto dvojbodka znamená, že dedičské trochu sme diskutovali trochu skôr. To hovorí, že všetko, čo môže urobiť NSObject kde NSObject je táto trieda napísal niekto iný, všetko toto NSObject môže urobiť Chcem byť schopný to urobiť. Tým, že hovoríte: NSObject to znamená, že som v podstate zdedil všetky funkcie inej triedy. To naozaj mi dal veľa rôznych metód a vlastností, ktoré môžem použiť. Tu dole som vytvoriť 2 vlastnosti. To znamená, že môj študent, keby to bola struct, by tieto byť 2 veci vnútri mojej struct, takže každý študent má meno že je reťazec, a študent má tiež známku, ktorý je int. Konečne, tu dole budem vytvoriť metódu pre môjho študenta. Zavolal som moja metóda, initWithName, a to trvá jeden argument, a tento argument je reťazec, a zavolal som to pomenovať. Teraz sa poďme pozrieť na to, ako sme vlastne vykonať túto triedu. Tu, teraz som vo vnútri mojej. Súboru m, m pre realizáciu, myslím. Mám vykonávanie, môj koniec, a tu je miesto, kde som vlastne definovanie čo initWithName robí. Mám initWithName, meno mojej parametra, a potom tento je miesto, kde som vlastne vytvoriť študenta, a tak to je trochu záhadný, ale toto je štandardizovaný ktoré chcete zahrnúť do svojich konštruktérov. Táto funkcia inicializácia tu, initWithName, je typ konštruktory. Tie v podstate budovať nový študentský objekt a možno odosielanie niektoré údaje vo vnútri nej. Prvá vec, ktorú chcem urobiť, je chcem volať init na tejto super vec. Pamätajte si, že keď som povedal, tu v Súboru h že všetko NSObject má študent tiež má. To znamená, že keď som sa vytvoriť študenta, čo som tiež musieť urobiť, je uistite sa, že NSObject, že som zdedil všetky týchto údajov z je tiež správne inicializovaný. Čo musím povedať, je to super bude skutočne odkazovať na materskej triedy že som dedí z, tak chcem, aby sa ubezpečil som inicializovať všetko, čo som v závislosti na ako začnem sa snaží používať. Potom ak to správne inicializovaný je to rovnako ako ostatné, ak malloc nemal vrátiť hodnotu null, potom môžem začať nastavovať niektoré vlastnosti. V JavaScriptu a PHP sme toto kľúčové slovo volal toto, a to len na aktuálnu inštanciu triedy. V Objective-C nazývame túto ja. Keď hovorím self.name, to znamená, že objekt Len som vytvoril, keď som povedal, študentka alloc init, že sa to dá mi objekt. To znamená, že chcete nastaviť názov tohto objektu na čo som práve prešiel dovnútra Rovnako ako v C, mať prístup členov s touto bodkou, tak self.name hovorí, že meno študenta objektu sa teraz bude, čo ste práve prešiel dovnútra A tak nakoniec, môžem sa vrátiť, tak som skutočne dostať niečo späť. Otázky? Dobre, takže toto self = Super init, ak nechcete úplne pochopiť dedičnosti veci neboj. Len viem, že ak ste niekedy chceli vytvoriť svoj vlastný init metódu len urobiť, a budete mať dobré ísť. Jo. >> [Študent] Čo prípade samostatnej znamená? To znamená, že keď sme sa malloc niečo, čo sme vždy skontrolovať, či je to rovná null, a ak je to nula, potom sa ukončí. To je to isté, pretože ak to vráti null, potom sme pravdepodobne bude seg poruchy ak by sme začať sa snaží manipulovať. To je naša študentka triedy. To znamená, že môžeme inicializovať našich študentov jedným z dvoch spôsobov. Keď poviem, že študentka alloc init nebudem používať túto metódu, že som práve napísal, a namiesto toho som si jednoducho povedať alice.name, a teraz idem nastaviť, aby názov vlastnosti. Podobne, keď chcem používať túto metódu initWithName Môžem len povedať Alloc, a potom skôr než hovoriť init Idem zavolať, že metódy, ktoré som vytvoril, a budem sa potom Bob. V tomto bode, tento objekt Bob má meno rovnaké Bobovi. Dobre, tu dole som pomocou tohto NSMutableArray, že sme sa zamerali na staršie. Som prideľovanie space.Then som inicializáciu nového poľa. Chystám sa pridať 2 veci k nej. Toto pole teraz drží študentské objekty. Všimnite si, že nikde som si, že toto je pole študentov. Povedal som, že je to pole, obdobie. Potom som si dal, čo do nej, že chcem. Tu mám 2 objekty. Nakoniec, mám iný objekt tu, tento TF. Tu v TF.h v podstate to isté. Ja som zdedil od NSObject, a mimochodom, Pri vytváraní tried je to všetko pre teba urobil, tento druh rozhrania štandardizovaný. To má vlastnosť študentov. Mám pár Metódy tu nie sú naozaj veľa, a tak to znamená, že potom, čo som vytvoriť tento objekt TF Môžem zavolať túto metódu stupňa na to takhle. Akékoľvek otázky týkajúce sa Objective-C syntaxou ako začneme sťahovať do niektoré ďalšie zaujímavé aplikácie vývoj veci? Dobre, tak poďme vlastne robiť aplikácie pre iPhone. V základnej triedy, ktoré budete používať vo vnútri vášho iPhone app sa nazýva zobrazenie regulátory, a pohľad regulátor v podstate predstavuje jedinú obrazovku vnútri vašej aplikácie, takže keď som na hudobné aplikácie, napríklad, Jeden pohľad regulátor by mohlo predstavovať názor, v ktorom som zobraziť všetky skladby na mojom iPhone. Iný pohľad regulátor mohol byť, keď som kliknite na skladbu a začať hrať ju alebo ako som vŕtanie dole do umelci. Každá z týchto rôznych obrazoviek môže byť reprezentovaný ako iný pohľad regulátora, a pohľad radič je naozaj len trieda, ktorá hovorí, ako sa táto obrazovka funguje. Veci vnútri kontroleru pohľadu, budeme mať vlastnosti, takže veci ako tlačidlo bude vlastnosť nášho pohľadu regulátora. Sme tiež bude mať metódy, a to sú v podstate obslužné rutiny. Táto metóda hovorí, že keď stlačíte toto tlačidlo Chcem urobiť niečo, a nakoniec, opäť, budeme používať tento vlastné kľúčové slovo pre prístup k aktuálnej inštancii. Ak chcete vytvoriť rozhranie v systéme iOS, je naozaj veľmi jednoduché. Majú tento pekný drag and drop rozhranie s názvom Interface Builder, a 2 základné pojmy, ktoré drôt vášho Objective-C Interface Builder sú IBOutlet a IBAction. IBOutlet jednoducho hovorí, že ak ste deklarovať vlastnosť, ktorá je tlačidlo, a chcete ju pripojiť k niečomu vo vašej skutočnej rozhranie, budete hovoriť, že je to outlet. Podobne, ak chcete, aby zastupoval obslužnú rutinu udalosti potom budete hovoriť, že je to akcia. Ak chcete skutočne zapojiť do tohto grafického znázornenia a váš kód je to naozaj, naozaj jednoduché. Ak chcete pripojiť IBOutlet, všetko, čo musíte urobiť, je môžete ovládať tlačidlom, a uvidíme príklad to naozaj rýchlo. Môžete ovládať kliknite tam, kde sa hovorí, View Controller. Budeš pretiahnuť do rozhrania, alebo naopak, Ak chcete pripojiť obslužnú rutinu udalosti budete pretiahnuť z rozhrania v opačnom smere. Poďme sa pozrieť na naozaj jednoduchom príklade iOS. Poďme vytvoriť nový projekt. Chystám sa prísť sem do aplikácie, a budem na tlačidlo Single View aplikácie. Idem na tlačidlo Ďalej. Dám svoj projekt názov. Zavolám jej Hello. Zaujímavé je, že Apple predpokladá, že budete vytvárať produkt takže môžete predať a oni môžu zarobiť peniaze. Tu dole som chcel povedať, že je to iPhone app. Môžete vytvoriť aplikáciu pre iPad, alebo ak chcete vytvoriť jednu z týchto aplikácií , Ktorý podporuje obe zariadenia, ktoré môžete urobiť taky. Jedná sa o to, čo chcete, aby vaše začiarknutie vyzerať. Ak chcete použiť storyboardy, ktoré uvidíme neskôr, a určite chcete používať automatickú počítanie referencií, čo je sympatické, že vám bráni museli povedať, malloc a free. Ak chcete volať malloc a free, tak by som opustiť tento kontrolované. Budem kliknite na tlačidlo Ďalej, a nakoniec, to bude a opýtajte sa ma, kde chcem uložiť. Budem hit vytvoriť, a je to tu. Vytvoril som nový projekt. Sem na ľavej strane sú všetky súbory, ktoré sú vo vnútri môjho projektu, a všimnite si, že mám veľa, a ani som nič. IOS je skvelá. Napríklad, tu to ViewController.h, to bude predstavovať svoj prvý pohľad radič, takže prvý obrazovke vnútri mojej aplikácie. Teraz už viem, čo to hovorí. Hovoríme volám tejto triedy ViewController, a ViewController robí všetko, čo UIViewController robí, a to je opäť nejaký trieda, ktorá Apple napísal, že robí veľa šikovný vecí pre nás Páči zobrazenie obrazovky. Tu je miesto, kde môžem skutočne začať vymedzenie toho, čo podľa môjho názoru regulátor robí, a ukázalo sa, že som sa naozaj nepotrebujú nič z toho. To je často používaný kód, ktorý Apple mi dáva zadarmo. Ja som napríklad, že prvý riadok, alebo nemám triedu, takže sa môžeme zbaviť toho a toho zbaviť. Dobre, tak to je moja prázdna obrazovka. Teraz poďme kliknite na MainStoryboard.storyboard, a to je miesto, kde to začína byť zaujímavé. Jedná sa o prvú obrazovku na svoje aplikácie. Ak chcem pridať tlačidlo, v HTML som musel vytvoriť tlačidlo tag. V Android budete musieť vytvoriť tlačidlá značku, ale v iOS, ak som sem prišiel, aby v pravom dolnom rohu a keď som kliknite na tento tretí jeden tu, kde sa hovorí objektov, a môžem sa posunúť dole, alebo môžem začať hľadať tlačidlo. A pozrite sa, tlačidlá, takže keď som vlastne pretiahnuť toto právo existuje, Práve som pridal tlačidlo na túto obrazovku, na mojom app. Ak chcem zmeniť text, môžem dvakrát na ňu kliknite, povedať niečo nalákať ako "Stlačte mňa." Dobre, teraz, keď spustím túto aplikáciu, tak sme ho skompilovať tak spustiť som kliknite na tlačidlo Play v ľavom hornom rohu, a tu je moja app. Neurobil som nič, a ja som dostal sladkú hľadá pre iPhone. Ak chcem, aby to zastaviť, môžete kliknúť na tlačidlo stop pretože je to väčšia zábava. Povedzme, že som vlastne chcem aby sa niečo stalo, keď som stlačte toto tlačidlo. K tomu, že to, čo musím urobiť, je, že som potrebné vytvoriť nové obslužné rutiny udalosti alebo akcie. To znamená, že musím vytvoriť nejakú metódu, ktorú chcem byť nazývaný keď som stlačte tlačidlo, tak sa poďme vytvoriť novú metódu. Som vnútri ViewController.h. Musím povedať, že existuje metóda. Potrebujem pomlčku ako prvý, pretože budem sa volá to na kontroleru pohľadu. Musím dať to typ. Typ to bude, že IBAction vec, ktorú sme videli predtým. To je obslužná rutina udalosť, takže to bude vrátiť IBAction, a to je náznak, aby Xcode povedať, že to je niečo, čo chcem zapojiť niečo. Môžem dať mu meno, ako je buttonPressed, bodkočiarkou. Teraz som vyhlásil novú metódu vnútri mojej triedy. Ja som povedal, táto metóda má existovať. Teraz sa poďme prísť do ViewController.m, a povedzme, že to, čo táto metóda môže urobiť. Keď začnem písať, napríklad, (void) buttonPressed Oznámenie Xcode je to naozaj pekné a autocompletes pre mňa. To je naozaj úžasné. Všimnite si, že vo vnútri. M. súboru môžem tiež povedať neplatné, a to preto, že IBAction nie je vlastne druh. Je to vlastne hashtag definovaný niekde byť neplatné, a znova, je to len náznak, aby Xcode, že hovorí, že Chcem, aby to bolo obslužná rutina udalosť, a uvidíme, prečo pár sekúnd. Po stlačení tohto tlačidla sa budem robiť niečo nepríjemné Páči zobrazí popup. Ak chcete, že môžem vytvoriť novú inštanciu tejto triedy s názvom UIAlertView, a to je trieda, ktorá Apple napísal, že sa bude zobrazovať otravné vyskakovacie okná. Budeme volať tento popup upozornenia, a mám 2 kroky, nezabudnite, k vytvoreniu tohto objektu. Prvá vec, ktorú musím urobiť, je prideliť miesto. Chcem UIAlertView. Chcem prideliť miesto. To je môj prvý metóda. Môj ďalší metóda je chcem k inicializácii, a tak mám túto veľkú, dlhú metódu zvanú initWithTitle. To je v podstate bude kontrolovať, čo to popup hovorí. Názov mojej Popup môže byť ahoj. Posolstvo tohto okienka môže byť "Toto je iOS." Delegát vec, ja neviem, čo to je. Povedzme, že to nič nie je. Teraz tlačidlo, že sa to objaví povedať niečo ako "To určite je," a ja naozaj nechcem žiadne ďalšie tlačidlo, tak sa poďme odstrániť to a zatvorte konzolu. Dobre, som vytvoril ešte jednu. Tam ideme. To je, ako môžem vytvoriť nový popup. Ak chcem skutočne ukázať popup chcem volať show metódy. Ak chcete, že môžem povedať, upozornenia a ukázať, a znova, autocomplete bol super nice. Ak som zabudol, čo to bolo, keby som si napísali v s, Môžem prechádzať sem prísť na to, čo to je, a filtruje pekne. Teraz som vytvoril tento nový popup. Vrátime sa na to, čo delegát znamená neskôr, a teraz chcem povedať, chcem to metóda, ktorá sa padáka keď som stlačte tlačidlo, takže budem sa vrátiť do môjho scenára, a chcem teraz pripojiť túto IBAction. Prvá vec, ktorú chcete urobiť, je kliknúť na tlačidlo. Keď som toto tlačidlo Chcem aby sa niečo stalo. Nebudem držať kontrolu. Idem na tlačidlo a pretiahnite tlačidlo na viac ako tu, kde sa hovorí, že View Controller. Môžeme vidieť, že to pekne svieti. Ak som sa pustil so svojím myšou Teraz mám to okno sem, kde som nejaké možnosti. Jedným z nich je udalosťou, ktoré môžem zaregistrovať. Jedná sa o všetky tie metódy Aj deklarovaných v mojom súbore h ako IBActions. To je, ako Xcode vie, čo by sa mal objaviť v tomto malom zozname, tak, že je to len náznak. Keby som kliknite na tlačidlo stlačené, som teraz registrované obslužnú rutinu udalosti. V JavaScriptu sme museli povedať, že som nejaký kód, ktorý registrovaná obslužná rutina udalosť. V Objective-C bolo naozaj tak jednoduché. Keď spustím to znova teraz, keď som stlačte tlačidlo môj obslužná rutina udalosť je vyhodí, a budem si to popup. Super, super jednoduchý tam. Ak ste niekedy chceli vidieť všetky udalosti, ktoré sa dejú byť registrované na komponenty, ak som kliknite na toto tlačidlo a ja som prišiel sem na pravej strane prvý môžete vidieť tu môžem robiť veci, ako je typ tlačidla, takže ak chcete jednu z tých, ktoré som to, alebo na Pridať kontakt tlačidlo alebo čokoľvek iného. Ak chcem vidieť všetky udalosti, ktoré sú na toto tlačidlo keď som prišiel celú cestu sem na pravej strane môžeme vidieť tu na udalosti, ktoré mám všetky tieto rôzne udalosti. Môžem stlačte tlačidlo, keď som pustil tlačidla, keď som dvakrát kohút alebo čokoľvek, a ten, ktorý som práve registrovaný, je táto udalosť nazýva Dotknite sa vnútri, a to hovorí, že akonáhle môj prst príde na tlačidlo táto udalosť sa chystá na oheň, a to je presne to, čo sa práve stalo. To je druh predvolené tlačidlo stlačené udalosti. Akékoľvek otázky tak ďaleko? Dobre, že to, ako môžeme začať zapojiť do veci v našom kóde do vecí vnútri nášho rozhrania. Nezabudnite prvá vec, ktorú sme museli urobiť, bolo nájsť kód, a potom sme napojený rozhranie ku kódu, a tam to naše prvé app. Dobre, to bolo naozaj cool, a vytvorili sme toto tlačidlo. Čo ak nechceme, aby si vytvoriť veľa vlastností predstavuje tieto tlačidlá? Napríklad, v Tic Tac Toe mám 9 tlačidiel, a bolo by super, super nepríjemné musieť pretiahnuť 9 krát alebo keď som musel robiť Tic Tac Toe s 81 miesto 9 a musel som drag and drop 81 krát, a to je lame. Čo môžeme urobiť, namiesto toho je podobne ako HTML keď sme mali veci ako ID a mená a môžeme hľadať veci ich ID, je to podobný pojem v iOS tzv tagy. Tag je jednoducho jedinečný číselný identifikátor pre komponent. Ak Hovorím to má tag 0, napríklad, keď som vytvoriť tlačidlo a dať mu tag 0, a uvidíme, ako to urobiť, že pár sekúnd, keď chcem sa dostať na toto tlačidlo môžem jednoducho povedať, chcem volať viewWithTag metódy na objekte sem, self.view, ktorý predstavuje aktuálnu obrazovku, napríklad. Keby som zavolať, že viewWithTag metódu, budem zatiahnite tlačidlo s tagom 0. Poďme sa pozrieť na to, že bude stavať Tic Tac Toe. Po prvé, to je môj scenár. Vytvoril som tieto 10 UI tlačidla. Všimnite si, že sú všetci rovnakej veľkosti. Keby som kliknite na jednu z nich, a vrátim sa sem na tejto pravej strane uvidíte som upravil písmo tu, tak som sa na písmo, trochu väčšie, ale to, čo som aj urobil, bolo, som nastavte tento tag. Povedal som, že to má tag 1, a to vľavo hore. Teraz, keď som kliknite na ďalšie tlačidlo, ako je tento druhý tu, Teraz uvidíte, že moja značka je 2. Každé z týchto tlačidiel má jednoducho jedinečný značku, a tak to je neskôr, ako budem začať interakciu s mojím aplikácie. To všetko je vo vnútri jedného pohľadu regulátora, ale tu je to, čo máme. Máme 3 vlastnosti tu. Prvý a posledný budú reprezentovať stav mojej doske. V podstate to prvé je pole predstavujúce kde Xs a Os sú. Tento druhý tu nám hovorí, ktorý je na ťahu. Určite ste si všimli, že som aj tieto veci tu. Ako keď sme vyhlásili, vlastnosti, dal im meno a typ. Môžeme tiež dať im nejaké ďalšie informácie tu. Toto Prvý hovorí nonatomic, a čo to hovorí je v podstate len jedna vec, ktorú nikdy nebude pokuse o prístup k tejto premennej v čase. Dalo by sa to zložitejšie aplikácie, ktoré sú multi-Threaded, a tak v roku Scratch sme mali rôzne závity, a rôzne škriatkovia mohli robiť rôzne veci v rovnakom čase. Ak to nie je tento prípad, ktorý nie je v ničom, že budeme pri pohľade na, Ak povieme nonatomic to vlastne bude robiť veci trochu rýchlejšie. Máme aj túto vec s názvom Assign, silný, alebo slabý. Tento priradiť len hovorí, že sa jedná o štandardný typ. To nie je objekt alebo ukazovateľ, pretože je to len bool, tak bool je vstavaný do Objective-C. To hovorí, že sa nesnaží nič robiť fantázii s ukazovateľmi tu. Je to normálne stará scaler. Silné a slabé, to slabé hovorí, že v skutočnosti Chcem, aby to mal ukazovať na niečo v pohľade regulátora. Nebudem sa skutočne prideliť alebo init to sám. Interface Builder, keď som spustiť aplikáciu, bude zvládnuť všetku tú inicializácii. Keď poviem slabá, že hovorí, že niekto iný bude vytvárať to. Keď poviem, že silná, to hovorí, že budem mať jeden to je vytvorenie tejto dosky objektu, a tak tu mám nejaké ďalšie metódy tu, Napríklad, akcie, keď je stlačené tlačidlo nová hra, akcia pre pri stlačení niektorého z ďalších tlačidiel, a et cetera. Nebudeme sa dostať do príliš veľa logiky Tic Tac Toe, aj keď je to veľmi vzrušujúce, ale poďme sa pozrieť na niektoré z vecí, ktoré môžeme urobiť vnútri iOS. Táto nová hra metóda sa bude vyhodený keď som stlačte novú hru tlačidlo. Ak chcete pripojiť, že až som jednoducho prísť do môjho scenára. Som klikol na novú hru. Ak prídem sem napravo vidím, že Dotknite sa vnútri je pripojený k newGame metódy. To je dôvod, prečo to bude dostať padáka. Metóda newGame urobí nejaký súbor hore. Bude to, že chcem, aby si vymazať stav dosky. To je pekný spôsob na premenlivých polí. To je povedať, že je to teraz X je na rade, a teraz idem využiť tejto viewWithTag veci. Ja viem, že môj tlačidlá majú slová 1-9, a to je niečo, čo som svojvoľne vybral. Ak chcem nastaviť text každého tlačidla je prázdna pretože som práve začal novú hru, a ja nechcem Xs alebo Os zostať cez to dokážem. Môžem povedať, chcem názor na značku, 1, 2, 3, 4 et cetera. To bude ťahať inú tlačidlo zakaždým. Tu budem vrci UIButton. Rovnako ako my by mohlo vrhnúť ints na plaváky a naopak to hovorí, že chcem hodiť to na UIButton. To znamená, že druh je potom * UIButton pretože ukazovateľov, ale nebojte sa, že to nie je desivé už. Akonáhle budem mať na toto tlačidlo idem volať metódu na to. Táto metóda sa nazýva setTitle Forstau, a tak to hovorí Chcem nastaviť text tlačidla sa prázdny reťazec, a chcem, aby to bolo prázdny reťazec, ak to nie je stlačené. Ak som pomocou tejto metódy, môžem zmeniť text tlačidla akonáhle niekto udrie, ale chceme povedať, keď je tlačidlo len tam sedí Chcem text byť prázdne. Nakoniec, budeme inicializovať moja doska, a ja poviem, že všetko je v súčasnej dobe 0, tak táto doska členovia nemenná je premenlivé polia, čo znamená, že môžete volať AddObject metódy a len 0 vnútri nej. To je to, čo sa stane, keď si vytvorím novú hru. Poďme sa pozrieť na inú. Táto metóda je tu IBAction, že sa to byť stlačené zakaždým, keď jeden z tých štvorcov je stlačené. Teraz máme nejaký Tic Tac Toe logika. Sme prísť na to, ktorý je na ťahu, a na základe toho sme buď nastaviť X alebo O, ale sme si všimli, že sme opakovaného rovnaký obslužnú rutinu udalosti pre jedného každého z týchto tlačidiel. To znamená, že nemám metódu pre ľavé horné tlačidlo, iný spôsob tlačidlo vpravo dole, aj keď som mohol urobiť, že. To by nebolo naozaj dobrý design. Čo tu robím je, že som vlastne ísť na určenie čo tag tlačidlo, ktoré bola stlačená je. Všimnite si, že táto hra metóda prijíma jeden argument. Hovorí sa tomu odosielateľ, a to, čo odosielateľ je odosielateľ bude predstavujú presne to, čo bolo prijaté opatrenia na. Ak stlačím tlačidlo, tento odosielateľ bude, že UIButton že som vlastne stlačení, takže to znamená, že tento UIButton má značku, pretože som vytvoril značku. Ak chcem sa dostať na značku môžem len povedať, Chcem tag odosielateľa, a znova, práve som odliata to na UIButton. Ja náhodou viem, že odosielateľ bude UIButton. To nemusí vždy byť UIButton. Mohol by som napríklad, registrovať rovnakú obslužnú rutinu udalosti  pre jeden pre tlačidlá, jedno pre jazdca. V tomto prípade, ja viem, že sú všetky tlačidlá, takže som chcel povedať Chcem, aby to bolo tlačidlo, a potom môžem dostať značku, a z tagu ja teraz viem, kde som vo vnútri dosky. Potom môžem jednoducho nastaviť buď X alebo O, môžete prepínať na turne, zistiť, kto vyhral, ​​et cetera. Akékoľvek otázky týkajúce sa to tak ďaleko? Dobre, kód sme dosiahli on-line nechceme dostať do príliš veľa z Toe Tic Tac logike, ale teraz je vidieť, že naozaj všetko, čo robíme je my sme looping cez tohto poľa, takže máme pár pre slučiek tu, a my sme len nákupný vidieť máme zhodu vo všetkých riadkoch, Relevantnosť v stĺpci alebo niečo podobné. Ak chcete skutočne spustiť túto aplikáciu, keď som kliknite na jedno z týchto tlačidiel že hra metóda bol vyhodený, tak to znamená, že som bol práve nastavený Tlačidlo byť X, takže teraz toto tlačidlo bude O, a tak ďalej, a tak to je, ako my teraz začíname pracovať s touto jedinou stránku aplikácie. Budeme písať kód, tak neváhajte a prezrieť, že ale poďme teraz hovoriť o niektorých aplikácií, ktoré sú viac než len jednu stránku. Tak vzrušujúce ako Tic Tac Toe je, veľa aplikácií vnútri iOS sú trochu z týchto cvičení sa veci s viacerými obrazovkami. Prvý koncept, že budeme musieť hovoriť o sú protokoly, a protokol je jednoducho súbor metód ktoré môžete sľúbiť, že definovať. Ak som vytvoriť tento nový protokol s 2 metódami, tento prvý stupeň, ak návratový typ je void, volal som to foo. To trvá žiadne argumenty. Mám inú metódu. To vráti int. Nazval som ju blokovať, a to trvá jeden argument. To všetko je protokol, ktorý sa nazýva SomeProtocol tu, Jedná sa o súbor vecí, ktoré niekto môže realizovať. Nemám vo vnútri tohto protokolu povedal, čo foo robí. Namiesto toho, ja som len povedať, že si mohli definovať foo, ak chcete. Ak som vytvoriť zobrazenie radič alebo vytvoriť triedu Môžem vnútri tejto triedy sľubu realizovať Niektoré z týchto metód, takže napríklad v prípade povedať teraz hovorí, že robím sľub vám, že vo vnútri tejto triedy View Controller budem mať definície pre oba foo a bar. Prečo je to užitočné? Veľa komponentov vnútri iOS využiť tohto návrhový vzor tzv delegáciu, a to, čo hovorí, že delegácie je to, že sa napríklad, keď sa textové pole a tam sú niektoré udalosti, ktoré by mohli byť registrované vo vnútri mojej textového poľa, skôr než vytvorenie samostatných akcií, čo môžem urobiť, je môžem povedať delegát tohto textového poľa bude nejaký objekt. Keď hovorím, že je to delegát teraz to znamená, že ak by nejaká udalosť boli vypálené do textového poľa skôr než k registrácii alebo niečo podobné, že je to len zavolá metódu na delegáta. Napríklad, vo vnútri mojej textového poľa mám metódu, keď som stlačte že vykonáva tlačidlo v pravej dolnej, a tak skôr než registrácie obslužnú rutinu udalosti, čo môžem povedať je textové pole, tu je objekt, ktorý chcem, aby si volať metódu na Zakaždým, keď niekto stlačí tlačidlo Done, a to znamená, že objekt musí implementovať nejaký protokol , Ktorý hovorí, sľubujem definovať, že urobil tlačidlo akcie, pretože ak to nie je define túto metódu a stlačte tlačidlo Hotovo, potom to bude mätúce. Poďme sa pozrieť na príklad. Tu som proste jedno textové pole, a jedna z vlastností tohto textového poľa nad tu na tejto pravej strane je delegát. To je vlastnosť triedy. Čo som urobil, je tu môžem kontrolovať klikol, a ja som vytiahol z tohto miesta sem na zobrazenie radič, a to hovorí, že teraz delegáta tohto textového poľa bude zobrazenie radič. To znamená, že keď niektoré akcie stane, skôr než registráciu samostatné obslužné rutiny Chcem, aby si ich poslal do delegáta. Teraz sa poďme pozrieť na môjho názoru regulátora. Vnútri. Súboru h som sľub. Sľúbil som realizovať niektoré metódy vnútri tohto protokolu názvom UITextFieldDelegate, a znova, to je len nejaký zoznam niektorých vecí, ktoré som si môžu vybrať implementovať. Keby som sem v mojom. M súboru, som implementoval jednu takú metódu. Ja som to nazval textFieldShouldReturn pretože to je to, čo to bolo volané v protokole. A teraz keď som stlačte tlačidlo Done vnútri tohto textového poľa to je to, čo sa deje, aby si zavolal, tak som sa zaregistrovať obslužnú rutinu udalosti. Pripojil som delegáta, a vždy, keď je vyhodený táto udalosť To je metóda, ktorá bude zavolaný, takže keď som prišiel sem do môjho scenára a spustite ho, Aj keď to načítanie môžeme vidieť, čo to robí. Na mojej obrazovke mám 2 veci. Mám toto textové pole, a ja mám tento štítok. Ja proste hovoriť Chcem znenie tohto štítku sa rovná čo užívateľ napísal v vnútri textového poľa. Tento ďalší riadok tu je jednoducho metóda, ktorá volám na textové pole, ktoré hovorí, že chcem, aby si skryť klávesnicu. To je len svojvoľné metóda, ktorá Apple si vybral. Opäť, ako som urobil niečo, čo som musel zapojiť všetko, tak som prvýkrát prišiel sem. Z pohľadu správcu som pretiahnite ju do textového poľa. Pustil som, a môžem vidieť, že môžem túto text vlastnosť poľa pretože tu v kontroleru pohľade som definovaná vlastnosť že je IBOutlet z textového poľa. To hovorí, že môžem zapojiť túto vlastnosť sa do textového poľa v mojom používateľskom rozhraní. Teraz, keď som kliknite sem môžem začať písať. Teraz, keď som kliknite na tlačidlo Hotovo, že to bude strieľať udalosť, ktorá teraz môžem odpovedať. Žiadne obslužné rutiny. To je, ako som reagovala na toto tlačidlo Hotovo. Zmysel? To nie je návrhový vzor, ​​ktorý-sa nemusí vôbec nájsť sami vytváranie vlastnej protokol, ale len viem, že niektorí rôzne iOS komponenty zaregistrujte udalosti rôznymi spôsobmi. Tlačidlá, napríklad, používať tieto IBActions. Textové polia, na druhej strane, sa bude používať delegátmi. Môžeme vidieť a môžete sa pozrieť všetci, že až vo vnútri dokumentácie. Mimochodom, je to vlastne tonu vecí UI postavené na systéme iOS pre vás, tak napríklad, ako som robil, že hovoria, že urobil v pravom dolnom rohu je som si vybral toto textové pole. Prišiel som sem. Aj posunie dole trochu sa vrátiť kľúč, a môžem vlastne robiť to celú veľa vecí, ako keď chcem, aby sa povedať, tiesňového volania namiesto toho môžem urobiť to, čo je úplne náhodné, a ja neviem, prečo je tu vstavaný tiesňového volania tlačidlo, ale tam, hovorí tiesňového volania v naozaj malých písmen. Tam máš. Rozhodne preskúmať všetky tieto rôzne možnosti v iOS. Akékoľvek otázky týkajúce sa delegáti? Opäť, rovnako zaujímavý dizajn vzor, ​​ktorý by ste mali byť vedomí. Dobre, poďme ďalší sa pozrieť na tabuľky výhľadom. Tabuľka pohľad je v podstate, že zoznam položiek, ktoré je všade okolo v iOS. Keď ste listovala všetky vaše kontakty, pozeráte sa na nastavenie stránky, a tento druh zoznamu vecí, sa nazýva zobrazenie tabuľky. Implementácia zobrazenie tabuľky v iOS je veľmi jednoduchý. Namiesto toho, aby si triedu, ktorá zostupuje z tohto UIViewController to, že sme urobili, ako my jednoducho potrebujeme povedať, skôr než všetko UIViewController sa chcem robiť, Hovorím všetko UITableViewController sa chcem urobiť, takže jednoducho pridáva niektoré ďalšie veci, ktoré sú úplne pre nás urobil. Musíme urobiť len veľmi málo, aby v podstate vyplniť prázdne miesta vo vnútri v tabuľke. Ak chcete zobraziť tabuľku Potrebujem odpovedať na pár otázok. Prvá otázka, ktorú je potrebné odpovedať, je, koľko úseky sú v tabuľke? Keď ste listovanie kontakty aplikácie, ktoré si všimnete, že je to trochu organizuje As, potom máte BS, a budete mať tú malú čiastkové hlavičky. Každý z nich je tzv úsek. Môžete môže, ale nemusí potrebovať toto. Prvá vec, ktorú musíte urobiť, je zaviesť metódu volal Tableview: numberOfSectionsInTableView. To jednoducho vráti, koľko sekcií máte, takže by to mohlo povedať, vrátiť jednu, ak máte jednu veľkú zobrazenie tabuľky. Ďalšou otázkou, ktorá iOS potrebuje vedieť, je, koľko riadkov máte? Napríklad, ste listovala zobrazenie tabuľky. Máte pevný počet piesní, ktoré hľadáte na alebo pevne stanovený počet kontaktov. Ak ste ma, samozrejme, nie je to veľa, a tak to je, ako iOS vie, koľko buniek pre zobrazenie. Opäť platí, že by to mohlo povedať niečo ako návrat 3. Môj stôl pohľad má 3 riadky. Konečne, iOS potrebuje vedieť, čo každá bunka vyzerá, tak čo to vlastne bude robiť, je túto metódu volať tu dole, Tento Tableview: cellForRowAtIndexPath. Bude to volanie tejto metódy na jednotlivé bunky vnútri vášho stola. Ako to neviem, koľkokrát to nazvať? No, povedala si ju vnútri počtu riadkov v oddiele. Budeme volať to na každom z našich buniek, a vo vnútri to je miesto, kde si môžete skutočne robiť veci, ako je nastaviť text, alebo vám povedať, čo to trochu modré tlačidlo na pravej strane robí. Vzor pre získanie týchto buniek, budeme používať túto metódu volal dequeueReusableCellWithIdentifier. Objective-C je v skutočnosti veľmi dobre známy pre absurdné dĺžky ich metódy mien, a to je naozaj pekný prípad v bode príklade. Čo táto metóda robí, je to len hovorí, že chcem, aby si mi bunku. Len niečo iOS. Ak máte niečo také 100.000 skladieb na iPod Čo iOS nechce urobiť, je prideliť 100.000 buniek, pretože ak ste na vrchole zoznamu, čo naozaj potrebujete prideliť pamäť pre bunku, ktorá je 99.000 riadkov dole? Nie, pretože, ako ste posúvanie môžete druh prideliť za pochodu. To je pre teba urobil. Nemusíte sa starať o všetky tie hlúpe veci výkonu. Všetko, čo hovoria, je volanie tejto metódy dequeueReusableCellWithIdentifier, a to hovorí, dobre, ak potrebujete idem vytvoriť novú bunku pre vás. Ale ak ste na dne tabuľky a ste už pridelené niektoré bunky v hornej časti tabuľky, ktoré ste naozaj nebudete potrebovať v dohľadnej dobe Ja ti dám jednu z tých späť namiesto alokovania nového, a tak to je pekný výkon obavy. Nemusíte alokovať bunky sami. To bude vám späť bunku. Bude to návrat k vám bunky objekt. Akonáhle budete mať mobilný objekt, ktorý môžete urobiť veci k nej. Môžete nastaviť text bunky s touto vlastnosťou tzv textový popisok. Môžete pridať tento šípku vpravo alebo iným náhodným stuff s touto druhou majetku zvaného accessoryType, a tak ďalej, a tak ďalej. Poďme sa pozrieť na skutočne vykonáva zobrazenie tabuľky teraz. Keď som vytvoril tento projekt skôr než hovoriť jediný pohľad žiadosť Vlastne som sem prišiel na master-detail aplikácie, a tak v podstate to zodpovedá poštové aplikácie na iPad s pohľadu na stôl vľavo a potom obsah na pravej strane. Na zariadenie iPod alebo iPhone to bude odpovedať na jednu zobrazenie tabuľky. To je miesto, kde som dostal štartovací kód. Poďme najprv pozrieť na scenári. To všetko bolo pre mňa urobil, v podstate vytvoril. Tento navigačná lišta mi ukázal, čo príkladom bunka môže vyzerať ako, a môžem dvakrát kliknite, zmeňte názov. Akékoľvek iné UI obavy zvládnem tam. Hlavičkový súbor vyzerá naozaj jednoduché. Skôr než, že toto je UIViewController sme teraz, že toto je TableViewController, takže vieme, že chceme volať všetky tie tabuľky metódy. Ďalšie Chcem vytvoriť vlastnosť, ktorá ich bude zastupovať veci vnútri môjho stola. Táto tabuľka bude ľubovoľne zobrazenie zoznam ovocie, a tak musím vytvoriť nejaký poľa v ktorom môžem vložiť ovocie. Vnútri môjho implementačným súboru, prvá vec, čo chcem robiť je chcem uistiť, že som inicializovať pole. Povedal som alloc init, vytvoril môj ovocie pole, a Pridám 4 veci k tomu, z ktorých jedna je oveľa viac kontroverzný ako ostatné 3. A teraz mám rad veľkosti 4. Sme trepanie do CS50. Teraz mám rad veľkosti 4. Teraz idem začať odpovede na tieto otázky, a vlastne, keď som vytvoril túto aplikáciu to všetko bolo už pre mňa urobil. Nemal som písať z počtu sekcií v zobrazení tabuľky. To už tam bol, a ja vyplní prázdne miesta. Koľko oddiely mám? Jeden. Všetko hotové. Koľko riadkov mám? No, ja mám jeden riadok pre každú ovocie, tak tento počet je vlastnosť akéhokoľvek pole, ktoré hovorí, aký veľký je to? To, koľko riadkov mám. Nakoniec, musím povedať, čo sa každá bunka vyzerá? Idem povedať dequeueReusableCellWithIdentifier. Opäť platí, že bol tento už napísaný pre mňa. Nechcel som to urobiť sám, a chcem sa dostať späť táto bunka na tomto mieste. Pamätajte si, že voláme túto rovnakou metódou na každej bunke, a tento argument tu, tento argument indexPath, hovorí, že to, čo rad som dovnútra Keď poviem, že indexPath.row tu to bude 0, potom to bude 1, potom to bude 2, a to tak viem čo cell som v súčasnej dobe zobrazovania. Chcem nastaviť text bunky pomocou tejto vlastnosti textLabel ísť dovnútra mojej ovocie pole a dostať objekt zodpovedajúce každého riadku. Ak je to reťazec, ja som teraz stanovenie vlastnosť text na reťazec. Môžem urobiť ešte jednu vec. Ja sa tiež zaregistrovať obslužnú rutinu udalosti na každom z buniek, takže keď som kliknite na každej z týchto buniek Tento didSelectRowAtIndexPath, to bude len pre mňa, tak jednoducho tým, že definuje to teraz môžem zvládnuť, čo sa deje keď kliknete na bunku, a znovu, sme okolo, v ktorom bola využitý buniek takže môžeme znovu použiť rovnaký obslužnú rutinu udalosti pre všetky naše bunky. Opäť, je to niečo, iOS je na tom pre mňa. Poďme zobraziť ďalšie nepríjemné POPUP že jednoducho hovorí, že ste si vybral niečo, kde to niečo bude riadok objekt. Keď spustím to, budem mať toto pekné zobrazenie tabuľky jeden riadok pre každý z týchto druhov ovocia, a keď som kliknite na jednu to mi hovorí, čo sa stalo. Zmysel? Budujme trochu zložitejšie z aplikácie, rovnako ako kliknutie ste si vybrali paradajka je. Pekné o Storyboarding je to nielen nepomôže nás Dizajn obrazoviek samostatne, je to tiež nám pomôže previazať celú našu aplikáciu, takže konečný app budeme budova je to pekná športová news reader, a tak to bude mať viac obrazoviek, a tak som si vlastne predstavujú každý z týchto početných obrazoviek na scenári a môžem oddialiť a vidieť môj aplikácie z vysokej úrovni. Ak chcete vytvoriť nový element vo vnútri môjho scenára je to naozaj jednoduché vnútri Interface Builder. Ak chcem pridať ďalšiu obrazovku to, napríklad, I môže najprv oddialiť s pinch zoom, ktorý Apple miluje tak veľmi, a tu dole, ako som vyhľadať tlačidlo a ja pretiahnete tlačidlo keď chcem vytvoriť novú obrazovku môžem skutočne len drag and drop Celý pohľad radič, takže keď som vybrať to, vytiahnite ho sem, hey, je tu ďalší obrazovka, a tak teraz používa rovnaký storyboard súbor Môžem mať všetkých obrazovkách vnútri mojej aplikácie, a môžem oddialiť a vidieť, ako sa vzájomne ovplyvňujú. Tie nebudú ovplyvňovať doteraz. Spôsob, akým sa tieto 2 obrazovky interakciu je definovať vzťahy. Môžete v podstate hovoria, že toto obrazovku, keď stlačíte toto tlačidlo, Chcem, aby si snímka sa k tejto novej obrazovky. To znamená, že je tento druh vzťahu medzi  prvá obrazovka a druhá obrazovka. Budete mať v podstate šípku od tohto tlačidla na druhej obrazovke hovorí, že keď stlačíte toto tlačidlo, ktoré tam chcem ísť. Rovnako ako my ovládať klikli a pretiahnuť do vymedzenia týchto zásuviek budeme robiť rovnakú vec na definovanie týchto prejde. Uvidíme príklad pre to, a ako sme vlastne prechod z jednej obrazovky na druhú iOS je taký láskavý, že volanie tejto metódy volal prepareForSegue, a to je miesto, kde môžeme začať odosielanie dát z jednej aplikácie do druhej. V príklade sa chystáme pozrieť sa na to bude v podstate umožní nám filtrovať baseball tímy v ligách a divíziách. Keď som ju vybrať ligu, napríklad, chcem prechodu k môjmu ďalšiemu obrazovku, kde môžem zobraziť všetky divízie v tejto lige alebo všetkých rôznych tímov. Potrebujem poslať na túto obrazovku, čo tímy, mali by ste zobraziť. Ak chcete, že budem využiť tejto metódy tu. Nakoniec, rovnako náhodný bod na iOS. Ak chcete ukladať dáta tam je to, čomu sa hovorí základné údaje, čo je vlastne celkom zložité s ním pracovať. Môžete tiež použiť SQL na ukladanie dát, ktoré je opäť pekné, ale trochu na zložitejšie strane pre prácu s, ale iOS tiež podporuje tieto naozaj cool veci zvanej vlastníctva zoznamy, a zoznam vlastností je len súbor, ktorý predstavuje kľúč hodnota. Môžete definovať zoznam kľúčov, a tie hovoria, že toto tlačidlo sa bude pole. Tento kľúč bude reťazec, a v podstate všetko, čo môžete robiť v JSON môžete urobiť vo vnútri zoznamu vlastností, a tak to naozaj pekne nám umožňuje pracovať s niektorými dátami. Napríklad, mám Teams.plist, že som vytvoril. Vytvoril som nový plist súbor, a môžem drill down. Toto je slovník, to je slovník, sú reťazce, a tak to je pekné grafické znázornenie dokumentu JSON alebo len súbor kľúčových dvojíc hodnôt, a tak to je údaj, že budem pracovať s vnútri mojej aplikácie. Pozrime sa najprv, poď sem. Máme oveľa viac súborov teraz. Ale poďme sa najprv prísť sem do scenára. Storyboard tu, keď môžete oddialiť, teraz môžeme vidieť, že je to tok svoje aplikácie. Ja sa najprv, kto na tejto obrazovke. Budem prechádzať na túto obrazovku, a budem prechádzať na tejto obrazovke, a môžeme vidieť, že keď som trochu presunúť jeden z nich asi sme tieto šípky ísť odtiaľto až sem, a ako som definovať, že šíp bol, keby som priblížiť trochu, a keď som prísť do tohto pohľadu regulátora, a tu je bunka, a chcem povedať, že keď kliknete na bunku Chcem, aby si klesať cez inú obrazovku. Môžem jednoducho podržte kontrolu, Choďte trochu, podržte kontrolu, pretiahnite túto bunku nad a pustiť. A tu hovoríme, čo je to prechod, ktorý chcete použiť? Chcete použiť tento snímok vec, ktorá sa nazýva tlak? Chcete kĺzať hore z dna? Tomu sa hovorí modálne. A raz som na jednu z nich, bude to kresliť na túto šípku pre mňa, a to znamená, že som vlastne ovládal, čo sa stane, keď som stlačte toto tlačidlo graficky. Nechcel som písať nejaký kód, aby skutočne skĺzla z jednej obrazovky na druhú. Definoval som to vizuálne vnútri Interface Builder. Keby som kliknite na šípku, môžeme vidieť, že som túto vec meno. Zavolal som to showDivisions, a je to tak, že som si vedieť, čo prechod má nastať, a uvidíme, prečo len na sekundu. To je, ako som zapojený do rôznych obrazoviek v mojej aplikácii. Ak by sa jednalo tlačidlo, napríklad, skôr ako tabuľka pohľad, Mohol by som riadiť kliknite na tlačidlo, presuňte ju na ďalšiu obrazovku, a to je, ako môžem urobiť navigačné takhle. Naozaj rýchlo, keď pôjdeme do MasterViewController, znovu, sme proste bude definovať zoznam vecí , Ktorý sa zobrazí v zobrazení tabuľky. Tu hovorím chcem, aby si to plist súbor, a chcem vám umožní nahrať ju do slovníka, a akonáhle ste si, že slovník, budem odpovedať na tie isté otázky znovu. Tu je počet úsekov. Po prvé, je tam jeden riadok pre každé ligy, a text každej bunke musí byť buď prvý, prvá liga, druhá liga, a tak ďalej. Napokon, budem používať túto metódu, ktorá sme práve videli názvom prepareForSegue, a to je metóda, ktorá sa bude vyhodený, keď som kliknite na tlačidlo v jednej z týchto riadkov, a preto aktiváciu, že prechod že som nastaviť šípkami. To hovorí, že môžem mať viac vzťahy z jednej obrazovky na druhú. Ak mám 2 tlačidlá a každé tlačidlo sa dostanete na inú obrazovku Budem mať 2 prejde, 1 pre každé tlačidlo. Ale to prepareForSegue je opäť, bude znovu pre každý z jednotlivých vzťahov, tak to znamená, že som potrebné spôsob identifikácia, ak stlačíte prvé tlačidlo alebo stlačením druhého tlačidla. Pamätáš, keď som dal, že SEGUE meno, tento showDivisions, to je, ako už viem, že je to SEGUE, že bol aktivovaný. Všetko, čo chcem urobiť, je, že som chcel povedať Chcem zistiť, čo ja som len udrel, a tak sa dostať, že môžem povedať, Chcem indexPath pre vybraný riadok, pamätať indexPath len hovorí, že tam, kde som klikol, a potom chcem povedať, že som chcete zistiť, kam idem. To destinationViewController, že je to vlastnosť SEGUE. To je obrazovka budem, takže viem, že obrazovka budem sa nazýva DivisionsViewController pretože som vytvoril túto triedu, a tak teraz, keď poviem d.divisions Ja som teraz nastavenie vlastnosť kontroleru pohľadu som asi ísť. To je, ako som odosielanie dát z jednej obrazovky na ďalšiu obrazovku. Len pri pohľade na tento DivisionsViewController môžete vidieť, že v súbore h je, že vlastníctvo divízie, a to je to, čo som v podstate naplnením, tak to je, ako viem, že som zobrazenie divízie zodpovedajúce liga, ktorá som klikol, a znova, aktuálne zobrazenie tabuľky vyzerá skoro rovnako, len záznamník tie 3 jednoduché otázky, ako aj identifikačné čo sa stane, keď sa presuniete na ďalšiu obrazovku. Len pár ďalších vecí tu. Všimnete si v hornej tu, že skôr než hovoriť # include Ja som teraz hovoril # import. To je len Objective-C vec. Import je v podstate krajšie verzie patrí, a napríklad, potrebujeme vedieť, čo táto trieda je, tak som si jednoducho povedať DivisionsViewController. Ak by sme nemali hashtag standardio.c vnútri našej. Súboru c kompilátor nemal tušenie, čo printf bolo. Podobne, keď nemám importovať DivisionsViewController kompilátor naozaj nemá tušenie, čo je DivisionsViewController. Len sa uistite, že vo vnútri vašich rôznych. Súborov m by ste sa uistiť, import zodpovedajúce. h súbory tak, aby kompilátor vie, čo sa deje. A konečne, čo Apple nakoniec sa je zobrazovať niektoré údaje pomocou webového zobrazenia, a tak web pohľad je objekt, v ktorom môžete vložiť Trochu webový prehliadač vnútri vašej aplikácie. Všetko, čo musíte urobiť, je dodať URL do webového prehliadača, takže chcem ísť do mlb.mlb.com, a to je, ako môžem získať prístup na domovskú stránku pre každý tím, a tak odovzdaním tejto adrese web názor môže zobrazovať to pre mňa, a ja som si prechádzať okolo, a simulátor je používaný, že jeden. Teraz to prišlo z môjho plist. Keby som Kliknutím na toto tlačidlo to tiež prišlo z môjho plist, a to posuvná bola spracovaná vymedzením týchto prejde. Aj Kliknutím na toto tlačidlo a ešte jeden, a teraz tu je môj UIWebView, tak len tak Tu je webová stránka pre URL, ktoré som vložené, a ja som nemusel zvládnuť čokoľvek bláznivého. To je, ako zobraziť webovú stránku. Veci ako toto tlačidlo späť sú tu tiež uvedené na mňa úplne zadarmo, pretože som definované tieto vzťahy pomocou prejde. Nejaké otázky? Jo. [Študent] Takže pri použití priradenie, už nikdy nebudete musieť voľného niečo? Presne tak, keď budete volať alloc a init nemusíte oslobodiť ju. IOS bude zvládnuť všetky, že pre vás. Je to úžasné, a nie ste porušenie žiadne pravidlá. Jo. [Študent] Ak ste boli zahrnúť viac tímov, ktoré by sa vošli na obrazovku, by to mať automaticky rolovacie možnosť, alebo je to niečo, čo potrebujete pridať? Presne, keď mal viac jednotiek, napríklad, by sa automaticky spracovávať rolovanie pre mňa, a všetky výkonnostné obavy s obrovským stolom sa tiež stará o úplne pre mňa. Ďalšie otázky? Všetky tohto kódu sa bude vyslaný. My druh pozdávajú trochou viac drobných detailov, ale veci ako nastavenie niektorých vlastností na web zobrazenie sú len veci, ktoré môžete získať pri prezeraní Apple dokumentáciu, čo je naozaj, ale naozaj pekne vyložil. Majú veľa ukážkových aplikácií a príklad zvyklostiam rôznych API, takže určite prehliadnuť tie, ak je to možné. Len niektoré užitočné odkazy budete chcieť pozrieť na. To sú niektoré užitočné dokumentácie príručiek. Adresy URL sú masívne, takže sú skrátené. To prvé je celá knižnica dokumentácie. Je tu málo vyhľadávania bary, takže ak začnete písať, tlačidlo začne dávať vám všetky informácie o všetkých vecí, ktoré môžete robiť s tlačidlom. Ja som tiež na Zobraziť tabuľku Programming Guide. To sa zaoberá tabuľky názory v oveľa podrobnejšie, ako robiť veci, ako je dynamicky pridávať články alebo upraviť bunky alebo odstrániť. Je tu veľa vzorových aplikácií z Apple, ktorý vám ukáže, ako to urobiť, a konečne, posledný z nich je Human Interface pokyny, a to je v podstate nejaká diskusia komponentov používateľského rozhrania, veci ako nerobia tlačidlo, ktoré je 4 pixely od 4 bodov. To je zlý nápad, a ďalšie veci, ktoré Apple chce, aby si podporovať dobrý dizajn. Nejaká posledné otázky pred tým, než skončiť? Dobre, určite neváhajte, Ideme mať špeciálne štítky na diskutovať. Budeme mať iOS jeden, tak rozhodne neváhajte využiť, že. Ak chcete pracovať so svojimi spolužiakmi na projektoch alebo pomôcť zistiť nejaké náhodné iOS veci neváhajte a napíšte mi, a určite preštudovať všetky kód online, pretože práve v záujme dobe sme trochu utajené viac jemnejšie detaily vecí. Ale ak nie, potom veľa šťastia na vašich projektoch iOS, a dúfam, že budeme mať Veľký príliv aplikácií v App Store. [CS50.TV]