[Powered by Google Translate] [Seminář] [iOS: Psaní aplikací, jako je Boss] [Tommy MacWilliam] [Harvard University] [To je CS50.] [CS50.TV] Dobře, všichni, vítejte na iOS: Psaní aplikací, jako je Boss. Tento seminář se bude soustředit na psaní aplikací pro iPhone a zase psát aplikace pro iPad, a tak jsme v podstatě chodit přes pár různých příkladů, jak vytvořit aplikace, jednoduché hry jako Tic Tac Toe, nebo pokud vás více zajímá při vytváření aplikaci jako jakési čtečky zpráv nebo něco, který spolupracuje s internetu jsem se o tom mluvit stejně. Tady je náš stručný agenda. IOS aplikace jsou napsány v jazyce nazvaném Objective-C, a tak je trochu podobná C, ale ve skutečnosti vůbec, takže budeme mluvit trochu o jazyk sám a pak, jak se postavit iPhone aplikace pomocí této app program s názvem XCode, která, pokud jste si nestáhli to ještě klidně zahájit stahování nyní. Je to několik gigabajtů. Mělo by to být zdarma na App Store, takže budete muset mít Mac v ideálním případě běží nejnovější verzi OS X. Pokud si nejste, žádný problém. Máme Maců v science centru k dispozici pro vaše použití s XCode nainstalován, a tak neváhejte a použít ty pro rozvoj. Pokud chcete, aby se aplikace, ale nemají Mac, nebojte se. Je tu spousta areálu zdrojů za to. A pak se budeme na pokrytí 2 větší příklady různých aplikací, které můžete udělat. Objective-C je technicky, co se nazývá Super sada C. To znamená, že kód C je také platný Objective-C kódu. To znamená, že jsme trochu potrubí páskou na některých dalších funkcí do C. Některé z těchto funkcí patří nemají někdy psát malloc znovu, díky Bohu, no museli starat o ty hloupé ukazatelů a uvolňovat je a všechno to okolo nenáviděl jsi o C, a je to docela pryč v Objective-C. Nyní, Objective-C má také mnohem větší standardní knihovny, takže je mnohem více funkcí, dostanete zdarma vnitřní Objective-C. Pamatuješ, když jsme byli psaní PHP jsme si všimli, že jsme šli od Tento nejmenší jazyk obří knihovny všech těchto šílených věcí, které můžete udělat. Stejná věc se stane v iOS. Je tu objekty pro věci, jako je kalendář buddhisty, a opravdu nic můžete myslet, ze snad již existuje v implementaci Objective-C je. Cílem část Objective-C je odkazování něco tzv. Object-Oriented Programming. To je něco úplně nového konceptu, ale my jsme ve skutečnosti většinou naučil Mnoho z těchto pojmů již. Myšlenka objektově orientovaného programování je to, že budete uspořádat hodně kódu kolem těchto věcí tzv. tříd, a tyto třídy jsou opravdu oslaven structs. Uvnitř struct jsme v podstatě řekl, tady je věc, a tato věc může mít členy. Například, může uzel v propojeném seznamu jiné věci jako hodnoty, ukazatel na další uzel v seznamu, a společně, že ukazatel a tato hodnota tvoří tuto jednu instanci struct. Třídy jsou velmi podobné, s výjimkou třídy mohou mít také funkci uvnitř z nich. Když jsme prohlásil struct, mohli bychom pouze říci, int n nebo uzel * další. Nyní s Objective-C můžeme skutečně dát funkce uvnitř těchto věcí. Další věc, která třídy mohou udělat, je, že mohou dědit data z jiných tříd. Například, budeme se dívat na spoustu vestavěných Objective-C třídy. Jeden z nich by mohl být třída, která představuje pohled na obrazovce, a tak tím chci realizovat svůj vlastní názor jsme v podstatě říci, někoho firmy Apple zřejmě opravdu milí lidé, napsal tuto třídu pro mě, a to zvládá věci, jako je displaying tlačítek nebo vykreslování na obrazovku, a my bychom byli opravdu bolestný provádět všechny ty funkce sami, a tak jednoduše zdědění údajů můžeme říci vše, co udělal v této třídě Chci také uvnitř mé třídě, a pak budu dělat nějaké další věci, konkrétně implementovat aplikaci. To je to, co to slovo dědičnost znamená. Budeme vidět více konkrétní příklad. A konečně, klíč s objektově-orientovaného programování je to, že to vede k datové zapouzdření. V některé z našich problémů nastaví bychom mohli mít tyto velké, globální proměnné a globals všude, a to je, jak bychom sledovat stav. S třídami můžeme začít zapouzdření informace uvnitř objektu. Pokud budeme mít o jednu obrazovku na naší aplikaci, nemáme opravdu potřebují mít všechna data z na jinou obrazovku v našem app uvnitř toho, a tak zapouzdřením věci ve třídách této skutečnosti vede na mnohem lepší kódu designu, a to je možné s některými z dalších funkcí Objective-C. Varuje, syntaxe Objective-C je banány. Je to jako nic jsme neviděli, tak to je trochu křivka učení zvykat Co sakra to znamená? Ale jakmile se dostanete v minulosti, že počáteční křivka učení je to opravdu, ale opravdu hladký začít psát aplikace. Chcete-li deklarovat třídu, tedy tady je moje třída, existuje, a možná zde jsou některé věci, které budu definovat později, Jdu říct @ rozhraní. Jdu říct @ rozhraní. Chystám se dát své třídě jméno. A pak později někde jinde budu říkat @ konec, a všechno mezi @ rozhraní a @ konce bude moje třída. To bude to, co je uvnitř našich. Souborů h. Stejně jako v C naše. H soubory v podstatě řekl, zde jsou některé věci, které budou existovat. Já ne nutně ti, co dělají ještě, ale kompilátor potřebuje vědět, že existují. Později uvnitř naší. M. soubory, protože m pro Objective-C je místo, kde jsme se to vlastně bude definovat, co tyto třídy dělat. Stejně jako naše. Soubory C, jsme poskytli implementace pro funkce. Uvnitř naší. M. souboru budeme říkat tady je to, co všechny funkce uvnitř moje třída-co všichni dělají. A konečně, uvnitř struct bychom mohli říci, uvnitř těchto složených závorek int n nebo uzel * příští, a v Objective-C budeme používat na základě klíčového slova @ majetek, a to je to, co se děje k definování vlastností, nebo non-funkce, které jsou součástí mé třídy. Volání funkce v Objective-C je také banány. Když jsme vyhlásili funkce v jazyce C jsme si řekli něco jako int foo a otevřené paren a pak dal jí seznam argumentů. To je to, co prohlašuje, metody nebo funkce vypadá jako v Objective-C. Pokud chci, aby deklarovat funkci nebo metodu kde říkám metoda je opravdu jen funkce, která je členem třídy, tak trochu vzájemně zaměnitelné, ale ne ve skutečnosti, tak uvnitř mé metody Chci vytvořit novou metodu. Bude to nic vrátit, takže to bude typu void. To je návratový typ mé funkce. Nyní máme parens tady, protože-nevím. Další bude jméno mé funkce, a pak konečně máme středník, stejně jako jsme měli v C. Co je nového tady je ten chlap tady. Tato pomlčka je skutečně nezbytné, a to, co to říká, je to, že tato metoda zde musí být volána na instanci třídy. Poté, co jsme prohlásil naše structs jsme pravděpodobně řekl něco jako n struct uzel, a že ve skutečnosti vytvořili nebo instance jeden z těch structs tak, že jsem se mohl skutečně začít pracovat s tím, co je uvnitř ní, takže to pomlčka znamená, že musíme instanci třídy, stejně jako my, že instance struct Než budeme moci tuto metodu volat na něj. Pokud chci začít přidávat argumenty mých metod to dostane ještě více banánů. Tady je moje jméno metody. Pak budu mít dvojtečku, a po tomto dvojtečkou se píše tady přichází nějaké argumenty. Tato metoda přijímá jeden argument. Typ argumentu je int, a jméno tohoto argumentu nebo proměnná, která budu začít používat uvnitř metody se nazývá i. I v tomto případě je metoda. Trvá jeden argument. Pokud chcete začít přidávat další argumenty, že dostane více banánů v tom, že jsme to tlustého střeva, která říká, že tady je můj seznam argumentů. Tento první argument je číslo. Nyní, tento druhý argument je zajímavé. Proměnná, která budu používat uvnitř mé funkce se nazývá f, takže uvnitř mé funkce jsem mohl říct, f + = 1, nebo tak něco. To, co je zde v podstatě klíčem k tomuto argumentu nebo parametru. Stejně jako jsme měli klíčové hodnotové páry i něco jako JSON nebo asociativních polích Objective-C se rozhodli říct, jo, jen proto, že je to opravdu jasné, Při volání metody, co všechny tyto parametry jsou Já jsem vlastně bude jmenovat všechny. Když zavoláte metodu, budete vlastně říkají andFloat, a pak minete ho dovnitř Je zajímavé, že se tento není pojmenovaná, ale všechny ostatní parametry jsou takže pokud jsme měli třetí argument, abych mohl říct andFloat a další plovák a tak dále. Když jsem volat tyto metody je samozřejmě banánů, takže když mám objekt, a jsem definoval metodu nazvanou foo, a chci volat, spíše než říkat foo OPEN / CLOSE parens Jdu otevřít konzolu. Zde je jméno mého metody. Chystám se zavřít držák, a to je objekt Volám to na. Pamatujte si, že všechny tyto metody existují v rámci tříd protože třídy mohou mít metody definované uvnitř nich. Tady jsem svévolně vytvořil objekt nějaké třídy, a to je syntaxe pro to dělá. K dispozici jsou 2 kroky k vytvoření objektu. Prvním krokem je, že chci, aby přidělit místo. To je ekvivalent malloc. Nemáme říkat malloc už. My upustil m, dělal to alloc, a nahradil. C s. M.. Poté, co jsme Alloc něco, co pak je třeba ji inicializovat. V podstatě, když si vytvářet objekty budete chtít mít nějakou logiku , který vykonává, když jste vytvořili oni, takže si můžete projít v některých výchozích hodnot nebo něco takového, a tak to init metoda je to, co ve skutečnosti vytváří objekt. Jsme nejprve vyčlenit prostor, stejně jako jsme to udělali v C, a pak jsme ji inicializovat, které mohou nebo nemusí udělat spoustu. Pak se vracíme tuto věc do objektu o.. Je tu hvězda tady, protože je to technicky ukazatel, ale nebojte se, ukazatele nejsou tak velký obchod v Objective-C už. Nyní jsme instancí této třídy s názvem NSObject, a to je jen náhodná třída, která má Apple. Jsme instanci to, a teď mám instanci této třídy v tomto objektu O, to znamená, že když definována Tyto metody jsem mohl zavolat jim takhle. Podobně, když jsem chtěl volat metodu s jedním argumentem, tak toto je bar metoda, která bere jeden argument, a tady je baz: qux metoda, tak to trvá 2 argumenty. Toto je volání jedné funkce na tohoto objektu o.. Smysl? Syntaxe by měla smysl, ale tak nějak na to zvyknout. Dobře, pojďme mluvit o pár věcí, které jsou zabudovány do Objective-C , které nebyly nutně zabudován do C. V jazyce C jsme trochu museli vypořádat s řetězci, neboť tyto hloupých postav pole, a to mám opravdu otravné. Objective-C má ty vše postavené v roce pro nás, a je postavena v roce Pomocí této třídy s názvem NSString. Když chci vytvořit NSString máme více obskurní syntaxe. Spíše než říkat "cs50" Říkáme @ "cs50" a to je jen Syntaxe pro deklarování řetězců v Objective-C. To je velmi snadné zapomenout, takže se nemusíte. Teď, když jsem se to, je to řetězec, ale všimnete je to opravdu jen objekt. Řekl jsem NSString, což znamená, že instance třídy volal NSString, které někdo jiný psal pro mě, a oni byli velmi milý, a tak teď Můžu začít volat metody na něm. Pokud jsem volat metodu délky na tento objekt s to bude návrat ke mně délku řetězce. To je stejně jako strlen v C. To by se vrátit 4. Podobně, jiný způsob bych mohl chtít jen o to characterAtIndex. To je metoda, která uvádí na tento řetězec je Chci, abyste si 0. charakter, a tak by to ke mně nevrátí znak c, a tam je celá parta více z těchto metod, které můžete Google opravdu snadno. Dokumentace Apple je skvělá, a my se na to podívat v trochu. Ti jsou řetězce. Máme také variabilní velikost pole zabudovaný Zapamatovat si mě na C, když jsme prohlásili, pole jsme museli říct, že máte 5 prvky, konec příběhu. Když jsme se dostali do JavaScriptu a PHP můžeme začít dělat věci, jako je přidávání prvků nebo pohyblivých prvků. Můžeme to udělat totéž v Objective-C. Spíše než vytvoření pole v normálním způsobem C máme opět další třídu s názvem NSMutableArray. K dispozici je také NSArray, a to bude v podstatě zestručnit nějakou nabídku. To říká, že první věc, kterou chci udělat, je chci přidělit prostor pro nové pole, a poté, co jsem přidělovat I pak je třeba, aby ji inicializovat. Opět platí, že jen voláním těchto metod 2. Nyní což znamená, že uvnitř tohoto objektu se Jsem prázdné pole tam sedí. Pokud chci přidat něco na toto pole, mohu volat AddObject metody. Chci přidat objekt do pole a, a chci přidat řetězec CS50. Pokud bych chtěl naopak odstranit, že můžu říct, že chci, aby odebrat objekt na prvním místě na pole nebo objekt. Smysl? Dobře, tak nějak zvyknout hranatá závorka věc. Mimochodem, uvnitř mnoha knihoven Apple uvidíte tuto NS. NS vlastně kandiduje na další krok, který byl jednou z firem Steve Jobs první, a to je, kde se opravdu začal psát spoustu kódu jako druh základ pro Mac OS X a všechny ostatní věci, a tak to NS je druh této pěkné odkazu vykřiknout jednoho z předchozích společností zpět, když Apple byl první začínáte. Je to všude. Pojďme se podívat na více holistického Objective-C například. Tady jsem uvnitř XCode. Chcete-li se sem dostal, jsem se poprvé stáhli XCode z App Store, otevřel ji, a pak jsem šel sem do souboru, sem do nového, a pak se projektu. Poté, co jsem dělat, že jsem se všechny tyto možnosti, co chci vytvořit, a tak budeme se podívat na tyto možnosti později, ale jen pro tento příklad, protože jsme ve skutečnosti bude mít aplikace ještě, Přišel jsem sem, a já jsem řekl Nástroj příkazového řádku, a to je aplikace, která bych mohl běžet na příkazovém řádku stejně jako jsme byli běží od C. To je, jak jsem vytvořil tento projekt, a tak jsem tady, tak ať se podívat na první tohoto souboru, a to by mělo vypadat docela povědomý. Mám int jméno. Tady je můj přítel argc, můj druhý kamarád argv. A tak můžeme vidět, že je to vstupní bod pro mé první Objective-C aplikace. Zde můžeme ignorovat to pro teď. To je v podstatě nějaký správa paměti věci, které budete opravdu někdy se čeho bát. Pojďme se podívat na tohoto prvního bloku zde. Tento první řádek, když řeknu, že Student * alice = [[Student alloc] init] co to je dělá? Tato první student tady, je to pravděpodobně třídy. To není třída, která Apple napsal, ale je to třída, která jsem napsal. První věc, kterou chci udělat, je chci přidělit místo pro nový student, a pak chci k inicializaci, takže to mi dává zpět Tento nový student objekt, a já jsem to ukládání do proměnné s názvem Alice. Kde se to třída pochází? No, tady na levé straně jsou všechny různé soubory uvnitř mého projektu. Vidíme zde mám Student.h a Student.m. . H souboru, pamatujte, je místo, kde jsem se prohlásit všechny ty věci, že bude existovat v rámci třídy. Pojďme se na to podívat. Dobře, máme zde tuto @ rozhraní, a to říká, že přichází prohlášení o vše, co bude existovat ve své třídě. Pak mám dvojtečku. Pak jsem si tento NSObject věc. Tato dvojtečka znamená, že dědické trochu jsme diskutovali trochu dříve. To říká, že vše, co může udělat NSObject kde NSObject je tato třída napsal někdo jiný, vše toto NSObject může udělat Chci být schopen to udělat. Tím, že říkáte: NSObject to znamená, že jsem v podstatě zdědil všechny funkce jiné třídy. To opravdu mi dal spoustu různých metod a vlastností, které mohu použít. Tady dole jsem vytvořit 2 vlastnosti. To znamená, že můj student, kdyby to byla struct, by tyto být 2 věci uvnitř mé struct, takže každý student má jméno že je řetězec, a student má také známku, který je int. Konečně, tady dole budu vytvořit metodu pro mého studenta. Zavolal jsem moje metoda, initWithName, a to trvá jeden argument, a tento argument je řetězec, a zavolal jsem to pojmenovat. Nyní se pojďme podívat na to, jak jsme vlastně provést tuto třídu. Tady, teď jsem uvnitř mé. Souboru m, m pro realizaci, myslím. Mám provádění, můj konec, a tady je místo, kde jsem vlastně definování co initWithName dělá. Mám initWithName, jméno mé parametru, a pak tento je místo, kde jsem vlastně vytvořit studenta, a tak to je trochu záhadný, ale tohle je standardizovaný které chcete zahrnout do svých konstruktérů. Tato funkce inicializace zde, initWithName, je typ konstruktoru. Ty v podstatě budovat nový studentský objekt a možná odesílání některé údaje uvnitř ní. První věc, kterou chci udělat, je chci volat init na této super věc. Pamatujte si, že když jsem řekl, tady v. Souboru h že všechno NSObject má student také má. To znamená, že když jsem se vytvořit studenta, co jsem také muset udělat, je ujistěte se, že NSObject, že jsem zdědil všechny těchto údajů z je také správně inicializován. Co musím říct, je to super bude skutečně odkazovat na mateřské třídy že jsem dědí z, tak chci, aby se ujistil jsem inicializovat všechno, co jsem v závislosti na než začnu se snaží používat. Pak-li to správně inicializován je to stejně jako ostatní, pokud malloc neměl vrátit hodnotu null, pak mohu začít nastavovat některé vlastnosti. V JavaScriptu a PHP jsme toto klíčové slovo volal toto, a to jen na aktuální instanci třídy. V Objective-C nazýváme tuto já. Když říkám self.name, to znamená, že objekt Jen jsem vytvořil, když jsem řekl, studentka alloc init, že se to dá mi objekt. To znamená, že chcete nastavit název tohoto objektu na co jsem právě prošel dovnitř Stejně jako v C, mít přístup členů s touto tečkou, tak self.name říká, že jméno studenta objektu se nyní bude, co jste právě prošel dovnitř A tak nakonec, mohu se vrátit, tak jsem skutečně dostat něco zpátky. Otázky? Dobře, takže toto self = Super init, pokud nechcete úplně pochopit dědičnosti věci neboj. Jen vím, že pokud jste někdy chtěli vytvořit svůj vlastní init metodu jen udělat, a budete mít dobré jít. Jo. >> [Student] Co případě samostatné znamená? To znamená, že když jsme se malloc něco, co jsme vždy zkontrolovat, jestli je to rovná null, a je-li to nula, potom se ukončí. To je totéž, protože pokud to vrátí null, pak jsme pravděpodobně bude seg poruchy pokud bychom začít se snaží manipulovat. To je naše studentka třídy. To znamená, že můžeme inicializovat naše studenty jedním ze dvou způsobů. Když řeknu, že studentka alloc init nebudu používat tuto metodu, že jsem právě napsal, a místo toho jsem si prostě říct alice.name, a teď jdu nastavit, aby název vlastnosti. Podobně, když chci používat tuto metodu initWithName Mohu jen říci Alloc, a pak spíše než říkat init Jdu zavolat, že metody, které jsem vytvořil, a budu se pak Bob. V tomto bodě, tento objekt Bob má jméno stejné Bobovi. Dobře, tady dole jsem pomocí tohoto NSMutableArray, že jsme se zaměřili na starší. Jsem přidělování space.Then jsem inicializaci nového pole. Chystám se přidat 2 věci k ní. Toto pole nyní drží studentské objekty. Všimněte si, že nikde jsem si, že tohle je pole studentů. Řekl jsem, že je to pole, období. Pak jsem si dal, co do ní, že chci. Tady mám 2 objekty. Nakonec, mám jiný objekt zde, tento TF. Tady v TF.h v podstatě totéž. Já jsem zdědil od NSObject, a mimochodem, Při vytváření tříd je to všechno pro tebe udělal, tento druh rozhraní standardizovaný. To má vlastnost studentů. Mám pár Metody zde nejsou opravdu spoustu, a tak to znamená, že poté, co jsem vytvořit tento objekt TF Můžu zavolat tuto metodu stupně na to takhle. Jakékoliv dotazy týkající se Objective-C syntaxí než začneme stěhovat do některé další zajímavé aplikace vývoj věci? Dobře, tak pojďme vlastně dělat aplikace pro iPhone. V základní třídy, které budete používat uvnitř vašeho iPhone app se nazývá zobrazení regulátory, a pohled regulátor v podstatě představuje jedinou obrazovku uvnitř vaší aplikace, takže když jsem na hudební aplikace, například, Jeden pohled regulátor by mohlo představovat názor, ve kterém jsem zobrazit všechny skladby na mém iPhone. Jiný pohled regulátor mohl být, když jsem klikněte na skladbu a začít hrát ji nebo jak jsem vrtání dolů do umělci. Každá z těchto různých obrazovek může být reprezentován jako jiný pohled regulátoru, a pohled řadič je opravdu jen třída, která říká, jak se tato obrazovka funguje. Věci uvnitř kontroleru pohledu, budeme mít vlastnosti, takže věci jako tlačítko bude vlastnost našeho pohledu regulátoru. Jsme také bude mít metody, a to jsou v podstatě obslužné rutiny. Tato metoda říká, že když stisknete toto tlačítko Chci udělat něco, a nakonec, opět, budeme používat tento vlastní klíčové slovo pro přístup k aktuální instanci. Chcete-li vytvořit rozhraní v systému iOS, je opravdu velmi snadné. Mají tento pěkný drag and drop rozhraní s názvem Interface Builder, a 2 základní pojmy, které drát vašeho Objective-C Interface Builderu jsou IBOutlet a IBAction. IBOutlet jednoduše říká, že pokud jste deklarovat vlastnost, která je tlačítko, a chcete ji připojit k něčemu ve vaší skutečné rozhraní, budete říkat, že je to outlet. Podobně, pokud chcete, aby zastupoval obslužnou rutinu události pak budete říkat, že je to akce. Chcete-li skutečně zapojit do tohoto grafického znázornění a váš kód je to opravdu, opravdu jednoduché. Pokud chcete připojit IBOutlet, vše, co musíte udělat, je můžete ovládat tlačítkem, a uvidíme příklad to opravdu rychle. Můžete ovládat klikněte tam, kde se říká, View Controller. Budeš přetáhnout do rozhraní, nebo naopak, Chcete-li připojit obslužnou rutinu události budete přetáhnout z rozhraní v opačném směru. Pojďme se podívat na opravdu jednoduchém příkladu iOS. Pojďme vytvořit nový projekt. Chystám se přijít sem do aplikace, a budu na tlačítko Single View aplikace. Jdu na tlačítko Další. Dám svůj projekt název. Zavolám jí Hello. Zajímavé je, že Apple předpokládá, že budete vytvářet produkt takže můžete prodat a oni mohou vydělat peníze. Tady dole jsem chtěl říct, že je to iPhone app. Můžete vytvořit aplikaci pro iPad, nebo pokud chcete vytvořit jednu z těchto aplikací , který podporuje obě zařízení, které můžete udělat taky. Jedná se o to, co chcete, aby vaše zaškrtnutí vypadat. Chcete-li použít storyboardy, které uvidíme později, a určitě chcete používat automatickou počítání referencí, což je sympatické, že vám brání museli říct, malloc a free. Pokud chcete volat malloc a free, tak bych opustit tento kontrolovány. Budu klepněte na tlačítko Další, a nakonec, to bude a zeptejte se mě, kde chci uložit. Budu hit vytvořit, a je to tady. Vytvořil jsem nový projekt. Sem na levé straně jsou všechny soubory, které jsou uvnitř mého projektu, a všimněte si, že mám spoustu, a ani jsem nic. IOS je skvělá. Například, tady to ViewController.h, to bude představovat svůj první pohled řadič, takže první obrazovce uvnitř mé aplikace. Teď už vím, co to říká. Říkáme volám této třídy ViewController, a ViewController dělá vše, co UIViewController dělá, a to je opět nějaký třída, která Apple napsal, že dělá hodně šikovný věcí pro nás Líbí zobrazení obrazovky. Tady je místo, kde mohu skutečně začít vymezení toho, co podle mého názoru regulátor dělá, a ukázalo se, že jsem se opravdu nepotřebují nic z toho. To je často používaný kód, který Apple mi dává zdarma. Já jsem třeba, že první řádek, nebo nemám třídu, takže se můžeme zbavit toho a toho zbavit. Dobře, tak to je moje prázdná obrazovka. Nyní pojďme klikněte na MainStoryboard.storyboard, a to je místo, kde to začíná být zajímavé. Jedná se o první obrazovku na své aplikace. Pokud chci přidat tlačítko, v HTML jsem musel vytvořit tlačítko tag. V Android budete muset vytvořit tlačítka značku, ale v iOS, pokud jsem sem přišel, aby v pravém dolním rohu a když jsem klikněte na tento třetí jeden tady, kde se říká objektů, a můžu se posunout dolů, nebo můžu začít hledat tlačítko. A podívejte se, tlačítka, takže když jsem vlastně přetáhnout toto právo existuje, Právě jsem přidal tlačítko na tuto obrazovku, na mém app. Pokud chci změnit text, mohu dvakrát na ni klikněte, říct něco nalákat jako "Stiskněte mě." Dobře, teď, když spustím tuto aplikaci, tak jsme jej zkompilovat tak spustit jsem klikněte na tlačítko Play v levém horním rohu, a tady je moje app. Neudělal jsem nic, a já jsem dostal sladkou hledá pro iPhone. Pokud chci, aby to zastavit, můžete kliknout na tlačítko stop protože je to větší zábava. Řekněme, že jsem vlastně chci aby se něco stalo, když jsem stiskněte toto tlačítko. K tomu, že to, co musím udělat, je, že jsem třeba vytvořit nové obslužné rutiny události nebo akce. To znamená, že musím vytvořit nějakou metodu, kterou chci být nazýván když jsem stiskněte tlačítko, tak se pojďme vytvořit novou metodu. Jsem uvnitř ViewController.h. Musím říci, že existuje metoda. Potřebuji pomlčku jako první, protože budu se volá to na kontroleru pohledu. Musím dát to typ. Typ to bude, že IBAction věc, kterou jsme viděli dříve. To je obslužná rutina událost, takže to bude vrátit IBAction, a to je náznak, aby XCode říci, že to je něco, co chci zapojit něco. Můžu dát mu jméno, jako je buttonPressed, středníkem. Teď jsem vyhlásil novou metodu uvnitř mé třídy. Já jsem řekl, tato metoda má existovat. Nyní se pojďme přijít do ViewController.m, a řekněme, že to, co tato metoda může udělat. Když začnu psát, například, (void) buttonPressed Oznámení XCode je to opravdu pěkné a autocompletes pro mě. To je opravdu úžasné. Všimněte si, že uvnitř. M. souboru mohu také říci neplatné, a to proto, že IBAction není vlastně druh. Je to vlastně hashtag definován někde být neplatné, a znovu, je to jen náznak, aby XCode, že říká, že Chci, aby to bylo obslužná rutina událost, a uvidíme, proč pár sekund. Po stisknutí tohoto tlačítka se budu dělat něco nepříjemné Líbí zobrazí popup. Chcete-li, že mohu vytvořit novou instanci této třídy s názvem UIAlertView, a to je třída, která Apple napsal, že se bude zobrazovat otravné vyskakovací okna. Budeme volat tento popup upozornění, a mám 2 kroky, nezapomeňte, k vytvoření tohoto objektu. První věc, kterou musím udělat, je přidělit místo. Chci UIAlertView. Chci přidělit místo. To je můj první metoda. Můj další metoda je chci k inicializaci, a tak mám tuhle velkou, dlouhou metodu zvanou initWithTitle. To je v podstatě bude kontrolovat, co to popup říká. Název mé Popup může být ahoj. Poselství tohoto okénka může být "Tohle je iOS." Delegát věc, já nevím, co to je. Řekněme, že to nic není. Nyní tlačítko, že se to objeví říct něco jako "To jistě je," a já opravdu nechci žádné další tlačítko, tak se pojďme odstranit to a zavřete konzolu. Dobře, jsem vytvořil ještě jednu. Tam jdeme. To je, jak mohu vytvořit nový popup. Pokud chci skutečně ukázat popup chci volat show metody. Chcete-li, že mohu říci, upozornění a ukázat, a znovu, autocomplete byl super nice. Pokud jsem zapomněl, co to bylo, kdybych si napsali v s, Mohu procházet sem přijít na to, co to je, a filtruje pěkně. Teď jsem vytvořil tento nový popup. Vrátíme se na to, co delegát znamená později, a teď chci říct, chci to metoda, která se padáka když jsem stiskněte tlačítko, takže budu se vrátit do mého scénáře, a chci teď připojit tuto IBAction. První věc, kterou chcete udělat, je kliknout na tlačítko. Když jsem toto tlačítko Chci aby se něco stalo. Nebudu držet kontrolu. Jdu na tlačítko a přetáhněte tlačítko na více než tady, kde se říká, že View Controller. Můžeme vidět, že to pěkně svítí. Pokud jsem se pustil se svým myší Teď mám to okno sem, kde jsem nějaké možnosti. Jedním z nich je událostí, které mohu zaregistrovat. Jedná se o všechny ty metody I deklarovaných v mém souboru h jako IBActions. To je, jak XCode ví, co by se měl objevit v tomto malém seznamu, tak, že je to jen náznak. Kdybych klikněte na tlačítko stisknuto, jsem nyní registrováno obslužnou rutinu události. V JavaScriptu jsme museli říct, že jsem nějaký kód, který registrována obslužná rutina událost. V Objective-C bylo opravdu tak jednoduché. Když spustím to znovu teď, když jsem stiskněte tlačítko můj obslužná rutina událost je vyhodí, a budu si to popup. Super, super jednoduchý tam. Pokud jste někdy chtěli vidět všechny události, které se dějí být registrovány na komponenty, pokud jsem klikněte na toto tlačítko a já jsem přišel sem na pravé straně první můžete vidět tady můžu dělat věci, jako je typ tlačítka, takže pokud chcete jednu z těch, které jsem to, nebo na Přidat kontakt tlačítko nebo cokoliv jiného. Pokud chci vidět všechny události, které jsou na toto tlačítko když jsem přišel celou cestu sem na pravé straně můžeme vidět zde na události, které mám všechny tyto různé události. Mohu stiskněte tlačítko, když jsem pustil tlačítka, když jsem dvakrát kohout nebo cokoliv, a ten, který jsem právě registrován, je tato událost nazývá Dotkněte se uvnitř, a to říká, že jakmile můj prst přijde na tlačítko tato událost se chystá na oheň, a to je přesně to, co se právě stalo. To je druh výchozí tlačítko stisknuté události. Jakékoliv otázky tak daleko? Dobře, že to, jak můžeme začít zapojit do věci v našem kódu do věcí uvnitř našeho rozhraní. Nezapomeňte první věc, kterou jsme museli udělat, bylo najít kód, a pak jsme napojen rozhraní ke kódu, a tam to naše první app. Dobře, to bylo opravdu cool, a vytvořili jsme toto tlačítko. Co když nechceme, aby si vytvořit spoustu vlastností představuje tato tlačítka? Například, v Tic Tac Toe mám 9 tlačítek, a bylo by super, super nepříjemné muset přetáhnout 9 krát nebo když jsem musel dělat Tic Tac Toe s 81 místo 9 a musel jsem drag and drop 81 krát, a to je lame. Co můžeme udělat, místo toho je podobně jako HTML když jsme měli věci jako ID a jména a můžeme hledat věci jejich ID, je to podobný pojem v iOS tzv. tagy. Tag je prostě jedinečný číselný identifikátor pro komponentu. Pokud Říkám to má tag 0, například, když jsem vytvořit tlačítko a dát mu tag 0, a uvidíme, jak to udělat, že pár sekund, když chci se dostat na toto tlačítko mohu jednoduše říct, chci volat viewWithTag metody na objektu sem, self.view, který představuje aktuální obrazovku, například. Kdybych zavolat, že viewWithTag metodu, budu zatáhněte tlačítko s tagem 0. Pojďme se podívat na to, že bude stavět Tic Tac Toe. Za prvé, to je můj scénář. Vytvořil jsem tyto 10 UI tlačítka. Všimněte si, že jsou všichni stejné velikosti. Kdybych klepněte na jednu z nich, a vrátím se sem na této pravé straně uvidíte jsem upravil písmo tady, tak jsem se na písmo, trochu větší, ale to, co jsem také udělal, bylo, jsem nastavte tento tag. Řekl jsem, že to má tag 1, a to vlevo nahoře. Teď, když jsem klikněte na další tlačítko, jako je tento druhý zde, Nyní uvidíte, že moje značka je 2. Každé z těchto tlačítek má prostě jedinečný značku, a tak to je později, jak budu začít interakci s mým aplikace. To vše je uvnitř jednoho pohledu regulátoru, ale tady je to, co máme. Máme 3 vlastnosti zde. První a poslední budou reprezentovat stav mé desce. V podstatě to první je pole představující kde Xs a Os jsou. Tento druhý zde nám říká, který je na tahu. Určitě jste si všimli, že jsem také tyto věci tady. Než když jsme prohlásili, vlastnosti, dal jim jméno a typ. Můžeme také dát jim nějaké další informace zde. Toto První říká nonatomic, a co to říká je v podstatě jen jedna věc, kterou nikdy nebude pokusu o přístup k této proměnné v čase. Dalo by se to složitější aplikace, které jsou multi-threaded, a tak v roce Scratch jsme měli různé závity, a různé skřítci mohli dělat různé věci ve stejnou dobu. Pokud to není tento případ, který není v ničem, že budeme při pohledu na, Řekneme-li nonatomic to vlastně bude dělat věci trochu rychleji. Máme také tuto věc s názvem assign, silný, nebo slabý. Tento přiřadit jen říká, že se jedná o standardní typ. To není objekt nebo ukazatel, protože je to jen bool, tak bool je vestavěn do Objective-C. To říká, že se nesnaží nic dělat fantazii s ukazateli zde. Je to normální stará scaler. Silné a slabé, to slabé říká, že ve skutečnosti Chci, aby to měl ukazovat na něco v pohledu regulátoru. Nebudu se skutečně přidělit nebo init to sám. Interface Builder, když jsem spustit aplikaci, bude zvládnout všechnu tu inicializaci. Když řeknu slabá, že říká, že někdo jiný bude vytvářet to. Když řeknu, že silná, to říká, že budu mít jeden to je vytvoření této desky objektu, a tak tady mám nějaké další metody zde, Například, akce, když je stisknuto tlačítko nová hra, akce pro při stisknutí některého z dalších tlačítek, a et cetera. Nebudeme se dostat do příliš mnoho logiky Tic Tac Toe, i když je to velmi vzrušující, ale pojďme se podívat na některé z věcí, které můžeme udělat uvnitř iOS. Tato nová hra metoda se bude vyhozen když jsem stiskněte novou hru tlačítko. Chcete-li připojit, že až jsem prostě přijít do mého scénáře. Jsem klikl na novou hru. Pokud přijdu sem napravo vidím, že Dotkněte se uvnitř je připojen k newGame metody. To je důvod, proč to bude dostat padáka. Metoda newGame udělá nějaký soubor nahoru. Bude to, že chci, abys vymazat stav desky. To je pěkný způsob na proměnlivých polí. To je říct, že je to nyní X je na řadě, a teď jdu využít této viewWithTag věci. Já vím, že můj tlačítka mají slova 1-9, a to je něco, co jsem svévolně vybral. Pokud chci nastavit text každého tlačítka je prázdná protože jsem právě začal novou hru, a já nechci Xs nebo Os zůstat přes to dokážu. Můžu říct, chci názor na značku, 1, 2, 3, 4 et cetera. To bude tahat jinou tlačítko pokaždé. Tady budu vrci UIButton. Stejně jako my by mohlo vrhnout ints na plováky a naopak to říká, že chci hodit to na UIButton. To znamená, že druh je pak * UIButton protože ukazatelů, ale nebojte se, že to není děsivé už. Jakmile budu mít na toto tlačítko jdu volat metodu na to. Tato metoda se nazývá setTitle forState, a tak to říká Chci nastavit text tlačítka se prázdný řetězec, a chci, aby to bylo prázdný řetězec, pokud to není stisknuto. Pokud jsem pomocí této metody, mohu změnit text tlačítka jakmile někdo udeří, ale chceme říct, když je tlačítko jen tam sedí Chci text být prázdné. Nakonec, budeme inicializovat moje deska, a já řeknu, že všechno je v současné době 0, tak tato deska členové neměnná je proměnlivé pole, což znamená, že můžete volat AddObject metody a jen 0 uvnitř ní. To je to, co se stane, když si vytvořím novou hru. Pojďme se podívat na jinou. Tato metoda je zde IBAction, že se to být stisknuto pokaždé, když jeden z těch čtverců je stisknuto. Nyní máme nějaký Tic Tac Toe logika. Jsme přijít na to, který je na tahu, a na základě toho jsme buď nastavit X nebo O, ale jsme si všimli, že jsme opakovaného stejný obslužnou rutinu události pro jednoho každého z těchto tlačítek. To znamená, že nemám metodu pro levé horní tlačítko, jiný způsob tlačítko vpravo dole, i když jsem mohl udělat, že. To by nebylo opravdu dobrý design. Co tady dělám je, že jsem vlastně jít k určení co tag tlačítko, které byla stisknuta je. Všimněte si, že tato hra metoda přijímá jeden argument. Říká se tomu odesílatel, a to, co odesílatel je odesílatel bude představují přesně to, co bylo přijato opatření na. Pokud stisknu tlačítko, tento odesílatel bude, že UIButton že jsem vlastně stisknutí, takže to znamená, že tento UIButton má značku, protože jsem vytvořil značku. Pokud chci se dostat na značku mohu jen říci, Chci tag odesílatele, a znovu, právě jsem odlita to na UIButton. Já náhodou vím, že odesílatel bude UIButton. To nemusí vždy být UIButton. Mohl bych například, registrovat stejnou obslužnou rutinu události  pro jeden pro tlačítka, jedno pro posuvníku. V tomto případě, já vím, že jsou všechna tlačítka, takže jsem chtěl říct Chci, aby to bylo tlačítko, a pak můžu dostat značku, a z tagu já teď vím, kde jsem uvnitř desky. Pak mohu jednoduše nastavit buď X nebo O, můžete přepínat na turnu, zjistit, kdo vyhrál, et cetera. Jakékoliv dotazy týkající se to tak daleko? Dobře, kód jsme dosáhli on-line nechceme dostat do příliš mnoho z Toe Tic Tac logice, ale teď je vidět, že opravdu vše, co děláme je my jsme looping přes tohoto pole, takže máme pár pro smyček zde, a my jsme jen porovnání vidět máme shodu ve všech řádcích, Relevance ve sloupci nebo něco podobného. Chcete-li skutečně spustit tuto aplikaci, když jsem klepněte na jedno z těchto tlačítek že hra metoda byl vyhozen, tak to znamená, že jsem byl právě nastavený Tlačítko být X, takže nyní toto tlačítko bude O, a tak dále, a tak to je, jak my teď začínáme pracovat s touto jedinou stránku aplikace. Budeme psát kód, tak neváhejte a prohlédnout, že ale pojďme nyní hovořit o některých aplikací, které jsou více než jen jednu stránku. Tak vzrušující jako Tic Tac Toe je, spousta aplikací uvnitř iOS jsou trochu z těchto cvičení se věci s více obrazovkami. První koncept, že budeme muset hovořit o jsou protokoly, a protokol je prostě soubor metod které můžete slíbit, že definovat. Pokud jsem vytvořit tento nový protokol s 2 metodami, tento první stupeň, pokud návratový typ je void, volal jsem to foo. To trvá žádné argumenty. Mám jinou metodu. To vrátí int. Nazval jsem ji blokovat, a to trvá jeden argument. To vše je protokol, který se nazývá SomeProtocol tady, Jedná se o soubor věcí, které někdo může realizovat. Nemám uvnitř tohoto protokolu řekl, co foo dělá. Místo toho, já jsem jen říct, že si mohli definovat foo, pokud chcete. Pokud jsem vytvořit zobrazení řadič nebo vytvořit třídu Mohu uvnitř této třídy slibu realizovat Některé z těchto metod, takže například v případě říci teď říká, že dělám slib vám, že uvnitř této třídy View Controller budu mít definice pro oba foo a bar. Proč je to užitečné? Mnoho komponent uvnitř iOS využít tohoto návrhový vzor tzv. delegaci, a to, co říká, že delegace je to, že se například, když se textové pole a tam jsou některé události, které by mohly být registrovány uvnitř mé textového pole, spíše než vytvoření samostatných akcí, co můžu udělat, je můžu říct delegát tohoto textového pole bude nějaký objekt. Když říkám, že je to delegát nyní to znamená, že pokud by nějaká událost byly vypáleny do textového pole spíše než k registraci nebo něco podobného, ​​že je to jen zavolá metodu na delegáta. Například, uvnitř mé textového pole mám metodu, když jsem stiskněte že provádí tlačítko v pravé dolní, a tak spíše než registrace obslužnou rutinu události, co můžu říct je textové pole, zde je objekt, který chci, abys volat metodu na Pokaždé, když někdo zmáčkne tlačítko Done, a to znamená, že objekt musí implementovat nějaký protokol , který říká, slibuji definovat, že udělal tlačítko akce, protože pokud to není define tuto metodu a stiskněte tlačítko Hotovo, pak to bude matoucí. Pojďme se podívat na příklad. Tady jsem prostě jedno textové pole, a jedna z vlastností tohoto textového pole nad zde na této pravé straně je delegát. To je vlastnost třídy. Co jsem udělal, je zde mohu kontrolovat kliknul, a já jsem vytáhl z tohoto místa sem k zobrazení řadič, a to říká, že nyní delegáta tohoto textového pole bude zobrazení řadič. To znamená, že když některé akce stane, spíše než registraci samostatné obslužné rutiny Chci, abys je poslal do delegáta. Nyní se pojďme podívat na mého názoru regulátoru. Uvnitř. Souboru h jsem slib. Slíbil jsem realizovat některé metody uvnitř tohoto protokolu názvem UITextFieldDelegate, a znovu, to je jen nějaký seznam některých věcí, které jsem si mohou vybrat implementovat. Kdybych sem v mém. M souboru, jsem implementoval jednu takovou metodu. Já jsem to nazval textFieldShouldReturn protože to je to, co to bylo voláno v protokolu. A teď když jsem stiskněte tlačítko Done uvnitř tohoto textového pole to je to, co se děje, aby si zavolal, tak jsem se zaregistrovat obslužnou rutinu události. Připojil jsem delegáta, a vždy, když je vyhozen tato událost To je metoda, která bude zavolán, takže když jsem přišel sem do mého scénáře a spusťte jej, I když to načítání můžeme vidět, co to dělá. Na mé obrazovce mám 2 věci. Mám toto textové pole, a já mám tento štítek. Já prostě říkat Chci znění tohoto štítku se rovná co uživatel napsal v uvnitř textového pole. Tento další řádek tady je prostě metoda, která volám na textové pole, které říká, že chci, abys skrýt klávesnici. To je jen svévolné metoda, která Apple si vybral. Opět, než jsem udělal něco, co jsem musel zapojit všechno, tak jsem poprvé přišel sem. Z pohledu správce jsem přetáhněte ji do textového pole. Pustil jsem, a můžu vidět, že mohu tuto text vlastnost pole protože tady v kontroleru pohledu jsem definována vlastnost že je IBOutlet z textového pole. To říká, že můžu zapojit tuto vlastnost se do textového pole v mém uživatelském rozhraní. Teď, když jsem klepněte sem můžu začít psát. Nyní, když jsem klepněte na tlačítko Hotovo, že to bude střílet událost, která nyní mohu odpovědět. Žádné obslužné rutiny. To je, jak jsem reagovala na toto tlačítko Hotovo. Smysl? To není návrhový vzor, ​​který-se nemusí vůbec najít sami vytváření vlastní protokol, ale jen vím, že někteří různé iOS komponenty zaregistrujte události různými způsoby. Tlačítka, například, používat tyto IBActions. Textová pole, na druhé straně, se bude používat delegáty. Můžeme vidět a můžete se podívat všichni, že až uvnitř dokumentace. Mimochodem, je to vlastně tunu věcí UI postavené na systému iOS pro vás, tak například, jak jsem dělal, že říkají, že udělal v pravém dolním rohu je jsem si vybral toto textové pole. Přišel jsem sem. I posune dolů trochu se vrátit klíč, a můžu vlastně dělat to celou spoustu věcí, jako když chci, aby se říct, tísňového volání místo toho můžu udělat to, co je zcela náhodné, a já nevím, proč je tu vestavěný tísňového volání tlačítko, ale tam, říká tísňového volání v opravdu malých písmen. Tam máš. Rozhodně prozkoumat všechny tyto různé možnosti v iOS. Jakékoliv dotazy týkající se delegáti? Opět, stejně zajímavý design vzor, ​​který byste měli být vědomi. Dobře, pojďme další se podívat na tabulky výhledem. Tabulka pohled je v podstatě, že seznam položek, které je všude kolem v iOS. Když jste listovala všechny vaše kontakty, díváte se na nastavení stránky, a tento druh seznamu věcí, se nazývá zobrazení tabulky. Implementace zobrazení tabulky v iOS je velmi jednoduchý. Místo toho, aby si třídu, která sestupuje z tohoto UIViewController to, že jsme udělali, než my prostě potřebujeme říci, spíše než vše UIViewController se chci dělat, Říkám všechno UITableViewController se chci udělat, takže prostě přidává některé další věci, které jsou zcela pro nás udělal. Musíme udělat jen velmi málo, aby v podstatě vyplnit prázdná místa uvnitř v tabulce. Chcete-li zobrazit tabulku Potřebuji odpovědět na pár otázek. První otázka, kterou je třeba odpovědět, je, kolik úseky jsou v tabulce? Když jste listování kontakty aplikace, které si všimnete, že je to trochu pořádá As, pak máte BS, a budete mít tu malou dílčí záhlaví. Každý z nich je tzv. úsek. Můžete může, ale nemusí potřebovat tohle. První věc, kterou musíte udělat, je zavést metodu volal Tableview: numberOfSectionsInTableView. To jednoduše vrátí, kolik sekcí máte, takže by to mohlo říct, vrátit jednu, pokud máte jednu velkou zobrazení tabulky. Další otázkou, která iOS potřebuje vědět, je, kolik řádků máte? Například, jste listovala zobrazení tabulky. Máte pevný počet písní, které hledáte na nebo pevně stanovený počet kontaktů. Pokud jste mě, samozřejmě, není to mnoho, a tak to je, jak iOS ví, kolik buněk pro zobrazení. Opět platí, že by to mohlo říct něco jako návrat 3. Můj stůl pohled má 3 řádky. Konečně, iOS potřebuje vědět, co každá buňka vypadá, tak co to vlastně bude dělat, je tuto metodu volat tady dole, Tento Tableview: cellForRowAtIndexPath. Bude to volání této metody na jednotlivé buňky uvnitř vašeho stolu. Jak to nevím, kolikrát to nazvat? No, řekla jsi ji uvnitř počtu řádků v oddílu. Budeme volat to na každém z našich buněk, a uvnitř to je místo, kde si můžete skutečně dělat věci, jako je nastavit text, nebo vám říci, co to trochu modré tlačítko na pravé straně dělá. Vzor pro získání těchto buněk, budeme používat tuto metodu volal dequeueReusableCellWithIdentifier. Objective-C je ve skutečnosti velmi dobře známý pro absurdní délky jejich metody jmen, a to je opravdu pěkný případ v bodě příkladu. Co tato metoda dělá, je to jen říká, že chci, abys mi buňku. Jen něco iOS. Máte-li něco takového 100.000 skladeb na iPod Co iOS nechce udělat, je přidělit 100.000 buněk, protože pokud jste na vrcholu seznamu, co opravdu potřebujete přidělit paměť pro buňku, která je 99.000 řádků dolů? Ne, protože, jak jste posouvání můžete druh přidělit za pochodu. To je pro tebe udělal. Nemusíte se starat o všechny ty hloupé věci výkonu. Vše, co říkají, je volání této metody dequeueReusableCellWithIdentifier, a to říká, dobře, pokud potřebujete jdu vytvořit novou buňku pro vás. Ale pokud jste na dně tabulky a jste již přiděleno některé buňky v horní části tabulky, které jste opravdu nebudete potřebovat v dohledné době Já ti dám jednu z těch zpět namísto alokování nového, a tak to je pěkný výkon obavy. Nemusíte alokovat buňky sami. To bude vám zpět buňku. Bude to návrat k vám buňky objekt. Jakmile budete mít mobilní objekt, který můžete udělat věci k ní. Můžete nastavit text buňky s touto vlastností tzv. textový popisek. Můžete přidat tento šipku vpravo nebo jiným náhodným stuff s touto druhou majetku zvaného accessoryType, a tak dále, a tak dále. Pojďme se podívat na skutečně provádí zobrazení tabulky nyní. Když jsem vytvořil tento projekt spíše než říkat jediný pohled žádost Vlastně jsem sem přišel na master-detail aplikace, a tak v podstatě to odpovídá poštovní aplikace na iPad s pohledu na stůl vlevo a pak obsah na pravé straně. Na zařízení iPod nebo iPhone to bude odpovídat na jednu zobrazení tabulky. To je místo, kde jsem dostal startovací kód. Pojďme nejprve podívat na scénáři. To vše bylo pro mě udělal, v podstatě vytvořil. Tento navigační lišta mi ukázal, co příkladem buňka může vypadat jako, a můžu dvakrát klikněte, změňte název. Jakékoliv jiné UI obavy zvládnu tam. Hlavičkový soubor vypadá opravdu jednoduché. Spíše než, že tohle je UIViewController jsme nyní, že tohle je TableViewController, takže víme, že chceme volat všechny ty tabulky metody. Další Chci vytvořit vlastnost, která je bude zastupovat věci uvnitř mého stolu. Tato tabulka bude libovolně zobrazení seznam ovoce, a tak musím vytvořit nějaký pole ve kterém mohu vložit ovoce. Uvnitř mého implementačním souboru, první věc, co chci dělat je chci ujistit, že jsem inicializovat pole. Řekl jsem alloc init, vytvořil můj ovoce pole, a Přidám 4 věci k tomu, z nichž jedna je mnohem více kontroverzní než ostatní 3. A teď mám řadu velikosti 4. Jsme třepání do CS50. Nyní mám řadu velikosti 4. Teď jdu začít odpovědi na tyto otázky, a vlastně, když jsem vytvořil tuto aplikaci to vše bylo již pro mě udělal. Neměl jsem psát z počtu sekcí v zobrazení tabulky. To už tam byl, a já vyplní prázdná místa. Kolik oddíly mám? Jeden. Vše hotovo. Kolik řádků mám? No, já mám jeden řádek pro každou ovoce, tak tento počet je vlastnost jakéhokoliv pole, které říká, jak velký je to? To, kolik řádků mám. Nakonec, musím říct, co se každá buňka vypadá? Jdu říct dequeueReusableCellWithIdentifier. Opět platí, že byl tento již napsán pro mě. Nechtěl jsem to udělat sám, a chci se dostat zpátky tato buňka na tomto místě. Pamatujte si, že voláme tuto stejnou metodou na každé buňce, a tento argument zde, tento argument indexPath, říká, že to, co řada jsem dovnitř Když řeknu, že indexPath.row tady to bude 0, pak to bude 1, pak to bude 2, a to tak vím co cell jsem v současné době zobrazování. Chci nastavit text buňky pomocí této vlastnosti textLabel jít dovnitř mé ovoce pole a dostat objekt odpovídající každého řádku. Pokud je to řetězec, já jsem teď stanovení vlastnost text na řetězec. Můžu udělat ještě jednu věc. Já se také zaregistrovat obslužnou rutinu události na každém z buněk, takže když jsem klepněte na každé z těchto buněk Tento didSelectRowAtIndexPath, to bude jen pro mě, tak jednoduše tím, že definuje to teď můžu zvládnout, co se děje když klepnete na buňku, a znovu, jsme kolem, ve kterém byla využit buněk takže můžeme znovu použít stejný obslužnou rutinu události pro všechny naše buňky. Opět, je to něco, iOS je na tom pro mě. Pojďme zobrazit další nepříjemné POPUP že prostě říká, že jste si vybral něco, kde to něco bude řádek objekt. Když spustím to, budu mít toto pěkné zobrazení tabulky jeden řádek pro každý z těchto druhů ovoce, a když jsem klepněte na jednu to mi říká, co se stalo. Smysl? Budujme trochu složitější z aplikace, stejně jako kliknutí jste si vybrali rajče je. Pěkné o Storyboarding je to nejen nepomůže nás Design obrazovek samostatně, je to také nám pomůže provázat celou naši aplikaci, takže konečný app budeme budova je to pěkná sportovní news reader, a tak to bude mít více obrazovek, a tak jsem si vlastně představují každý z těchto četných obrazovek na scénáři a mohu oddálit a vidět můj aplikace z vysoké úrovni. Chcete-li vytvořit nový element uvnitř mého scénáře je to opravdu jednoduché uvnitř Interface Builderu. Pokud chci přidat další obrazovku to, například, I může nejprve oddálit s pinch zoom, který Apple miluje tak moc, a tady dole, než jsem vyhledat tlačítko a já přetáhnete tlačítko když chci vytvořit novou obrazovku mohu skutečně jen drag and drop Celý pohled řadič, takže když jsem vybrat to, vytáhněte ho sem, hey, je tu další obrazovka, a tak nyní používá stejný storyboard soubor Můžu mít všech obrazovkách uvnitř mé aplikace, a mohu oddálit a vidět, jak se vzájemně ovlivňují. Ty nebudou ovlivňovat dosud. Způsob, jakým se tyto 2 obrazovky interakci je definovat vztahy. Můžete v podstatě říkají, že toto obrazovku, když stisknete toto tlačítko, Chci, abys snímek se k této nové obrazovky. To znamená, že je tento druh vztahu mezi  první obrazovka a druhá obrazovka. Budete mít v podstatě šipku od tohoto tlačítka na druhé obrazovce říká, že když stisknete toto tlačítko, které tam chci jít. Stejně jako my ovládat klikli a přetáhnout do vymezení těchto zásuvek budeme dělat stejnou věc k definování těchto přejde. Uvidíme příklad pro to, a než jsme vlastně přechod z jedné obrazovky na druhou iOS je tak laskav, že volání této metody volal prepareForSegue, a to je místo, kde můžeme začít odesílání dat z jedné aplikace do druhé. V příkladu se chystáme podívat se na to bude v podstatě umožní nám filtrovat baseball týmy v ligách a divizích. Když jsem ji vybrat ligu, například, chci přechodu k mému dalšímu obrazovku, kde můžu zobrazit všechny divize v této lize nebo všech různých týmů. Potřebuji poslat na tuto obrazovku, co týmy, měli byste zobrazit. Chcete-li, že budu využít této metody zde. Nakonec, stejně náhodný bod na iOS. Pokud chcete ukládat data tam je to, čemu se říká základní údaje, což je vlastně docela složité s ním pracovat. Můžete také použít SQL k ukládání dat, které je opět pěkné, ale trochu na složitější straně pro práci s, ale iOS také podporuje tyto opravdu cool věci zvané vlastnictví seznamy, a seznam vlastností je jen soubor, který představuje klíč hodnota. Můžete definovat seznam klíčů, a ty říkají, že toto tlačítko se bude pole. Tento klíč bude řetězec, a v podstatě vše, co můžete dělat v JSON můžete udělat uvnitř seznamu vlastností, a tak to opravdu pěkně nám umožňuje pracovat s některými daty. Například, mám Teams.plist, že jsem vytvořil. Vytvořil jsem nový plist soubor, a mohu drill down. Toto je slovník, to je slovník, jsou řetězce, a tak to je pěkné grafické znázornění dokumentu JSON nebo jen soubor klíčových dvojic hodnot, a tak to je údaj, že budu pracovat s uvnitř mé aplikace. Podívejme se nejprve, pojď sem. Máme mnohem více souborů nyní. Ale pojďme se nejprve přijít sem do scénáře. Storyboard tady, když můžete oddálit, nyní můžeme vidět, že je to tok své aplikace. Já se nejprve, kdo na této obrazovce. Budu přecházet na tuto obrazovku, a budu přecházet na této obrazovce, a můžeme vidět, že když jsem trochu přesunout jeden z nich asi jsme tyto šipky jít odsud až sem, a jak jsem definovat, že šíp byl, kdybych přiblížit trochu, a když jsem přijít do tohoto pohledu regulátoru, a tady je buňka, a chci říct, že když klepnete na buňku Chci, abys klesat přes jinou obrazovku. Mohu jednoduše podržte kontrolu, Najeďte trochu, podržte kontrolu, přetáhněte tuto buňku nad a pustit. A tady říkáme, co je to přechod, který chcete použít? Chcete použít tento snímek věc, která se nazývá tlak? Chcete klouzat nahoru ze dna? Tomu se říká modální. A jednou jsem na jednu z nich, bude to kreslit na tuto šipku pro mě, a to znamená, že jsem vlastně ovládal, co se stane, když jsem stiskněte toto tlačítko graficky. Nechtěl jsem psát nějaký kód, aby skutečně sklouzla z jedné obrazovky na druhou. Definoval jsem to vizuálně uvnitř Interface Builderu. Kdybych klikněte na šipku, můžeme vidět, že jsem tuto věc jméno. Zavolal jsem to showDivisions, a je to tak, že jsem si vědět, co přechod má nastat, a uvidíme, proč jen na sekundu. To je, jak jsem zapojen do různých obrazovek v mé aplikaci. Pokud by se jednalo tlačítko, například, spíše než tabulka pohled, Mohl bych řídit klikněte na tlačítko, přetáhněte ji na další obrazovku, a to je, jak mohu udělat navigační takhle. Opravdu rychle, když půjdeme do MasterViewController, znovu, jsme prostě bude definovat seznam věcí , který se zobrazí v zobrazení tabulky. Tady říkám chci, abys to plist soubor, a chci vám umožní nahrát ji do slovníku, a jakmile jste si, že slovník, budu odpovídat na tytéž otázky znovu. Zde je počet úseků. Za prvé, je tam jeden řádek pro každé ligy, a text každé buňce musí být buď první, první liga, druhá liga, a tak dále. Konečně, budu používat tuto metodu, která jsme právě viděli názvem prepareForSegue, a to je metoda, která se bude vyhozen, když jsem klepněte na tlačítko v jedné z těchto řádků, a proto aktivaci, že přechod že jsem nastavit šipkami. To říká, že můžu mít více vztahy z jedné obrazovky na druhou. Pokud mám 2 tlačítka a každé tlačítko se dostanete na jinou obrazovku Budu mít 2 přejde, 1 pro každé tlačítko. Ale to prepareForSegue je opět, bude znovu pro každý z jednotlivých vztahů, tak to znamená, že jsem třeba způsob identifikace, pokud stisknete první tlačítko nebo stisknutím druhého tlačítka. Pamatuješ, když jsem dal, že SEGUE jméno, tento showDivisions, to je, jak už vím, že je to segue, že byl aktivován. Všechno, co chci udělat, je, že jsem chtěl říct Chci zjistit, co já jsem jen udeřil, a tak se dostat, že mohu říci, Chci indexPath pro vybraný řádek, pamatovat indexPath jen říká, že tam, kde jsem kliknul, a pak chci říci, že jsem chcete zjistit, kam jdu. To destinationViewController, že je to vlastnost SEGUE. To je obrazovka budu, takže vím, že obrazovka budu se nazývá DivisionsViewController protože jsem vytvořil tuto třídu, a tak teď, když řeknu d.divisions Já jsem teď nastavení vlastnost kontroleru pohledu jsem asi jít. To je, jak jsem odesílání dat z jedné obrazovky na další obrazovku. Jen při pohledu na tento DivisionsViewController můžete vidět, že v. souboru h je, že vlastnictví divize, a to je to, co jsem v podstatě naplněním, tak to je, jak vím, že jsem zobrazení divize odpovídající liga, která jsem kliknul, a znovu, aktuální zobrazení tabulky vypadá skoro stejně, jen záznamník ty 3 jednoduché otázky, jakož i identifikační co se stane, když se přesunete na další obrazovku. Jen pár dalších věcí zde. Všimnete si v horní zde, že spíše než říkat # include Já jsem teď říkal # import. To je jen Objective-C věc. Import je v podstatě hezčí verze patří, a například, potřebujeme vědět, co tato třída je, tak jsem si prostě říct DivisionsViewController. Pokud bychom neměli hashtag standardio.c uvnitř naší. Souboru c kompilátor neměl tušení, co printf bylo. Podobně, když nemám importovat DivisionsViewController kompilátor opravdu nemá tušení, co je DivisionsViewController. Jen se ujistěte, že uvnitř vašich různých. Souborů m byste se ujistit, import odpovídající. h soubory tak, aby kompilátor ví, co se děje. A konečně, co Apple nakonec se je zobrazovat některé údaje pomocí webového zobrazení, a tak web pohled je objekt, ve kterém můžete vložit Trochu webový prohlížeč uvnitř vaší aplikace. Vše, co musíte udělat, je dodat URL do webového prohlížeče, takže chci jet do mlb.mlb.com, a to je, jak mohu získat přístup na domovskou stránku pro každý tým, a tak předáním této adrese web názor může zobrazovat to pro mě, a já jsem si procházet kolem, a simulátor je používán, že jeden. Nyní to přišlo z mého plist. Kdybych Klepnutím na toto tlačítko to také přišlo z mého plist, a to posuvná byla zpracována vymezením těchto přejde. I Klepnutím na toto tlačítko a ještě jeden, a teď tady je můj UIWebView, tak jen tak Zde je webová stránka pro URL, které jsem vložené, a já jsem nemusel zvládnout cokoli bláznivého. To je, jak zobrazit webovou stránku. Věci jako toto tlačítko zpět jsou zde také uvedeny na mě zcela zdarma, protože jsem definovány tyto vztahy pomocí přejde. Nějaké otázky? Jo. [Student] Takže při použití přiřazení, už nikdy nebudete muset volného něco? Přesně tak, když budete volat alloc a init nemusíte osvobodit ji. IOS bude zvládnout všechny, že pro vás. Je to úžasné, a nejste porušení žádná pravidla. Jo. [Student] Pokud jste byli zahrnout více týmů, které by se vešly na obrazovku, by to mít automaticky rolovací možnost, nebo je to něco, co potřebujete přidat? Přesně, když měl více jednotek, například, by se automaticky zpracovávat rolování pro mě, a všechny výkonnostní obavy s obrovským stolem se také stará o zcela pro mě. Další otázky? Všechny tohoto kódu se bude vyslán. My druh zamlouvají trochou více drobných detailů, ale věci jako nastavení některých vlastností na web zobrazení jsou jen věci, které můžete získat při prohlížení Apple dokumentaci, což je opravdu, ale opravdu pěkně vyložil. Mají spoustu ukázkových aplikací a příklad zvyklostem různých API, takže určitě prohlédnout ty, pokud je to možné. Jen některé užitečné odkazy budete chtít podívat na. To jsou některé užitečné dokumentace příruček. Adresy URL jsou masivní, takže jsou zkráceny. To první je celá knihovna dokumentace. Je tu málo vyhledávání bary, takže pokud začnete psát, tlačítko začne dávat vám veškeré informace o všech věcí, které můžete dělat s tlačítkem. Já jsem také na Zobrazit tabulku Programming Guide. To se zabývá tabulky názory v mnohem podrobněji, jak dělat věci, jako je dynamicky přidávat články nebo upravit buňky nebo odstranit. Je tu spousta vzorových aplikací z Apple, který vám ukáže, jak to udělat, a konečně, poslední z nich je Human Interface pokyny, a to je v podstatě nějaká diskuze komponent uživatelského rozhraní, věci jako nedělají tlačítko, které je 4 pixely od 4 bodů. To je špatný nápad, a další věci, které Apple chce, abys podporovat dobrý design. Nějaká poslední otázky před tím, než skončit? Dobře, určitě neváhejte, Jdeme mít speciální štítky na diskutovat. Budeme mít iOS jeden, tak rozhodně neváhejte využít, že. Pokud chcete pracovat se svými spolužáky na projektech nebo pomoci zjistit nějaké náhodné iOS věci neváhejte a napište mi, a určitě prostudovat všechny kód online, protože právě v zájmu době jsme trochu utajeno více jemnější detaily věcí. Ale pokud ne, pak hodně štěstí na vašich projektech iOS, a doufám, že budeme mít Velký příliv aplikací v App Store. [CS50.TV]