[Powered by Google Translate] [Семинар] [iOS: Пишување Apps Како шеф] [Томи MacWilliam] [Универзитетот Харвард] [Ова е CS50.] [CS50.TV] Сите права, сите, добредојде на iOS: Пишување Apps како шеф. Овој семинар ќе се фокусира на пишување апликации за iPhone и за возврат пишување апликации за iPad, и така ние сме во основа ќе прошетка низ неколку различни примери за тоа како да се направи еден стан, едноставна игра како Tic Tac Toe, или ако сте повеќе заинтересирани за правење стан како некој вид на читач на вести или нешто што се поврзува со интернет ќе зборуваме за тоа како добро. Ова е нашиот краток агенда. IOS апликации се напишани на јазик наречен Objective-C, и така ова е малку сличен на C но не и навистина на сите, па ние ќе се зборува малку за самиот јазик а потоа како да се изгради iPhone апликации со користење на овој стан програма наречена Xcode, кои ако не се симне уште се чувствуваат слободни да го започнете преземањето сега. Тоа е неколку гигабајти. Тоа треба да биде бесплатно на App Store, па ќе треба да имаат Mac идеално водење на најновата верзија на OS X. Ако не сте, нема проблем. Имаме Macs во науката центар достапни за ваша употреба со Xcode инсталиран, и така се чувствуваат слободни да ги користат овие за развој. Ако сакате да се направи еден стан, но немаат Mac, не се грижи. Има многу на кампусот ресурси за тоа. И така, тогаш ние ќе ги покрие 2 поголеми примери на различни апликации може да се направи. Objective-C е технички она што се нарекува супер сет на В Тоа значи дека секој код C важи Objective-C код. Тоа значи дека ние вид на канал снимено на некои дополнителни опции за C. Некои од овие карактеристики не вклучуваат морале да некогаш се напише Примерок повторно, фала богу, без да се грижите за оние глупави совети и ослободување на нив и сите нешта можете мразеше за C, а тоа е вид на качил во Objective-C. Сега, Objective-C, исто така, има многу поголем стандардната библиотека, па има многу повеќе функционалност ќе добиете бесплатно внатрешноста на Objective-C. Се сеќавам кога бевме пишување PHP забележавме дека отидовме од овој најмалиот јазик на гигант библиотека на сите овие луди работи што можете да направите. Истото се случува во iOS. Има предмети за нешта како календар будисти, и навистина ништо што веројатно може да се мисли на веројатно постои веќе во спроведувањето Objective-C е. Целта дел од Objective-C е референцирање нешто наречен Објектно-ориентирано програмирање. Ова е вид на нов концепт, но ние сме всушност најмногу научив многу од овие концепти веќе. Идејата зад Објектно-ориентирано програмирање е дека си оди за да се структурира многу од вашето кодот околу овие работи вика класи, и овие класи се навистина прослави structs. Внатрешноста на struct ние во основа рече дека тука е нешто, и оваа работа може да има членови. На пример, еден јазол во поврзани листа би можеле да имаат и други работи како вредност, покажувач кон следниот јазол во листата, и заедно дека покажувач и таа вредност составена оваа една инстанца на struct. Класите се многу слични, освен класи, исто така може да имаат функции во внатрешноста на нив. Кога ќе прогласи struct, ние само може да се каже int n или јазол * следната. Сега со Objective-C ние всушност може да се стави функции внатрешноста на тие работи. Друга работа што наставата може да се направи е тоа што тие можат да го наследат податоци од други класи. На пример, ние ќе се гледа во еден куп вграден во Objective-C класи. Еден од нив би можело да биде класа која претставува поглед на екранот, и така од велејќи дека сака да го имплементира мојот став ние во основа се каже некој во текот на Apple, веројатно навистина убави луѓе, напиша оваа класа за мене, а тоа се справува со работите како прикажување на копчињата или рендерирање на екранот, и ние ќе биде навистина болна за спроведување на сите дека функционалноста себе, и тоа со едноставно наследување податоци може да се каже сè што направи во таа класа Исто така, сакам внатрешноста на мојата класа, а потоа јас ќе одам да направите некои други работи, имено спроведе стан. Тоа е она што тој збор наследство значи. Ќе видите повеќе конкретни пример. И, конечно, клучот со Објектно-ориентирано програмирање е дека тоа доведува до податоци херметичка. Во некои од нашите проблемот поставува ние би можеле да имаат овие големи, глобални променливи и глобалните насекаде, а тоа е како ние ќе ги пратите на државата. Со часови можеме да почнеме концизирајќи информации во внатрешноста на објектот. Ако имаме еден екран на нашиот стан, ние навистина не треба да имате било какви податоци од друг екран во нашиот стан внатре во тоа, и така од страна на encapsulating работи во рамките класи ова всушност води да многу подобро кодот дизајн, и тоа е можно со некои дополнителни функции на Objective-C. Предупредување, синтаксата за Objective-C е банани. Тоа е како ништо што сум видел, па тоа е малку на кривата на учење се користи за добивање она што е грижам значи ова? Но, штом еднаш ќе добиете минатото дека првичните кривата на учење тоа е навистина, навистина мазна да започне пишување апликации. Да се ​​изјасни за класа, да кажам тука е мојата класа, постои, а можеби и тука се и некои работи што јас ќе одам да се дефинира подоцна, Одам да се каже @ интерфејс. Одам да се каже @ интерфејс. Одам да даде мојата класа име. А потоа подоцна некаде на друго место јас ќе одам да се каже @ крајот, и сето она помеѓу @ интерфејс и @ крајот ќе биде мојот клас. Тоа ќе биде она што е внатре од нашите. Ж датотеки. Исто како и во C нашите. Ж датотеки во основа рече тука се и некои работи кои ќе постојат. Јас не сум секогаш ти го кажувам она што го прават, сепак, но компајлерот треба да знаат дека тие постојат. Подоцна во внатрешноста на нашите. M додадени фајлови:-бидејќи сум за Objective-C е местото каде што ние, всушност, ќе се дефинира што овие класи се направи. Слично како нашите. В датотеки, ние обезбеди имплементација за функции. Внатрешноста на нашите. M датотека ние ќе кажам тука е она што сите функции внатрешноста на мојата класа она што сите тие го прават. И, конечно, внатрешноста на struct можеме да кажеме внатрешноста на оние кадрави загради int n или јазол * следната, и во Objective-C ние ќе го користите клучниот збор @ имот, и тоа е она што се случува да се дефинира својства, или не-функции кои се дел од моите часови. Повикувајќи функции во Objective-C е, исто така, банани. Кога ќе прогласи функции во C рековме нешто како int foo и отворени paren а потоа даде листа на аргументи. Тоа е она што прогласување методи или функции изгледа во Objective-C. Ако сакам да прогласи функција или метод каде што сакам да кажам дека методот е навистина само функција која е член на класа, па вид на меѓусебно заменливи, но не и навистина, па внатрешноста на мојот метод сакам да се создаде нов метод. Тоа се случува да се врати ништо, па тоа нема да биде од тип неважечки. Тоа е враќање тип на мојата функција. Сега имаме parens тука, бидејќи-Не знам. Следна ќе биде името на мојата функција, а потоа конечно имаме запирка исто како и имавме во C. Што е ново тука е овој човек овде. Ова цртичка е, всушност, е потребно, и што тоа вели дека овој метод тука мора да се повика инстанца на класа. Откако ќе прогласи нашите structs ние најверојатно рече нешто како struct јазол n, и дека всушност се создаваат или instantiated еден од оние structs, така што јас всушност би можеле да почнат да работат со она што е во него, така што ова цртичка значи дека ние треба да показ на класата исто како што instantiated дека struct пред можеме да го наречеме овој метод на неа. Ако сакам да започне додавајќи аргументи на мојот методи станува дури и повеќе банани. Еве го мојот метод име. Потоа јас ќе одам да имаат дебелото црево, и по ова дебелото црево се вели тука доаѓа некои аргументи. Овој метод ги зема еден аргумент. Типот на нејзиниот аргумент е цел број, и името на тој аргумент или променлива што јас ќе одам да започнат со користење на внатрешноста на метод се јавив. Повторно, ова е метод. Таа ги зема еден аргумент. Ако сакате да започнете додавајќи повеќе аргументи што се добива повеќе банани во кои имаме оваа дебелото црево кој се вели дека тука доаѓа мојата листа на аргументи. Ова Првиот аргумент е цел број. Сега, овој вториот аргумент е интересно. На променливата што јас ќе одам да се користи во внатрешноста на мојата функција се нарекува ѓ, па внатрешноста на мојата функција би можел да каже ѓ + = 1 или нешто. Оваа работа тука е всушност клучот за тој аргумент или параметар. Исто како и ние имавме клучните вредност парови и нешто како JSON или асоцијативни низи Objective-C донесе одлука да се каже, во ред, само така што тоа е навистина јасно кога ќе се јавите на методот што сите овие параметри се Јас сум, всушност, ќе се именува сите нив. Кога ќе се јавите на метод, вие всушност ќе кажам andFloat, и тогаш ќе помине внатре Интересно, ова не е именуван, но сите други параметри се, па ако имавме 3 аргумент можев да кажам andFloat и уште плови и така натаму. Кога ќе се јавам на овие методи е секако банани, па ако имам некој објект, и јас дефинирани метод наречен foo, и јас сакам да го нарекуваат, наместо велејќи foo отворање / затворање parens Одам да се отвори заграда. Тука е името на мојот метод. Одам да се затвори заградата, а тоа е предмет сум повикувајќи го. Запомнете, сите од овие методи постојат во класи бидејќи наставата може да се методите дефинирани во внатрешноста на нив. Тука сум произволно создаде објект на некои класа, и ова е синтакса за тоа. Постојат 2 чекорите за создавање на објектот. Првиот чекор е да се каже сакам да одвои простор. Ова е еквивалент на Примерок. Ние не треба да се каже Примерок повеќе. Ние падна метри, го направи alloc и замени. C со. М. Откако ќе alloc нешто тогаш ние треба да го иницијализира. Во суштина, кога ќе се создаде објекти можеби ќе сакате да се има некоја логика кој извршува кога тие се создадени, па можете да помине во некои стандардни вредности или нешто слично, па така ова init метод е тоа што всушност се создава на објектот. Ние прво одвои простор, исто како што направивме во C, а потоа да се иницијализира, кој може или не може да се направи целина многу. Тогаш ние сме се враќаат тоа нешто во објект о. Има ѕвезда тука, бидејќи ова е технички покажувач, но не грижете се, показалки не се толку голем договор во Objective-C повеќе. Сега сме instantiated оваа класа наречена NSObject, и ова е само случајна класа дека Apple има. Ние instantiated ова, и сега имам еден пример на оваа класа во овој објект о, па тоа значи дека ако јас дефинирани овие методи можам да ги повикам се допаѓа ова. Слично на тоа, ако сакав да се јавите на метод со еден аргумент, па ова е бар метод, кој се еден аргумент, и тука е baz: qux метод, па ова се 2 аргументи. Ова е повик една функција на овој објект о. Смисла? Синтакса треба да се направи смисла, но вид на се навикнеш на него. Океј, ајде да зборуваме за неколку работи кои се вградени во Objective-C кои не беа нужно вградени во В Во C ние вид на мораше да се справи со жици како овие глупи карактер низи, и добија навистина досадно. Objective-C има оние сите изградена во за нас, а тоа е изграден во користење на оваа класа наречена NSString. Кога сакам да се создаде NSString имаме повеќе arcane синтакса. Наместо велејќи: "cs50" велиме @ "cs50" и ова е само синтакса за прогласување на жиците во Objective-C. Ова е екстремно лесно да се заборави, па не. Сега, откако имам оваа, ова е стринг, но информации тоа е навистина само еден објект. Реков NSString, што значи дека instantiated класата наречен NSString, што некој друг го напишал за мене, и тие беа многу убаво за него, па сега Можам да почне повикувајќи методи на неа. Ако јас го нарекувам метод должината на овој објект е тоа се случува да се врати да ме должината на стрингот. Ова е само како strlen во C. Ова ќе се врати 4. Слично на тоа, уште еден метод јас можеби ќе сакате да се грижи за е ова characterAtIndex. Ова е метод кој се вели дека на овој стринг е Сакам да го добиете 0. карактер, и така ова ќе се врати да ме ликот в, и има еден куп повеќе од овие методи кои можете да ги Google навистина лесно. Документација на Apple е одлична, а ние ќе ги разгледаме во тоа во малку. Оние кои се стрингови. Ние исто така имаат променлива големина низи изграден внатре Запомни во C кога ќе прогласи низа моравме да речеме имаш 5 елементи, крај на приказната. Кога стигнавме да го вклучите Javascript-и PHP ние може да започне вршење на работите како додавање на елементи или поместување на елементите. Ние може да го стори истото во Objective-C. Наместо да се создаде низа во нормална Ц начин имаме повторно друга класа наречена NSMutableArray. Постои, исто така NSArray, и ова ќе основа капсулирало некои низа. Ова се вели првото нешто што сакате да направите е да сакам да ги распредели простор за нова низа, и откако го распредели Јас тогаш треба да го иницијализира. Повторно, само повикување на овие 2 методи. Сега ова значи дека во внатрешноста на овој објект Имам празна низа седи таму. Ако сакате да додадете нешто на оваа низа, може да се јавите на addObject метод. Сакам да додадете објект на низа а, и јас сакам да додадете стринг CS50. Ако сакав да обратно отстрани таа можам да кажам сакам да отстрани предметот на прво место на низа или објект. Смисла? Океј, ти вид на се навикнеш на овој плоштад заградата работа. Патем, во внатрешноста на многу библиотеки на Apple ќе видите оваа НС. На НС, всушност, се залага за следниот чекор, кој беше еден од Стив Џобс првите компании, и тоа е каде што тој навистина почнав да пишувам многу на кодот како вид на основа за Mac OS X и сите други работи, па така ова НС е вид на ова убаво наследство извикам на една од порано компании назад кога Епл беше прв на почетокот. Тоа е насекаде. Ајде да ги разгледаме во повеќе холистички Objective-C пример. Тука сум внатрешноста на Xcode. Да се ​​добие тука, јас прв пат преземале Xcode од App Store, отвори го, а потоа отидов горе тука за да датотека, над тука за да се нови, а потоа проектот. Откако ќе го направите тоа имам сите овие опции на она што сакам да се создаде, и така ние ќе ги разгледаме во овие опции подоцна, но само за овој пример, бидејќи ние не сме всушност ќе имаат еден стан, сепак, Дојдов тука долу, и јас реков алатка со командна линија, и ова е еден стан, што би можел да се кандидира на командната линија исто како што сме се одржува од В Тоа е како јас направивме овој проект, па сега јас сум тука, па ајде прв поглед на оваа датотека, и ова треба да изгледа прилично познато. Имам int име. Има мојот пријател argc, други мои пријатели argv. И така ние може да се види дека ова е влезна точка за мојот прв Objective-C апликација. Еве ние можеме да го игнорираме тоа за сега. Ова е во основа на некои меморија за управување со работи кои ќе не навистина некогаш мора да се грижите. Ајде да ги погледнеме во овој првиот блок тука. Оваа прва линија, ако кажам Студентски * alice = [[Студентски alloc] init] што е тоа го прават? Овој прв студент тука, ова е веројатно една класа. Ова не е класа дека Apple напиша, но тоа е класа која ја напишав. Првото нешто што сакате да направите е да сакам да одвои простор за нов студент, а потоа сакам да го иницијализира, па ова ми дава назад овој нов студентски објект, и јас сум чување на тоа во променлива наречена Alice. Каде таа класа доаѓаат од? Па, овде на левата страна овие се сите на различни датотеки во внатрешноста на мојот проект. Можеме да видиме тука имам Student.h и Student.m. На. Ж датотеката, се сеќавам, е местото каде што Изјавувам сите работи што ќе постојат во рамките на класата. Ајде да ги разгледаме во тоа. Добро, тука имаме оваа @ интерфејс, а тоа вели дека тука доаѓа декларациите на сè што ќе постојат во рамките на мојот клас. Тогаш имам дебелото црево. Потоа имам оваа NSObject работа. Ова дебелото црево значи дека наследството малку ние се разговара малку порано. Овој вели дека сè е NSObject да направите каде NSObject е оваа класа напишани од некој друг, сето ова NSObject да направите Сакам да бидам во можност да го стори тоа. Велејќи: NSObject тоа значи дека јас во основа наследен сите на функционалноста на друга класа. Тоа навистина ми даде еден куп на различни методи и својства што ќе можам да го користите. Овде јас сум создавање 2 својства. Тоа значи дека мојот ученик, ако ова беа struct, овие ќе биде 2 работи внатрешноста на мојата struct, така што секој студент има име дека е стринг, и студент, исто така, има одделение, која е int. Конечно, тука долу, ќе одам да се создаде метод за мојот студент. Се јавив на мојот метод, initWithName, и тоа трае еден аргумент, и тој аргумент е стринг, и се јавив името на таа. Сега ајде да погледнеме како ние всушност спроведува оваа класа. Еве, сега сум во внатрешноста на мојата. M датотека, м за имплементација, претпоставувам. Имам имплементација, мојот крај, и тука е местото каде што јас сум всушност дефинирање што initWithName прави. Имам initWithName, името на мојата параметар, а потоа и оваа е местото каде што јас сум всушност создавање на студентот, и така ова е малку криптичната, но ова е вид на boilerplate кои сакате да ги вклучите во вашиот конструктори. Ова иницијализација функција овде, initWithName, е еден вид на конструкторот. Ти си во основа изградба на нов студентски објект а можеби и испраќање на некои податоци во него. Првото нешто што сакате да направите е да сакам да се јавам init на овој супер работа. Запомнете дека кога реков назад тука во. Ж датотека дека сè е NSObject има Студентот исто така има. Тоа значи дека кога ќе се создаде еден студент она што јас исто така ќе треба да направите е да бидете сигурни дека NSObject дека сум наследување сите дека податоците од е иницијализиран правилно. Она што јас треба да се каже е ова супер е, всушност, се случува да се однесува на родител класа дека сум наследство од, па сакам да бидете сигурни дека се иницијализира сè што сум во зависност пред да почнете да се обидува да го користам. Потоа, ако тоа се иницијализира правилно ова е само како да кажеш ако Примерок не се врати нула тогаш може да почне поставување на некои својства. Во JavaScript и PHP имавме овој клучен збор нарекува ова, и тоа од тековната инстанца на класа. Во Objective-C ние го нарекуваме овој себе. Кога велам self.name, тоа значи дека објектот Јас само создадена кога реков студент alloc init, што се случува да ми даде назад објектот. Тоа значи дека сакате да го поставите името на тој предмет на она што јас само помина внатре Исто како и во C, ние пристап членови со оваа точка, па self.name вели дека името на ученикот објект сега ќе биде она што само помина внатре И така конечно, можам да ја вратам па јас всушност се добие нешто назад. Прашања? Океј, па ова само = супер init, ако не целосно се разбере на наследство нешта не се грижи. Само знам дека ако некогаш сакате да направите свој init метод само направи тоа, а вие ќе бидете добро да отидевме. Да. >> [Студентски] Што значи ако сте само значи? Ова значи дека кога ние Примерок нешто што ние секогаш провери дали е еднаква на нула, и ако тоа е нула, тогаш ние излезе. Ова е иста работа, бидејќи ако тоа се враќа нула, тогаш ние сме веројатно нема да сегмент вина ако почнете да се обидува да го манипулира. Тоа е нашиот студент класа. Тоа значи дека може да се иницијализира на нашите студенти во еден од два начина. Ако кажам студент alloc init јас не сум со користење дека метод што јас само напишав, и наместо тоа едноставно може да се каже alice.name, и сега ќе одам да го поставите тој имот име. Слично на тоа, ако сакам да го користат initWithName метод Јас едноставно може да се каже alloc, а потоа наместо велејќи дека init Одам да го повикате тој метод што јас само замислен, а јас одам да се помине во Боб. Во овој момент, овој објект Боб има име еднаква на Боб. Океј, тука долу Јас сум со користење дека NSMutableArray дека ние погледна порано. Јас сум распределба space.Then сум иницијализацијата нова низа. Одам да додадете 2 работи на него. Оваа низа сега поседува студент објекти. Забележи дека никаде не морам да кажам дека ова е низа на студентите. Реков тоа е низа, период. Потоа можам да се стави она што во него што сакам. Еве јас имам 2 предмети. Конечно, јас имам друг објект тука, ова ТФ. Овде во TF.h основа истото. Јас сум наследство од NSObject, и патем, кога ќе се создаде класи ова е направено за вас, овој вид на интерфејс boilerplate. Таа има сопственост на студенти. Имам неколку методи тука дека не се навистина многу, и така тоа значи дека откако ќе ја креирате оваа објектот ТФ Јас може да се јавите на овој метод одделение на тоа како оваа. Било какви прашања во Objective-C синтакса пред да почне да се врти во некои повеќе интересни апликации развој нешта? Океј, па ајде всушност направи iPhone стан. Основни класи што ќе биде со користење внатрешноста на вашиот iPhone стан се нарекуваат поглед контролори, и погледнете контролорот во основа претставува еден екран внатрешноста на вашиот стан, па ако сум на музика стан, на пример, еден поглед контролер би можеле да претставуваат поглед во кој јас ги видите сите песни на мојот iPhone. Друг поглед контролер може да биде кога ќе кликнете на песната и започнете ја репродукцијата тоа или како што јас сум дупчење долу во уметници. Секоја од овие различни екрани може да претставен како поинаков поглед контролор, и погледнете контролорот е навистина само една класа во која се вели како овој екран работи. Работи во внатрешноста на цел контролор, ние ќе треба да имаат својства, па работите како копче се случува да биде во сопственост на нашиот поглед контролер. Ние сме, исто така, ќе имаат методи, и овие се во основа настан ракувачи. Овој метод вели дека кога ќе притиснете ова копче Сакам да се направи нешто, и, конечно, повторно, ние ќе биде со користење на оваа само клучни зборови за да пристапите на тековната инстанца. Да се ​​изгради интерфејси во iOS е всушност навистина, навистина лесно. Тие имаат овој убав drag and drop интерфејс наречен интерфејс градител, и 2 основни концепти кои жица вашиот Objective-C до интерфејс градител се IBOutlet и IBAction. На IBOutlet едноставно вели дека ако се изјасни за имот кој е копче, и сакате да се кука до нешто во вашиот вистински адаптери, ви се случува да се каже дека е издувен вентил. Слично на тоа, ако сакате да претставува настан управувачот тогаш ви се случува да се каже дека е акција. Всушност да жица до овој графичко претставување и вашиот код е навистина, навистина едноставно. Ако сакате да се закачите на IBOutlet, сите што треба да направите е да ги контролирате клик, и ние ќе видите еден пример на ова е навистина брз. Вие го контролирате кликнете каде што вели Прикажи контролор. Сте ќе повлечете во интерфејсот, или обратно, ако сакате да се кука до настан управувачот си оди за да го повлечете од интерфејс во друга насока. Ајде да ги разгледаме во навистина едноставен iOS пример. Да креирате нов проект. Одам да се излезе тука до апликацијата, и јас одам да кликнете единствен поглед апликација. Одам да кликнете на Next. Ќе ти дадам мојот проект име. Јас ќе го наречеме Здраво. Интересно, Apple превзема сте создавање на производ така што можете да го продаде и тие можат да прават пари. Долу тука јас ќе одам да се каже дека ова е iPhone стан. Можете да ја креирате iPad стан, или ако сакате да се создаде еден од оние апликации дека ги поддржува двата уреди може да го направите тоа премногу. Овие се она што го сакате вашиот checkmarks да изгледа. Сакате да го користите storyboards, која што ќе видиме подоцна, и вие дефинитивно сакате да го користите автоматски референца броење, што е убаво функција која ве спречува од тоа да имаат да се каже Примерок и бесплатно. Освен ако не сакате да се јавите Примерок и слободен, јас ќе ја напушти оваа проверени. Јас ќе кликнете на Next, и конечно, ова се случува да ме прашуваат каде што сакате да го зачувате. Јас хит ќе се создаде, и тука ќе одиме. Јас создаде нов проект. Овде на лево се сите датотеки кои се внатре на мојот проект, и ќе забележите дека добив еден куп, и јас дури и не прават ништо. IOS е одлично. На пример, тука оваа ViewController.h, ова ќе претставува мојот прв поглед контролор, па првиот екран во внатрешноста на мојата стан. Сега знаеме што тоа го кажува. Ние велиме јас сум повикувајќи оваа класа ViewController, и ViewController прави сето она што UIViewController не, и оваа, пак, е некоја класа што Apple напиша дека не многу корисна работи за нас приказ на екранот. Тука е местото каде што всушност може да започне дефинирање на она што ми погледнете контролорот го прави, и излегува дека јас навистина не треба ништо од тоа. Ова е boilerplate код кој Епл ми дава бесплатно. Јас не треба дека првата линија, или јас немам класа, за да можеме да се ослободиме од тоа и да се ослободи од ова. Океј, па ова е мојот празен екран. Сега ајде да кликнете на овој MainStoryboard.storyboard, и ова е местото каде што почнува да се интересни. Ова претставува првиот екран на мојот стан. Ако сакате да додадете копче, во HTML морав да се создаде едно копче таг. Во Андроид мора да се создаде едно копче ознака, но во iOS ако јас само дојде овде на долниот десен и ако кликнете на овој 3rd еден тука, каде што вели објекти, и можам да дојдете долу, или можам да почнат да бараат за копчето. И гледам, едно копче, па ако јас всушност drag and drop ова право таму, Јас сум само додава копче за да овој екран на мојот стан. Ако сакате да го промените текстот, јас двојно да кликнете на неа, кажете нешто примамливата како "Мене Притиснете". Океј, сега, ако јас ја стартувате овој стан, па ние го состави, па за да го стартувате јас кликнете на копчето за изведба во горниот лев агол, и тука е мојот стан. Јас не направив ништо, а добив слатка бараат iPhone стан. Ако сакам да го спречи тоа, можете да кликнете на стоп копчето затоа што тоа е повеќе забава. Да речеме дека јас всушност сакаат нешто да се случи кога ќе притиснете ова копче. Да го направите тоа што треба да направите е да ми треба да се создаде нов настан управувачот или акција. Тоа значи дека јас треба да се создаде некои метод што јас сакам да се нарече кога ќе притиснете на копчето, па ајде да се создаде нов метод. Јас сум внатрешноста на ViewController.h. Јас треба да се каже дека метод постои. Ми треба цртичка прво затоа што јас ќе одам да се повикуваат тоа на гледање контролер. Јас треба да се даде овој тип. Типот на ова ќе биде дека IBAction нешто што сме го виделе порано. Ова е настан управувачот, па затоа се случува да се вратат IBAction, и ова е навестување за Xcode да се каже дека ова е нешто што сакате да жица нешто да. Јас може да го даде името, како buttonPressed, запирка. Сега сум прогласен за нов метод во внатрешноста на мојата класа. Сум рече овој метод мора да постои. Сега ајде да дојде во ViewController.m, и да речеме она што овој метод може да се направи. Ако јас почнете да пишувате, на пример, (празно) buttonPressed известување Xcode е навистина убаво и autocompletes за мене. Тоа е навистина прекрасно. Забележи дека во внатрешноста на. M датотека Јас, исто така може да се каже празнина, и ова е поради тоа што IBAction всушност и не е тип. Тоа е всушност hashtag дефинира некаде да биде неважечки, и повторно, ова е само навестување за Xcode која вели Сакам тоа да биде настан управувачот, а ние ќе се види зошто во само една секунда. Кога ова копче е притиснато јас ќе одам да направите нешто досадно како прикажување на скокачки прозорец. Да го направите тоа може да создаде нова инстанца на оваа класа наречена UIAlertView, и ова е една класа дека Apple напиша дека се случува да се прикаже досадни скокачки прозорци. Ние ќе го наречеме овој скокачки алармирање, и имам 2 чекори, се сеќавам, за создавање на овој објект. Првото нешто што треба да направите е да одвои простор. Сакам UIAlertView. Сакам да одвои простор. Тоа е мојот прв метод. Мојата следна метод е сакам да го иницијализира, и така имам оваа голема, долга метод наречен initWithTitle. Тоа е во основа ќе го контролираат она што овој скокачки вели. Насловот на мојата скокачки може да биде здраво. Пораката на овој скокачки може да биде "Ова е iOS." Делегат нешто, не знам што е тоа. Да речеме дека тоа не е ништо. Сега копче што се случува да се појави може да се каже нешто како "Навистина е" и јас навистина не сакам никакви други копчиња, па ајде избришете и да го затворите заграда. Океј, јас создаде дополнителна еден. Таму ќе одиме. Ова е како јас да креирате нов скокачки прозорец. Ако сакам да всушност покажуваат скокачки Сакам да се јавите на шоуто метод. Да го стори тоа можам да кажам алармирање и шоу, и повторно, AutoComplete беше супер убаво. Ако сум заборавил она што беше, ако јас само ја внеле во с, Јас може да дојдете преку тука за да дознаам што е тоа, и филтри убаво. Сега јас создаде оваа нова скокачки прозорец. Ние ќе се вратам на она што делегат значи подоцна, и сега сакам да кажам сакам овој метод да биде отпуштен од работа кога ќе притиснете на копчето, па ќе одам да се вратам во мојата сценариото, и јас сакам да сега прикачите овој IBAction. Првото нешто што сакате да направите е да кликнете на копчето. Кога ќе притиснете ова копче Сакам нешто да се случи. Јас не одам да го држите контрола. Одам да кликнете и влечете од копчето до над тука, каде што вели Прикажи контролор. Можеме да видиме дека тоа убаво пали. Ако јас да одам со мојот глушец јас сега ја имаат оваа скокачки овде каде што има некои опции. Еден од нив е настани што ќе можам да се регистрирате. Овие се сите оние методи изјавив во мојата ж фајл како IBActions. Ова е како Xcode знае што треба да се појави во оваа мала листа, па тоа е само навестување. Ако јас кликнете на копчето притиснато, јас сум сега регистриран настан управувачот. Во JavaScript моравме да кажам дека има некои код кој регистрирано настан управувачот. Во Objective-C е навистина толку лесно. Ако јас ја извршите оваа повторно сега кога ќе притиснете на копчето мојата настан управувачот ќе оган, и јас одам да се добие овој скокачки прозорец. Супер, супер едноставен таму. Ако некогаш сакате да ги видите сите настани што се случуваат да се регистрираат на некоја компонента ако јас кликнете на ова копче за и јас доаѓам овде на десната страна Првиот можете да видите овде можам да ги правите нештата како типот на копче, па ако сакате еден од оние јас или додадете контакт копчето или whatever. Ако сакате да ги видите сите настани што се на ова копче за ако дојдам целиот пат над тука за да на десната страна можеме да видиме тука на настани имам сите овие различни настани. Можам да притиснете го копчето, кога јас нека одат на копче, кога ќе се зголеми двојно допрете или што, и една јас само регистрирани е овој настан наречен допир одвнатре, и ова вели дека веднаш штом мојот прст доаѓа надвор на копчето тој случај ќе оган, а тоа е токму она што едноставно се случи. Ова е вид на стандардно копче притиснато настан. Било какви прашања досега? Океј, тоа е како можеме да почнеме да жица до нешта во нашиот код во работите во внатрешноста на нашите интерфејс. Се сеќавам на првото нешто што мораше да го направи беше да се најде на кодот, и тогаш жичен до интерфејсот на кодот, и таму е нашиот прв стан. Океј, тоа е навистина кул, и ние направивме ова копче. Што ако не сакаме да мора да се создаде еден куп на имот претставуваат овие копчиња? На пример, во Tic Tac Toe имам 9 копчиња, и тоа би било супер, супер досадни да имаат да drag and drop 9 пати или ако морав да се направи Tic Tac Toe со 81 наместо од 9 и морав да drag and drop 81 пати, и тоа е несмасен. Што да правиме, наместо да е многу сличен со HTML- кога имавме нешта како лични карти и имиња, а ние може да пребарувате за работите од страна на нивните проект, таму е слична идеја во iOS наречени тагови. А таг е едноставно уникатен нумеричка ознака за компонента. Ако кажам ова има ознака на 0, на пример, ако јас се создаде едно копче и го даде ознака на 0, а ние ќе видиме како да го сторат тоа во само една секунда, ако сакам да се добие тоа копче јас едноставно може да се каже дека сакате да го повикате на viewWithTag метод на објектот над тука, на self.view, што претставува сегашната екран, на пример. Ако јас го нарекувам дека viewWithTag метод, јас одам да се повлечат на копче со таг 0. Ајде да ги погледнеме во овој од зградата Tic Tac Toe. Прво, ова е мојот сценариото. Јас направивме овие 10 адаптери копчиња. Забележите сите тие се со иста големина. Ако јас кликнете на еден од овие и ќе се вратам овде за овој десната страна ќе видите јас прилагоди на фонтот токму тука, па сум направил на фонтот малку поголеми, но она што исто така не бев го поставите на овој таг. Реков дека ова има ознака на 1, и тоа е горниот лев агол. Сега, ако јас кликнете на друго копче, како овој вториот тука, сега ќе видите дека мојот таг е 2. Секој од овие копчиња само има единствена ознака, и така ова е подоцна како Одам да се започне интеракција со мојот стан. Ова е сите во еден поглед контролор, но тука е она што го имаме. Имаме 3 имот тука. Првиот и последниот се случува да ја претставуваат државата на мојата табла. Во суштина ова Првиот е низа претставуваат каде Xs и оперативен систем се. Овој другиот тука ни кажува кој е на потез. Ќе забележите дека исто така имам овие работи тука. Пред кога ќе прогласи својства ние им даде име и тип. Ние, исто така може да им даде некои дополнителни информации тука. Оваа прва вели nonatomic, и што тоа вели е во основа само едно нешто некогаш ќе се обидуваат да пристапите на оваа променлива во исто време. Вие би можеле да направат повеќе комплексни апликации кои се мулти-навој, и така назад во Скреч имавме различни теми, и различни sprites може да се прават различни работи во исто време. Ако тоа не е случај, што не е во нешто што ќе се гледа во, ако се каже nonatomic тоа е всушност се случува да се направат работите малку побрзо. Ние исто така имаат тоа нешто наречено додели, силна или слаба. Ова додели само вели дека ова е стандарден тип. Ова не е некој предмет или покажувач, бидејќи ова е само bool, па bool е изграден во Objective-C. Ова се вели не се обиде да направи нешто фенси со покажувачи тука. Тоа е редовна стари скалар. Јаки и слаби страни, ова слаби вели дека всушност Сакам ова да се укажува на нешто во поглед контролер. Јас не одам за да всушност доделат или init оваа себе. На интерфејс градител, кога ќе се кандидира на стан, ќе се справи со сето тоа иницијализација. Ако кажам слаби, во која се вели некој друг ќе биде создавање на ова. Ако кажам силна, овој вели дека ќе одам да биде еден тоа е создавање на овој форум објект, и така тука имам некои повеќе методи тука, на пример, акција за кога новата игра копчето е притиснато, акција за кога било која од другите копчиња се притиснати, и така натаму. Ние нема да навлегувам во премногу на логиката на Tic Tac Toe, иако тоа е многу возбудливо, но ајде да ги разгледаме во некои од работите што можеме да направиме во внатрешноста на iOS. Оваа нова игра метод ќе биде отпуштен од работа кога ќе притиснете на нова игра копче. Да се ​​кука дека до јас едноставно дојде во текот на мојот сценариото. Јас кликна на нова игра. Ако дојдам овде на правото можам да видам дека Допре до внатрешноста е жичен до newGame метод. Тоа е зошто тоа се случува да добиете отказ. Методот newGame се случува да се направи некои воспоставен. Тоа се случува да се каже сакам да се расчисти состојбата на одборот. Ова е еден убав метод на променливи низи. Ова се случува да се каже дека е сега пак на X, и сега ќе одам да ги искористат предностите на овој viewWithTag работа. Знам дека моите копчиња имаат тагови 1-9, и тоа е нешто што произволно бере. Ако сакате да го поставите на текстот на секоја копче за да биде празна бидејќи јас само што почнав нова игра и јас не сакам никакви XS или OS да бидат оставени во текот можам да го направите тоа. Можам да кажам сакам погледот со ознака, 1, 2, 3, 4 итн. Ова ќе повлече различни копчето секој пат. Еве јас ќе одам да го фрли UIButton. Исто како и ние би можеле да дадат ints да плови и обратно ова вели дека сакам да го дадат овој на UIButton. Тоа значи дека од типот на ова ќе биде * UIButton поради покажувачи, но не грижете се, тие не се страшно повеќе. Еднаш имам ова копче ќе одам да се јавите на метод на неа. Овој метод е наречен setTitle forState, па така ова вели Сакам да го поставите на текстот на копчето за да биде празен стринг, и сакам тоа да биде празен стринг кога тоа не е притиснато. Ако јас сум со користење на овој метод, можам да го променам текстот на копчето штом некој ќе се појави, но ние сакаме да се каже кога копчето е само седи таму Сакам текстот да биде празно. Конечно, ние ќе треба да се иницијализира мојот одбор, и јас одам да се каже дека сè е во моментов на 0, па ова членови на одборот непроменлива е непостојана низа, што значи дека може да се јавите на addObject метод и само 0 во него. Тоа е она што се случува кога ќе се создаде нова игра. Ајде да ги разгледаме во уште еден. Оваа метода е IBAction што се случува да се притисне секој пат кога една од тие квадрати е притиснато. Сега имаме некои Tic Tac Toe логиката тука. Ние дознаам кој е на потез, и врз основа на тоа ние или постави X или О, но ние се забележи дека ние сме повторната употреба на истиот настан управувачот за секој еден од оние копчиња. Тоа значи дека немам метод за врвот левото копче, различен метод за долниот десен копче, иако јас би можеле да имаат направено тоа. Тоа навистина не би било добар дизајн. Што правам тука е Јас сум, всушност, ќе се утврди што етикетата на копчето што била притисната е. Ќе забележите дека оваа претстава метод ги зема еден аргумент. Таа се вика испраќачот, и она што испраќачот е е испраќачот ќе претставува токму она што беше донесена акција врз. Ако јас притиснете копче, овој испраќач се случува да биде дека UIButton дека јас всушност притиснато, па тоа значи дека дека UIButton има таг, бидејќи јас создаде таг. Ако сакате да добиете на таг јас едноставно може да се каже Сакам ознака на испраќачот, и повторно, јас сум само тоа отливат на UIButton. Јас се случи да знаете дека испраќачот ќе биде UIButton. Тоа не мора секогаш да биде UIButton. Јас би можеле, на пример, се регистрирате истиот настан управувачот  за една за едно копче, за една лизгачот. Во овој случај, знам дека тие се сите копчиња, па ќе одам да се каже Сакам ова да биде едно копче, а потоа можам да добијам ознака, и од таг Јас сега знам каде сум внатре на таблата. Тогаш јас едноставно може да се постави или X или О, да флип преминот, провери кој го освои, и така натаму. Било какви прашања на оваа досега? Океј, сите го кодот ние објавени на интернет-ние не сакаме да се влезе премногу на Tic Tac Toe логика, но сега може да се види дека навистина сите ние сме прави е ние сме looping преку оваа низа, па ние имаме неколку за петелки тука, а ние сме само споредување да ја видите имаме еден натпревар во сите редови, еден натпревар во колона или нешто слично. Всушност да работи оваа апликација, ако допрете на еден од овие копчиња дека игра метод беше отпуштен, па тоа значи дека јас само го поставите го копчето за да биде Х, па сега ова копче ќе биде О, и така натаму, и така тоа е како ние сме почнуваат да комуницирате со оваа единствена страница стан. Ние ќе ја објавите на кодот, па можете слободно да внимателно тоа, но ајде сега се зборува за некои апликации кои се повеќе од само една страница. Како возбудлива како Tic Tac Toe беше, многу апликации во внатрешноста на iOS се вид на овие разбивка работи со повеќе екрани. Првиот концепт што ние ќе треба да се зборува за се протоколи, и протокол е само збир на методи дека може да ветување да се дефинира. Ако јас се создаде овој нов протокол со 2 методи, овој првиот, ако враќањето тип е неважечки, го нареков foo. Таа ги зема без аргументи. Јас имам друг метод. Го враќа int. Јас го нарече бар, и тоа трае еден аргумент. Сите овој протокол е дека се вика SomeProtocol се тука, Ова е збир на работи кои некој може да се спроведе. Не сум во внатрешноста на овој протокол рече дека она што foo го прави тоа. Наместо тоа, јас сум само велејќи дека би можеле да се дефинираат foo ако сакате да. Ако сум создавање погледнете контролорот или создавање класа Можам да во внатрешноста на таа класа ветување за спроведување на некои од овие методи, така на пример, ако се каже ова сега вели дека јас сум одлуки ветување да ви дека внатре на овој став контролер класа I ќе имаат дефиниции за двата foo и бар. Зошто е тоа корисно? А многу компоненти во внатрешноста на iOS ги искористат предностите на овој дизајн модел наречен делегација, а што делегацијата вели е дека, на пример, ако имам полето за текст и постојат некои настани кои би можеле да бидат регистрирани во внатрешноста на мојата поле за текст, наместо создавање на посебни настани што можам да направам е да кажам делегат на овој текст ќе биде некој предмет. Кога велам дека ова е еден делегат сега тоа значи дека секогаш кога некој настан би биле истрелани во полето за текст наместо да се регистрирате или нешто слично тоа е само случува да повикаш метода на делегатот. На пример, во внатрешноста на мојата полето за текст имам метод за кога ќе притиснете тоа направено копчето во долниот десен, и така наместо регистрирање настан управувачот она што можам да кажам е поле за текст, тука е објект што сакам да повикаш метода на секој пат кога некој притиска направи копче, а тоа значи дека тој објект мора да спроведе некои протоколот кој вели дека јас ветувам дека ќе се дефинира дека направиле копчето акција, бидејќи ако тоа не се дефинира дека методот и ќе притиснете направи, тогаш тоа ќе биде збунувачки. Ајде да ги погледнеме еден пример. Еве јас едноставно имаат еден текст, и еден од својствата на овој текст овде на оваа десната страна е делегат. Ова е имотот на класата. Она што го правеше тука е јас контрола кликнато, а јас влечени од ова место овде до погледнете контролорот, и кој се вели дека сега делегат на овој текст полето ќе биде погледнете контролорот. Тоа значи дека кога некои активности се случи, отколку регистрирање посебен настан ракувачи сакам да ги испрати до делегат. Сега ајде да ги разгледаме во мојот поглед контролер. Внатрешноста на. Ж датотека сум даде ветување. Сум вети дека ќе спроведе некои методи во внатрешноста на овој протокол наречен UITextFieldDelegate, и повторно, ова е само дел листа на некои нешта што може да избере да се имплементира. Ако дојдам овде во мојата. M датотека, јас се спроведува еден таков метод. Сум го нарече textFieldShouldReturn бидејќи тоа е она што беше наречена во внатрешноста на протоколот. И сега, кога го притискам направено копчето внатре во тоа полето за текст ова е она што се случува да се нарекува, па јас не се регистрирате настан управувачот. Јас поврзан на делегат, и секогаш кога овој настан е отпуштен ова е метод кој ќе се нарекува, па ако дојдам овде во мојата сценариото и да ја стартувате- Иако тоа е вчитување можеме да видиме што тоа го прави. На мојот екран имам 2 работи. Имам овој текст поле, и имам оваа етикета. Јас сум едноставно велејќи сакам текстот на оваа етикета да бидат еднакви со она што корисникот внесе во внатрешноста на полето за текст. Овој следната линија, тука е само метод што јас го повикувам на полето за текст кој се вели дека сакам да се сокрие тастатурата. Ова е само произволна метод што Епл ја избрале. Повторно, пред мене ништо морав да жица сето горе, па јас прв пат дојде овде. Од гледна контролер Јас повлечете во текот на полето за текст. Јас нека оди, и јас може да се види дека тука можам да направам овој полето за текст имот бидејќи овде во поглед контролер сум дефинирани имот кој е IBOutlet на полето за текст. Ова се вели дека можам да жица овој имот до на полето за текст во мојот адаптери. Сега кога ќе кликнете на ова можам да почнете да пишувате. Сега, ако јас кликнете на направено копчето ова ќе се отпушти настан кој би можел да одговори. Не настан ракувачи. Тоа е како јас само одговори дека направи копче. Смисла? Ова не е дизајн на моделот што-не секогаш може да се најдат себе си создавање на свој протокол, но само знам дека некои различни iOS компоненти регистрирате настани на различни начини. Копчињата, на пример, ги користат овие IBActions. Текст полиња, од друга страна, се случува да го користите делегати. Можеме да видиме и можете да барате сето тоа во внатрешноста на документацијата. Патем, таму е всушност еден тон на графичката околина работи вградени во iOS за вас, Така на пример, начинот на кој сум направил, кои велат дека направиле во долниот десен се избрани од мене овој текст полето. Јас дојдов овде. Јас дошле по малку да се вратат клуч, и јас всушност може да направи овој еден куп работи, како и ако сакам тоа да се каже итен повик наместо тоа да го направите тоа, што е сосема случаен, и јас не знам зошто има вграден во итен повик копче, но, таа вели итен повик во навистина мали букви. Таму да одите. Дефинитивно истражуваат сите овие различни опции во iOS. Било какви прашања на делегатите? Повторно, само интересен дизајн шема дека треба да бидете свесни. Океј, ајде следната погледнете во табелата пати. А табелата поглед во основа е дека листата на предмети што е насекаде во iOS. Кога сте нервира преку сите ваши контакти, барате на поставување на страница, и тој вид на листа на работи кои се нарекува табеларен преглед. Спроведување на табелата поглед во iOS е прилично едноставна. Наместо за правење на класа што се спушта од кои UIViewController како што го направив пред ние едноставно треба да се каже отколку сето UIViewController не сакам да се направи, Велам сето UITableViewController не сакам да се направи, така што едноставно додава некои дополнителни работи кои се целосно направено за нас. Ние треба да се направи многу малку за да во основа се пополни во празни места во внатрешноста на табелата. Со цел да се прикаже табела треба да одговорите на некои прашања. Првото прашање што треба да се одговори е колку делови се во табелата? Кога сте нервира преку вашите контакти стан ќе забележите дека тоа е вид на организирана од страна на Како, тогаш имате БС, и имаш дека малку под заглавието. Секоја од овие се нарекува секција. Вие може или не може да се стави овие. Првото нешто што треба да направите е да се спроведе метод наречен tableView: numberOfSectionsInTableView. Тоа едноставно се враќа како многу делови што треба, така што ова може да се каже да се врати еден ако имате една голема маса поглед. Следното прашање што iOS треба да знаете е колку редови имате? На пример, ти си нервира преку табеларен преглед. Имате фиксен број на песни барате или фиксен број на контакти. Ако сте ме, се разбира, тоа не е многу, и така тоа е како iOS знае колку клетки за прикажување. Повторно, ова би можело да се каже нешто како враќање 3. Мојата маса поглед има 3 реда. Конечно, iOS треба да знае што секоја клетка изгледа, така што тоа всушност се случува да направите е да се јавите на овој метод тука долу, овој tableView: cellForRowAtIndexPath. Тоа се случува да се јавите на овој метод на секој мобилен внатрешноста на вашата маса. Како тоа знам колку пати да го наречеме? Па, ти го кажа внатрешноста на бројот на редови во секција. Ние ќе се јавите тоа на секој од нашите клетки, и во внатрешноста на ова е местото каде што всушност може да ги правите нештата како постави текст или ви кажам што тоа малку сино копче на десната страна го прави тоа. Моделот за добивање на овие клетки, ние ќе го користите овој метод наречен dequeueReusableCellWithIdentifier. Objective-C е всушност многу добро познат за смешно должината на нивниот метод имиња, и ова е навистина убаво случај во точка пример. Што овој метод не е тоа само вели дека сакам да ми даде ќелија. Само нешто iOS. Ако имате нешто како 100,000 песни на вашиот iPod што iOS не сака да направите е да одвои 100.000 клетки, бидејќи ако сте на врвот на својата листа, дали навистина треба да се алоцира меморија за мобилен тоа е 99.000 редови надолу? Не, затоа што ти си лизгање можете вид на одвои како што одиме понатаму. Ова е направено за вас. Вие не мора да се грижите за сето тоа глупаво перформанси нешта. Се што ви го кажам е да ти се јавам овој метод dequeueReusableCellWithIdentifier, и ова вели, добро, ако треба да одам да се создаде нов мобилен за вас. Но, ако сте на дното на табелата и веќе сте доделени некои клетки на врвот на табелата дека сте навистина не ќе треба во скоро време Одам да ви даде еден од оние назад, наместо доделување на нова, и така ова е убаво перформанси загриженост. Вие не мора да ги распредели клетки себе. Тоа ќе ви даде назад ќелија. Тоа се случува да се вратат да ви мобилен објект. Откако ќе имаат мобилен објект можете да направите нешто за неа. Можете да го поставите на текстот на ќелијата со овој имот се нарекува текстуална ознака. Можете да додадам дека стрелка на десно или некои други случајни нешта со овој друг имот наречен accessoryType, и така натаму и така натаму. Ајде да ги разгледаме во всушност имплементирање на табелата поглед сега. Кога Јас создаде овој проект наместо велејќи дека единствен поглед апликација Јас всушност дојде тука да го совладате секој детал апликација, и така во основа тоа одговара на пошта стан на iPad со табеларен преглед на левата, а потоа на содржината на правото. На iPod или iPhone ова ќе одговараат на една маса поглед. Тоа е каде што добив мојот стартер код. Ајде прво да погледнеме на сценариото. Сето ова беше направено за мене, во основа создадена. Оваа лента за навигација ми го покажа она што на пример мобилен може да изгледа вака, и јас двојно да кликнете на ова, промените насловот. Било која друга адаптери дилеми што може да се справи таму. На хедер датотека изгледа навистина едноставно. Наместо велејќи дека ова е UIViewController ние сме сега велејќи дека ова е TableViewController, па знаеме дека сакате да го повикате сите оние маса методи. Следна јас сакам да се создаде имотот што се случува да претставуваат работите во внатрешноста на мојата маса. Оваа табела ќе произволно прикажување листа на овошје, и така јас треба да се создаде некои низа во која можам да вметнете овошје. Внатрешноста на мојата имплементација датотека првото нешто што сакате да го направите е сакам да бидете сигурни дека го иницијализирате овој низа. Реков alloc init, создадени ми овошје низа, и јас сум додавајќи 4 нешта за неа, една од кои е многу контроверзен од другите 3. И сега имам низа на големината 4. Ние сме го тресе во CS50. Јас сега имаат низа на големината 4. Сега ќе одам да почнат одговор на овие прашања, а всушност, кога Јас создаде овој стан сето ова е веќе направено за мене. Јас не мора да го пишувате од бројот на деловите во табеларен преглед. Тоа веќе беше таму, а јас сум пополнување на празни места. Колку секции имам? Една. Сето тоа е направено. Колку редови имам? Па, јас имам еден ред за секое овошје, така што ова брои е сопственост на било низа во која се вели колку е голема е тоа? Тоа е колку редови имам. Конечно, јас треба да се каже она што не секоја клетка изгледа? Одам да се каже dequeueReusableCellWithIdentifier. Повторно, ова е веќе напишано за мене. Јас не треба да го направите ова од мене, и јас сакам да се вратам овој мобилен на оваа локација. Запомнете дека ние сме повикувајќи овој истиот метод на секоја ќелија, и овој аргумент тука, овој аргумент indexPath, вели дека она ред јас сум внатре Ако кажам indexPath.row овде ова ќе биде 0, тогаш тоа ќе биде 1, тогаш тоа ќе биде 2, а тоа е така знам што мобилен Јас сум во моментов прикажување. Сакам да го поставите на текстот на мобилен користите овој имот textLabel да одат во внатрешноста на мојата овошје низа и да се објектот што одговара на секој ред. Ако ова е стринг, јас сум сега поставува текстот на имотот во стринг. Можам да направам една друга работа. Јас, исто така можете да се регистрирате настан управувачот на секоја од ќелиите, па кога ќе допрете секоја од овие клетки овој didSelectRowAtIndexPath, ова се случува да бидат повикани за мене, толку едноставно, преку дефинирање на тоа јас сега може да се справи со она што се случува Кога ќе го допрете ќелија, и повторно, ние сме минува во која ќелија беше избран така што можеме да повторна употреба на истата оваа настан управувачот за сите наши клетки. Повторно, ова е нешто iOS го прави за мене. Да се ​​прикаже друг досадни скокачки кои едноставно вели дека собрал нешто каде што нешто ќе биде на ред објектот. Кога ќе ја извршите оваа, јас ќе одам да ја имаат оваа убава маса поглед со еден ред за секоја од овие плодови, и ако јас се приклучи една тоа ми кажува што се случило. Смисла? Да се ​​изгради малку повеќе комплекс на стан, колку што е кликање што сте го одбрале домати е. На убав дел за storyboarding е тоа не е само ќе ни помогне да дизајн екрани поединечно, тоа е, исто така, ќе ни помогне да се врзува заедно целата наша стан, па конечниот стан ќе биде зграда е ова убаво спортско читач на вести, и така тоа се случува да имаат повеќе екрани, и така јас всушност може да претставува секоја од овие повеќе екрани на сценариото, и јас да зумирате и да видиме мојот стан од високо ниво. Со цел да се создаде нов елемент во внатрешноста на мојата сценариото тоа е навистина едноставно внатрешноста на интерфејс градител. Ако сакате да додадете уште еден екран на ова, на пример, Јас прво да одзумирате со нотка зум дека Apple сака толку многу, и овде пред да барате копчето и јас drag and drop на копчето ако сакате да креирате нов екран можам да всушност само drag and drop целиот поглед контролор, па ако јас земам тоа, се повлече во текот тука, еј, има уште еден екран, па сега со користење на овој ист сценариото датотека Јас може да имаат сите на екраните во внатрешноста на мојата стан, и можам да одзумирате и да видиме како тие комуницираат. Овие не ќе комуницирате уште. Начинот на кој овие 2 екрани комуницирате е да се дефинира односи. Вие во основа може да се каже овој екран, кога ќе притиснете на ова копче, Сакам да слајд во текот на овој нов екран. Тоа значи дека е овој вид на односот помеѓу  на првиот екран и вториот екран. Ќе мора основа стрела од тоа копчето за втор екран велејќи дека кога ќе го притиснете ова копче тоа е каде што сакате да одите. Исто како и ние го контролираме кликнато и влечени да се дефинираат овие локалитети ние ќе го прават истото да се дефинираат овие segues. Ќе видите еден пример за тоа, и пред ние всушност транзиција од еден екран на друг iOS е фино да се јавите на овој метод наречен prepareForSegue, и ова е местото каде што може да почне испраќање на податоци од еден стан на друга. Во примерот ние сме за да се погледне во тоа во основа ќе ни овозможи да ги филтрираат бејзбол тимови со лиги и поделби. Кога ќе изберам лигата, на пример, сакам да транзиција на мојот следниот екран каде што може да се прикаже и сите поделби во таа лига или сите различни тимови. Ми треба за да го испратиме дека екран што тимовите треба да се прикаже. Да го направите тоа, ќе одам да ги искористат предностите на овој метод тука. Конечно, само случајна точка на iOS. Ако сакате да го зачувате податоци, тука е тоа нешто што се нарекува основни податоци, кој е всушност вид на комплицирано да се работи со. Можете исто така да користите SQL за чување на податоци, која, пак, е убаво, но вид на основа на повеќе комплицирано страна да работам со, но iOS, исто така, ги поддржува овие навистина кул работи вика имотот листи, и имотен лист е само датотеката која претставува клучна вредност парови. Вие го дефинирате листа на клучеви, и да се каже ова копче ќе биде низа. Овој клуч ќе биде стринг, и во основа ништо што можете да направите во JSON можете да направите внатрешноста на имотен лист, и така ова навистина убаво ни овозможува да работиме со некои податоци. На пример, имам оваа Teams.plist дека сум замислен. Јас создаде нов plist датотека, и можам да разбивка. Ова е речник, ова е речник, овие се стрингови, и така ова е убаво графичко претставување на документ JSON или само збир на клучни вредност парови, па така ова е податокот дека ќе се работат со внатрешноста на мојата стан. Ајде прво да дојди. Ние имаме многу повеќе датотеки сега. Но ајде прво дојди на сценариото. На сценариото тука-ако можам да одзумирате- ние сега може да се види дека ова е протокот на мојот стан. Јас сум прв ќе започне на овој екран. Одам да разбивка на овој екран, и јас одам да разбивка на овој екран, и може да се види тука дека ако јас вид на се движат еден од овие околу имаме овие стрели одат од тука до тука, и начинот на кој јас се дефинира дека arrow беше ако зумирате малку, и ако дојдам во текот на оваа погледнете контролорот, и тука е мобилен, а јас сакам да кажам дека кога ќе допрете на мобилен Сакам да слајд на друг екран. Јас едноставно да го држите контрола, дојдете во текот на еден малку, држете контрола, повлечете оваа ќелија одново и нека одат. И овде велиме што е транзиција што сакате да го користите? Дали сакате да го користите дека слајд нешто што се вика притисок? Дали сакате да слајд од дното? Тоа се вика модален. И еднаш ќе кликнете на еден од овие, тоа се случува да се подготви оваа стрелка за мене, а тоа значи дека јас сум всушност се ракува она што се случува кога ќе притиснете ова копче графички. Јас не пишувам кодот за да всушност слајд од еден екран на следниот. Јас дефинирани ова визуелно внатрешноста на интерфејс градител. Ако јас кликнете на овој стрела, можеме да видиме дека дадов оваа работа името. Јас го нарече showDivisions, а тоа е, така што можам да знам што транзицијата е за да се случи, и ние ќе се види зошто во само секунди. Тоа е како јас сум жичен до различни екрани во мојот стан. Ако ова беше едно копче, на пример, наместо маса поглед, Јас може да контролира кликнете на копчето, повлечете во текот на следниот екран, и тоа е како јас да направам за навигација на тој начин. Навистина брзо, ако доаѓаме во MasterViewController, повторно, ние едноставно ќе се дефинира листа на работи која ќе биде прикажана во табелата видите. Еве јас велам дека сакам да се земе дека plist датотека, и сакам да го натоварите во речникот, и штом еднаш ќе го имаат тоа речник, јас ќе одам да одговори на истите прашања повторно. Тука е број на секции. Еден, постои еден ред за секој лигата, а текстот на секоја ќелија треба да биде или првиот, првата лига, втората лига, и така натаму. Конечно, јас одам да се користи овој метод дека ние само видов наречен prepareForSegue, и ова е метод кој нема да биде отпуштен од работа кога ќе кликнете на на една од оние редови и затоа активирање дека транзицијата што се постави со стрели. Ова е велејќи дека можам да имам повеќе односи од еден екран на друг. Ако имам 2 копчиња и секој копче ве носи на различни екран Одам да имаат 2 segues, 1 за секоја копче. Но, ова prepareForSegue е, пак, ќе бидат пренаменети за секој од различни односи, па тоа значи дека јас треба начин за идентификување ако притиснете првиот копче или притиснете вториот копче. Се сеќавам кога дадов дека segue име, ова showDivisions, тоа е како јас сега знам дека ова е segue, кој беше активиран. Сите сакам да направите е да сакам да кажам Сакам да дознаам што јас само кликнете, и така да се добие тоа, можам да кажам сакам indexPath за избраниот ред, се сеќавам на indexPath само вели каде што само кликнато, а потоа сакам да кажам сакам да дознаам каде ќе одам. Ова destinationViewController, тоа е сопственост на segue. Тоа е екран ќе одам да, па знам дека на екранот ќе одам да се нарекува DivisionsViewController бидејќи јас создаде таа класа, па сега ако кажам d.divisions Јас сум сега поставување на сопственост на погледот контролер јас сум за да одам. Ова е како јас сум испраќање на податоци од еден екран на друг екран. Само гледајќи во тоа DivisionsViewController можете да видите дека овде во. ж датотека таму е дека имотот поделби, и тоа е она што јас сум во основа населувањето, па тоа е како јас знам дека сум прикажување на поделби кои одговараат на лигата што јас кликна, и повторно, вистинските маса поглед изгледа прилично многу исти, само одговарање на оние 3 едноставни прашања, како и идентификување на што се случува кога ќе се преселат во следниот екран. Само неколку други работи овде. Ќе забележите на врвот тука дека наместо велејќи # include Јас сум сега велат # увоз. Ова е само Objective-C работа. Увозот во основа е поубав верзија на вклучуваат, и на пример, треба да знаеме што оваа класа е, па јас не може само да се каже DivisionsViewController. Ако ние не hashtag standardio.c внатрешноста на нашите. В датотека компајлерот немаше поим што printf беше. Слично на тоа, ако не увоз на DivisionsViewController компајлерот навистина нема поим што претставува DivisionsViewController е. Само бидете сигурни дека во внатрешноста на вашиот различни. M датотеки да бидете сигурни дека за увоз соодветните. ж датотеки, така што на компајлерот не знае што се случува. Конечно, она што Apple конечно не се прикаже некои податоци со користење на веб поглед, и така на веб поглед е објект во кој можете да го вградите малку веб прелистувач во внатрешноста на вашиот стан. Се што треба да направите е да обезбеди URL-то на вашиот веб пребарувач, па сакам да одам во mlb.mlb.com, и ова е како можам да пристапите на почетната страница за секој тим, и така со донесување на овој URL веб поглед може да се прикаже оваа за мене, а јас да ја разгледате наоколу, и симулатор е во употреба од страна на оној. Сега ова дојде од мојата plist. Ако јас кликнете на ова ова, исто така, дојде од мојата plist, и оваа лизгање беше постапува со дефинирање на оние segues. Јас кликнете на ова и уште еден, а сега тука е мојата UIWebView, па исто како што тука е веб-сајт за рачно дека само вградени, и јас не треба да се справи со нешто лудо. Ова е како да се прикаже веб-страница. Вакви работи копчето за враќање назад тука се исто така дадени на мене тотално бесплатно, бидејќи јас сум дефинирани овие односи користење segues. Било какви прашања? Да. [Студентски] Па кога ќе го користите alloc, никогаш не треба да се ослободи нешто? Точно, кога ќе се јавите alloc и init не мора да го ослободи. IOS ќе се справи со сето тоа за вас. Тоа е прекрасно, а вие не сте кршење на правилата. Да. [Студентски] Ако сте биле да се вклучат повеќе екипи кои би можеле да ги собере на екранот, би го автоматски имаат дојдете опција, или е тоа нешто што треба да се додаде? Точно, ако имав повеќе тимови, на пример, тој автоматски ќе се справи на лизгање за мене, и сите перформанси проблеми со огромна маса се постапува целосно за мене. Други прашања? Сите овој код се случува да бидат објавени. Ние вид на површно разгледана малку повеќе ситни детали, но работи како поставување на некои својства на веб поглед се само нешта што може да се добијат со прелистување документација на Apple, што е навистина, навистина убаво уреден. Тие имаат многу мостра апликации и пример примени на различни API-јата, па дефинитивно внимателно оние ако можеш. Само некои корисни линкови можеби ќе сакате да ги погледне. Ова се некои практични документација водичи. На адресите се масивни, па тие се скратени. Овој првиот е целата библиотека на документација. Има малку пребарување барови, па ако почнете да пишувате копчето ќе почне кои ви даваат сите информации за сите работи што можете да направите со едно копче. Јас сум исто така вклучени во Табела Прикажи Програмирање Водич. Тоа се справува маса пати во многу повеќе детали, како да ги правите нештата како динамички додадете клетки или уреди клетки или да ги отстраните. Има многу на примерок апликации од Apple кој ќе ви покаже како се прави тоа, и конечно, ова последново е човечки интерфејс насоки, и ова е во основа на некои дискусија за UI компоненти, работи како не прават копчето тоа е 4 пиксели од 4 пиксели. Тоа е лоша идеја, и други работи кои Apple сака да направи да се поттикне добриот дизајн. Последни прашања пред да завршам? Добро, дефинитивно се чувствуваат слободни да-we're случува да имаат посебни етикети на Дискутирај. Ќе имаат iOS еден, па дефинитивно се чувствуваат слободни да користат тоа. Ако сакате да работите со своите соученици на проекти или да помогне дознаам некои случајни iOS работи се чувствуваат слободни да ми мејл, и дефинитивно внимателно сите го кодот онлајн, бидејќи само во интерес на време, ние вид на површно разгледана повеќе пофини грануларен детали на нештата. Но ако не, тогаш со среќа на вашиот iOS проекти, и се надевам дека имаме голем прилив на апликации во App Store. [CS50.TV]