[Powered by Google Translate] [Семінар] [IOS: Напісанне прыкладанняў, такіх як Boss] [Tommy MacWilliam] [Гарвардскі універсітэт] [Гэта CS50.] [CS50.TV] Добра, усе, дабро запрашаем у IOS: Напісанне прыкладанняў, такіх як Boss. Гэты семінар будзе засяродзіцца на напісанні прыкладанняў для iPhone і ў сваю чаргу напісання прыкладанняў для iPad, і таму мы ў асноўным будзем хадзіць праз некалькі розных прыкладаў таго, як зрабіць дадатак, просты гульні, як Tic Tac Toe, або калі вы больш зацікаўлены ў стварэнні прыкладанняў, як свайго роду чытання навін ці нешта, што ўзаемадзейнічае з інтэрнэтам я буду казаць пра тое, што, як добра. Вось наш кароткі парадку дня. IOS прыкладанняў напісаны на мове, званым Objective-C, і такім чынам, гэта трохі падобны на C, але на самой справе не на ўсіх, такім чынам, мы будзем казаць трохі аб самім мове , А затым, як пабудаваць iPhone прыкладанні з дапамогай гэтага прыкладання праграма пад назвай XCode, якая, калі вы яшчэ не загрузілі яго яшчэ, не саромейцеся, каб пачаць загрузку цяпер. Гэта некалькі гігабайт. Яна павінна быць вольная ад App Store, так што вам неабходна мець Mac ідэальна працуе пад кіраваннем апошняй версіі OS X. Калі вы не, не праблема. У нас ёсць кампутары Mac ў навуковым цэнтры ў вашым распараджэнні з XCode усталяваны, і таму не саромейцеся выкарыстоўваць іх для развіцця. Калі вы хочаце, каб прыкладанне, але не маюць Mac, не хвалюйцеся. Там ёсць шмат кампуса рэсурсаў для гэтага. І тады мы збіраемся ахапіць 2 вялікіх прыклады розных прыкладанняў, якія вы можаце зрабіць. Objective-C з'яўляецца тэхнічна тое, што называецца супер набор C. Гэта азначае, што любы код C справядліва і Objective-C код. Гэта азначае, што мы як бы ізалявальную плёнку на некаторыя дадатковыя функцыі C. Некаторыя з гэтых функцый ўключаюць у сябе не таго, каб калі-небудзь напісаць таНос раз, дзякуй Богу, не турбуючыся аб тых дурных паказальнікі і вызваляючы іх і ўсё такое Вы ненавідзеў C, і гэта збольшага пайшлі ў Objective-C. Цяпер, Objective-C таксама мае значна больш стандартнай бібліятэкі, так што ёсць нашмат больш функцыянальных магчымасцяў вы атрымліваеце бясплатна ўнутры Objective-C. Памятаеце, калі мы пісалі PHP мы заўважылі, што мы перайшлі ад гэта найменшы мову гіганцкія бібліятэкі ўсе гэтыя вар'яты рэчы, якія вы можаце зрабіць. Тое ж самае адбываецца ў IOS. Там у аб'екты для такіх рэчаў як каляндар будыст, і сапраўды нічога магчыма, вы можаце думаць, верагодна, ужо існуе ў рэалізацыі Objective-C. Аб'ектыўная бок Objective-C спасылаецца нешта называецца аб'ектна-арыентаванае праграмаванне. Гэта свайго роду новая канцэпцыя, але мы на самай справе галоўным чынам даведаўся, Многія з гэтых канцэпцый ўжо. Ідэя аб'ектна-арыентаванага праграмавання з'яўляецца тое, што вы будзеце структураваць Шмат кода вакол гэтых рэчаў, званых класамі, і гэтыя класы сапраўды праславіў структур. Усярэдзіне структуры, мы ў асноўным тут сказаць, гэта рэч, і гэтая рэч можа мець членаў. Напрыклад, вузел звязанага спісу можа ёсць іншыя рэчы, як значэнне, паказальнік на наступны вузел у спісе, і разам, што паказальнік, і гэта значэнне складаецца гэты асобнік структуры. Класы вельмі падобныя, за выключэннем Класы таксама могуць мець функцыі ўнутры іх. Калі мы абвясцілі структуру, мы можам толькі сказаць, Int N або вузла * наступны. Зараз з Objective-C мы сапраўды можам пакласці функцыі Усярэдзіне гэтых рэчаў. Іншая справа, што класы могуць зрабіць гэта яны могуць атрымлiваць у спадчыну дадзеныя з іншых класаў. Напрыклад, мы будзем глядзець на кучу убудаваных у Objective-C класы. Адзін з іх можа быць клас, які ўяўляе від на экране, і гэта, кажучы, што я хачу, каб рэалізаваць маю ўласную пункт гледжання мы ў асноўным кажуць, што хтосьці больш на Apple, верагодна, сапраўды добрыя людзі, напісаў гэты клас для мяне, і ён апрацоўвае такія рэчы, як адлюстраванне кнопак або аказанне экране, і мы б вельмі балюча рэалізаваць усё, што функцыянальнасць саміх сябе, і так проста ўспадкоўванне дадзеных, мы можам сказаць, што ўсё, што вы зрабілі ў гэтым класе Я таксама хачу ўнутры майго класа, а затым я збіраюся зрабіць некаторыя іншыя рэчы, а менавіта ажыццяўленне прыкладанне. Гэта тое, што гэтае слова азначае спадчыну. Мы ўбачым больш канкрэтны прыклад. І, нарэшце, ключ з аб'ектна-арыентаванага праграмавання з'яўляецца тое, што гэта прыводзіць да інкапсуляцыі дадзеных. У некаторых з нашых праблемай задае мы маглі б мець гэтыя вялікія, глабальныя зменныя і глабальныя ўсюды, і гэта, як мы б адсочваць стан. З класамі мы можам пачаць інкапсуляцыі інфармацыі ўнутры аб'екта. Калі ў нас ёсць адзін экран на наша прыкладанне, мы сапраўды не трэба мець якіх-небудзь дадзеных з іншы экран у наша прыкладанне ўнутры, што, і так шляхам інкапсуляцыі рэчы ў класах гэта на самай справе прыводзіць каб лепш норм праектавання, а гэта магчыма з некаторымі дадатковымі функцыямі з Objective-C. Папярэджаннем, сінтаксіс Objective-C з'яўляецца бананаў. Гэта ўсё роўна мы нічога не бачылі раней, так што гэта трохі крывой навучання прывыкаюць да Якога чорта гэта значыць? Але як толькі Вы сканчаеце, што пачатковая крывая навучання, гэта вельмі, вельмі гладкая , Каб пачаць пісаць праграмы. Каб абвясціць клас, калі не сказаць вось мой клас, ён існуе, і, магчыма, тут некаторыя рэчы, якія я збіраюся вызначым пазней, Я збіраюся сказаць @ інтэрфейс. Я збіраюся сказаць @ інтэрфейс. Я збіраюся даць майму класе імя. А потым дзесьці ў іншым месцы я збіраюся сказаць @ канца, і ўсё паміж імі @ інтэрфейсам і @ канца будзе мой клас. Гэта будзе тое, што ўнутры нашага. Файлаў гадзіну. Гэтак жа, як у З нашым. Ч файлы ў асноўным сказалі, вось некаторыя рэчы, якія будуць існаваць. Я не абавязкова кажу вам, што яны робяць, тым не менш, але кампілятар павінен ведаць, што яны існуюць. Пазней ўнутры нашага. М. файлы, таму што м для Objective-C тое, дзе мы на самай справе збіраемся вызначыць, што гэтыя класы. Многае, як наша. Файлаў с, пры ўмове, рэалізацыя функцый. Унутры нашай. М. файл, які мы збіраемся сказаць вось тое, што ўсе функцыі ўнутры майго класа, што яны ўсё робяць. І, нарэшце, унутранай структуры, можна сказаць, у тых фігурныя дужкі Int N або вузла * наступны, і ў Objective-C мы збіраемся выкарыстоўваць ключавое слова @ уласнасці, і гэта тое, што адбываецца, каб вызначыць ўласцівасці, або не-функцый, якія з'яўляюцца часткай майго класа. Выклік функцыі ў Objective-C таксама бананы. Калі мы абвясцілі функцый у C мы сказалі нешта накшталт Int Foo і адкрытай хлопец, а затым даў яму спіс аргументаў. Гэта тое, што абвясціўшы метады ці функцыі выглядае ў Objective-C. Калі я хачу абвясціць функцыю або метад дзе я кажу, што метад сапраўды проста функцыя, якая з'яўляецца сябрам класа, так накшталт ўзаемазаменныя, але не вельмі, так што ўнутры майго метаду, я хачу стварыць новы метад. Ён збіраецца вярнуцца нічога, так што гэта будзе тыпу несапраўднымі. Гэта вяртанне тыпу мая функцыя. Цяпер у нас ёсць дужкі тут, таму што, я не ведаю. Далей будзе імя маёй функцыі, і, нарэшце, у нас ёсць кропка з коскі, як мы мелі ў C. Што новага тут гэты хлопец тут. Гэта злучок сапраўды неабходна, і што гэта кажа пра тое, што Тут гэты метад павінен быць выкліканы на асобнік класа. Пасля таго як мы заявілі нашым структурам мы, верагодна, сказаў нешта накшталт: п структуры вузла, і што на самой справе створаны або асобнік аднаго з гэтых структур так, каб я мог фактычна пачаць працу з тым, што ўнутры яго, так што гэта прочырк азначае, што мы павінны асобнік класа, як мы асобнікаў, што структура перш, чым мы можам назваць гэты метад. Калі я хачу, каб пачаць дадаваць аргументы мае метады гэта становіцца яшчэ больш бананаў. Вось маё імя метаду. Тады я буду мець двукроп'е, а пасля гэтага тоўстай кішкі тут гаворыцца, прыходзіць некалькі аргументаў. Гэты метад прымае адзін аргумент. Тыпу яго аргументу Int, і імя гэтага аргументу або зменная, якую я збіраюся пачаць выкарыстоўваць ўнутры метад называецца я. Зноў жа, гэта метад. Яна прымае адзін аргумент. Калі вы хочаце, каб пачаць дадаваць больш аргументаў ён атрымлівае больш бананаў У тым, што мы гэтую тоўстай кішкі, што кажа тут прыходзіць мой спіс аргументаў. Гэта першы аргумент з'яўляецца цэлым лікам. Цяпер гэта другі аргумент цікава. Зменных, што я збіраюся выкарыстоўваць ўнутры майго функцыі называецца F, так што ўнутры майго функцыі я магу сказаць, F + = 1 ці чамусьці. Гэтая рэч тут у асноўным ключ для гэтага аргументу або параметру. Гэтак жа, як у нас было пар ключ-значэнне, а нешта накшталт JSON або асацыятыўныя масівы Objective-C прынялі рашэнне сказаць, добра, проста так, што гэта сапраўды ясна Пры выкліку метаду тое, што ўсе гэтыя параметры На самай справе я збіраўся назваць іх усіх. Калі вы выклікаеце метад, вы фактычна кажаце andFloat, і тады вы будзеце праходзіць яго цалі Цікава, што гэты чалавек не назваў, але ўсе астатнія параметры, так што калі ў нас быў трэці аргумент, які я мог сказаць andFloat і яшчэ плаваць і гэтак далей. Калі я называю гэтыя метады гэта, вядома, бананы, так што калі ў мяне ёсць аб'ект, і я вызначыў метад Foo, і я хачу яго зваць, а не казаць Foo адкрыць / закрыць дужкі Я збіраюся адкрыць дужкі. Вось імя майго метаду. Я збіраюся зачыніць дужку, і гэта з'яўляецца прадметам Я тэлефаную яго. Памятаеце, што ўсе гэтыя метады існуюць унутры класаў таму што класы могуць мець метады, пэўныя ўнутры іх. Тут я адвольна створаны аб'ект некаторага класа, і гэта сінтаксіс для гэтага. Ёсць 2 крокаў для стварэння аб'екта. У першую чаргу сказаць, што я хачу вылучыць прастору. Гэта эквівалентна таНос. Мы не павінны гаварыць таНос больш. Мы кінулі м, зрабілі яго ідэнтыфікатар, і замяніў. З з. Метраў. Пасля таго як мы Alloc тое, што мы тады павінны ініцыялізаваць яго. У асноўным, калі вы ствараеце аб'екты, якія вы, магчыма, захочаце мець некаторую логіку , Які выконваецца, калі яны створаны, так што вы можаце перадаць некаторыя значэнні па змаўчанні ці нешта накшталт гэтага, і таму гэты метад ініцыялізацыі з'яўляецца тое, што на самой справе стварае аб'ект. Мы спачатку вылучыць месца, гэтак жа, як мы рабілі гэта ў C, а потым мы яго ініцыялізацыі, якая можа ці не можа зрабіць вельмі шмат. Затым мы вяртаем гэтую рэч у аб'ект, а. Там ёсць зорка тут, таму што гэта тэхнічна паказальнік, Але не хвалюйцеся, паказальнікаў не тое, што вялікая здзелка ў Objective-C больш. Цяпер мы instantiated гэтага класа называюць NSObject, і гэта толькі выпадковае класа, Яблык. Мы instantiated гэтага, і зараз у мяне ёсць асобнік гэтага класа У гэтым аб'ект О, дык гэта значыць, што, калі я вызначыў гэтыя метады я мог бы назваць іх, як гэта. Сапраўды гэтак жа, калі б я хацеў выклікаць метад з адным аргументам, такім чынам, гэта бар метад, які прымае адзін аргумент, і вось Баз: qux метад, так што гэта займае ад 2 аргументаў. Гэта выклік адной функцыі на гэтым аб'екце °. Сэнс? Сінтаксіс павінна мець сэнс, але вы, здаецца, прывыкнуць да яго. Добра, давайце пагаворым аб некалькіх рэчах, якія ўбудаваныя ў Objective-C , Якія не абавязкова ўбудаваны ў C. У C мы неяк меў справу са радкамі, як гэтыя дурныя масівы сімвалаў, і гэта стала сапраўды раздражняе. Objective-C мае тыя ўсё пабудавана ў нас, і яна пабудавана ў з дапамогай гэтага класа называюць NSString. Калі я хачу стварыць NSString у нас ёсць больш таемны сінтаксіс. Замест таго, каб казаць "CS50», мы гаворым @ "CS50" і гэта толькі сінтаксіс для аб'явы радкі ў Objective-C. Гэта вельмі лёгка забыць, так не робяць. Цяпер, калі ў мяне ёсць, гэта радок, але заўважыў гэта сапраўды толькі аб'ект. Я сказаў NSString, які азначае, што я instantiated класа называецца NSString, які напісаў нехта іншы для мяне, і яны былі вельмі добрыя пра гэта, і таму зараз Я магу пачаць называць яго метады. Калі я называю метадам Даўжыня гэтага аб'екта з ён збіраецца вярнуцца да мяне даўжыню радка. Гэта так жа, як у StrLen C. Гэта будзе азначаць, 4. Сапраўды гэтак жа, іншага спосабу я б хацеў, каб клапаціцца аб гэта characterAtIndex. Гэта метад, які кажа на гэты радок з Я хачу, каб вы нулявога сімвала, і так гэта было б вярнуцца да мяне з характарам, і ёсць цэлая куча больш з гэтых метадаў, якія вы можаце Google вельмі лёгка. Дакументацыі Apple, з'яўляецца вялікім, і мы зірнем на гэтым крыху пазней. Тыя радка. Мы таксама масівы зменнай памер убудаванага Памятаеце, як у C, калі мы абвясцілі масіў Мы былі ў вас ёсць 5 элементаў, канец гісторыі. Калі мы дабраліся да JavaScript і PHP мы маглі б пачаць рабіць рэчы, як даданне элементаў або перамяшчэнні элементаў. Мы можам зрабіць тое ж самае ў Objective-C. Замест таго, каб стварыць масіў у звычайным рэжыме C мы зноў другі клас NSMutableArray. Там таксама NSArray, і гэта будзе ў асноўным інкапсуляцыі некаторых масіваў. Гэта кажа першае, што я хачу зрабіць, гэта я хачу вылучыць месца для новага масіва, і пасля таго як я перадаць яго Я тады трэба ініцыялізаваць яго. Зноў жа, проста называючы гэтыя 2 спосабу. Цяпер гэта азначае, што ўнутры гэтага аб'екта Я пусты масіў сядзіць. Калі я хачу нешта дадаць да гэтага масіву, я магу назваць AddObject метад. Я хачу дадаць аб'ект у масіў, і я хачу, каб дадаць радок CS50. Калі б я хацеў, наадварот, выдаліць, што я магу сказаць, што я хачу выдаліць аб'ект на першае месца ў масіве або аб'екце. Сэнс? Добра, вы, здаецца, прывыкнуць да гэтай плошчы рэч кранштэйн. Дарэчы, усярэдзіне шмат бібліятэк Apple, вы ўбачыце, што гэта NS. NS на самай справе пазначае наступны крок, які быў адным з Стыва Джобса кампаній па-першае, а вось дзе ён сапраўды пачаў пісаць шмат кода як свайго роду аснову для Mac OS X і ўсе іншыя рэчы, і таму гэтая NS з'яўляецца своеасаблівай гэта добрае спадчына крычаць на адной з ранніх кампаніі таму, калі Apple, упершыню пачаткоўцаў. Гэта ва ўсім свеце. Давайце зірнем на больш цэласны Objective-C прыкладу. Вось я ўнутры XCode. Каб трапіць сюды, я спачатку запампаваў XCode з App Store, адкрыў яго, а затым я пайшоў сюды, каб файл, тут новыя, а затым праект. Пасля я раблю, што я ўсе гэтыя варыянты таго, што я хачу стварыць, і таму мы зірнем на гэтыя параметры пазней, але толькі на гэтым прыкладзе, таму што мы на самай справе не будзе мець прыкладанне тым не менш, Я прыйшоў сюды, і я сказаў: інструмент каманднага радка, і гэта прыкладанне, якое я мог бы запусціць у камандным радку гэтак жа, як мы ўжо працуе з C. Вось як я стварыў гэты праект, і таму цяпер я тут, так што давайце спачатку паглядзім на гэты файл, і гэта павінна выглядаць даволі знаёмай. У мяне ёсць імя Int. Там мой сябар агдс, мой іншы прыяцель ARGV. І такім чынам мы бачым, што гэта з'яўляецца адпраўной кропкай для майго першага Objective-C прыкладанняў. Тут мы можам ігнараваць гэта цяпер. Гэта, у асноўным некаторыя рэчы кіраванне памяццю, што вы не вельмі ніколі не прыйдзецца турбавацца. Давайце паглядзім на гэтую Першы блок тут. Гэта першая лінія, калі я скажу, студэнцкая * Аліса = [[Студэнцкія ідэнтыфікатар] Init] Што гэта робіш? Гэта першы студэнт тут, гэта, верагодна, класа. Гэта не клас, Apple, піша, але гэта клас, які я напісаў. Першае, што я хачу зрабіць, гэта я хачу вылучыць месца для новых студэнтаў, і тады я хачу, каб падрыхтаваць яго, так што гэта дае мне назад гэты новы аб'ект студэнт, і я захоўваю гэта ў зменную з імем Аліса. Адкуль гэта клас прыйшоў? Ну, тут на левай баку ўсе гэтыя розныя файлы ўнутры майго праекта. Мы бачым тут у мяне ёсць Student.h і Student.m. . Ч файла, памятаю, дзе я заяўляю, усе рэчы, , Якія будуць існаваць у межах класа. Давайце паглядзім на гэта. Добра, тут мы маем гэтую @ інтэрфейс, і гэта сведчыць аб тым, што тут адбываецца дэкларацыях ўсё, што будзе існаваць у маім класе. Тады ў мяне тоўстай кішкі. Тады ў мяне ёсць гэтая рэч NSObject. Гэта двукроп'е азначае, што спадчыну трохі мы абмяркоўвалі крыху раней. Гэта кажа, што ўсе NSObject можа зрабіць дзе NSObject гэта клас, напісаны кімсьці іншым, усё гэта можна зрабіць NSObject Я хачу быць у стане зрабіць гэта. Па сказаўшы: NSObject, што азначае, што я ў прынцыпе атрымала ў спадчыну ўсе функцыі іншага класа. Гэта сапраўды даў мне цэлую кучу розных метадаў і ўласцівасцяў, якія я магу выкарыстоўваць. Тут, унізе я ствараю 2 ўласцівасці. Гэта азначае, што мой студэнт, калі б гэта была структура, гэта будуць 2 рэчы Усярэдзіне маёй структуры, так што кожны студэнт мае імя , Што з'яўляецца радок, і студэнт таксама мае клас, якая Int. Нарэшце, тут я збіраюся стварыць метад для маіх студэнтаў. Я патэлефанаваў свайму метаду, initWithName, і яна прымае адзін аргумент, і гэты аргумент з'яўляецца радком, і я назваў яго імя. Зараз давайце паглядзім на тое, як мы на самай справе рэалізаваны гэтага класа. Вось, цяпер я ўнутры майго. Файл м, м для рэалізацыі, я думаю. У мяне ёсць рэалізацыя, мой канец, і вось дзе я на самой справе вызначэнні initWithName, што робіць. У мяне ёсць initWithName, імя маё параметру, а затым гэта дзе я на самой справе стварэнне студэнтам, і такім чынам, гэта трохі загадкава, але гэта накшталт шаблонны , Якія вы хочаце ўключыць у вашу канструктараў. Гэтая функцыя ініцыялізацыі тут, initWithName, з'яўляецца адным з відаў канструктара. Вы ў асноўным будаўніцтва новага аб'екта студэнта і, магчыма, адпраўка некаторых дадзеных усярэдзіне яго. Першае, што я хачу зрабіць, гэта я хачу звярнуць ініцыялізацыі на гэта супер рэч. Памятаеце, што, калі я сказаў таму тут, у. Файл г што ўсе NSObject мае студэнт мае. Гэта азначае, што калі я ствараю тое, што я студэнт Таксама трэба зрабіць, гэта Пераканайцеся, што NSObject, што я на наступны ўсё, што дадзеныя Таксама ініцыялізаваны правільна. Што я павінен сказаць, гэта супер на самай справе адбываецца спаслацца на бацькоўскі клас што я ў спадчыну, таму я хачу, каб пераканацца, што я ініцыялізацыі усё, што я ў залежнасці ад перш чым пачаць спрабаваць яго выкарыстоўваць. Тады, калі гэта правільна ініцыялізаваны гэта, як кажуць, калі таНос не вярнуць нулявы, то я магу пачаць ўстаноўку некаторых уласцівасцяў. У JavaScript і PHP мы гэта ключавое слова называюць гэта, і гэта ставіцца да бягучага асобніку класа. У Objective-C мы называем гэта самастойна. Калі я кажу self.name, што азначае, што аб'ект Я толькі што стварыў, калі я сказаў студэнт Alloc Init, што збіраецца даць мне, назад аб'ектаў. Гэта азначае, што я хачу задаць імя гэтага аб'екта да таго, што я толькі што прайшло цалі Як і ў C, мы атрымліваем доступ да членаў з гэтага пункту, так self.name кажа, што імя студэнта аб'екта Цяпер будзе ўсё, што вы толькі што прайшлі цалі І вось, нарэшце, я магу вярнуць гэта так, я на самой справе атрымаць нешта наўзамен. Пытанні? Добра, так гэта само = супер INIT, калі вы не зусім разумееце спадчыны рэчы не хвалюйцеся. Проста ведайце, што калі вы хочаце зрабіць свой уласны метад ініцыялізацыі проста зрабіць гэта, і вы будзеце добра ісці. Так. >> [Студэнт] Што, калі само значыць? Гэта азначае, што, калі мы таНос тое, што мы заўсёды правяраецца, калі яна была роўная нулю, і калі яна была нулявы, то мы выйшлі. Гэта тое ж самае, таму што, калі гэта вяртае нуль, то мы, верагодна, будзе сегменце віна калі мы пачнем спрабаваць маніпуляваць ім. Гэта наш студэнт класа. Гэта азначае, што мы можам ініцыялізаваць нашы студэнты ў адным з двух спосабаў. Калі я скажу, студэнт ідэнтыфікатар ініцыялізацыі я не выкарыстоўваю гэты спосаб, што я толькі што напісаў, і замест гэтага я магу проста сказаць, alice.name, і цяпер я збіраюся ўсталяваць, што імя ўласцівасці. Сапраўды гэтак жа, калі я хачу выкарыстаць гэты метад initWithName Я магу проста сказаць, ідэнтыфікатар, а затым замест таго, каб гаварыць ініцыялізацыі Я буду называць гэта метад, які я толькі што стварылі, і я збіраюся прайсці ў Боб. На дадзены момант, гэты аб'ект Боб мае імя, супадае з Бобам. Добра, тут я выкарыстоўваю, што NSMutableArray, што мы глядзелі на раней. Я выдзяленні space.Then я ініцыялізацыі новага масіва. Я збіраюся дадаць 2 рэчы да яго. Гэты масіў у цяперашні час праводзіць студэнт аб'ектаў. Звярніце ўвагу, што нідзе не я павінен сказаць, што гэта масіў студэнтаў. Я сказаў, што гэта масіў, перыяд. Тады я магу пакласці ўсё, што ўнутры яго, што я хачу. Вось у мяне ёсць 2 аб'екта. Нарэшце, у мяне ёсць іншы аб'ект тут, гэта TF. А тут у TF.h прынцыпе тое ж самае. Я ў спадчыну ад NSObject, і, дарэчы, Пры стварэнні класаў усё гэта робіцца для вас, такой шаблонны інтэрфейс. Яна мае ўласцівасць студэнтаў. У мяне ёсць некалькі метадаў, што тут сапраўды не шмат, і так гэта азначае, што пасля стварэння гэтага аб'екта TF Я магу назваць гэты метад класа на гэта так. Любыя пытанні па Objective-C сінтаксіс, перш чым мы пачынаем рухацца ў некалькі цікавыя распрацоўкі прыкладанняў рэчы? Такім чынам, давайце на самай справе зрабіць iPhone прыкладання. Асноўныя класы, якія вы будзеце выкарыстоўваць ў Вашым iPhone прыкладанне называецца выгляд кантролераў, і выгляд кантролера ў асноўным ўяўляе сабой адзіны экран Усярэдзіне вашага прыкладання, так што калі я на музыку дадатак, напрыклад, адзін від кантролера можа прадстаўляць паданне, у якім я разглядаю усе песні на маім iPhone. Яшчэ адзін від кантролера можа быць, калі я націскаю песню і пачаць гуляць або як я свідраванні ўніз, у мастакі. Кожны з гэтых розных экранах можа быць прадстаўлена як іншы кантролер гледжання, і выгляд кантролера на самай справе проста клас, які кажа, як гэты экран працуе. Рэчы ўнутры кантролера прадстаўлення, мы будзем мець ўласцівасці, так што такія рэчы, як кнопка будзе ўласнасцю нашага пункту гледжання кантролера. Мы таксама збіраемся мець метады, і ў асноўным гэта апрацоўшчыкі падзей. Гэты метад кажа, што калі вы націснеце на гэтую кнопку Я хачу зрабіць нешта, і, нарэшце, зноў жа, Мы будзем выкарыстоўваць гэта само ключавое слова, каб атрымаць доступ да бягучых экземплярам. Для пабудовы інтэрфейсаў у IOS на самай справе вельмі, вельмі лёгка. У іх гэта добра перацягвання інтэрфейс пад назвай Interface Builder, і 2 базавыя канцэпцыі, што провад вашага Objective-C ў Interface Builder з'яўляюцца IBOutlet і IBAction. IBOutlet проста кажа, што калі вы аб'яўляеце ўласцівасць, што гэта кнопка, і вы хочаце падлучыць яго да чаму-то ў Вашым UI, Вы збіраецеся сказаць, што гэта выхад. Аналагічна, калі вы хочаце, каб прадстаўляць апрацоўшчык падзеі Затым вы збіраецеся сказаць, што гэта дзеянне. Каб на самай справе дроту да гэтага графічнага прадстаўлення і ваш код, гэта вельмі, вельмі простае. Калі вы хочаце прымацаваць IBOutlet, усё што вам трэба зрабіць, гэта вы кіруеце мышы, і мы ўбачым прыклад гэтага вельмі хутка. Вы кіруеце пстрыкніце там, дзе ён кажа View Controller. Вы збіраецеся перацягнуць у інтэрфейсе, або, наадварот, калі вы хочаце падлучыць апрацоўшчык падзеі вы збіраецеся перацягнуць з інтэрфейсу у іншым накірунку. Давайце зірнем на вельмі просты прыклад IOS. Давайце створым новы праект. Я збіраюся прыехаць сюды, каб прыкладання, і я збіраюся націснуць Адна заяўка View. Я збіраюся націсніце кнопку Далей. Я дам мойму праекту імя. Я буду называць яго Hello. Цікава, Apple мяркуе, што вы ствараеце прадукт так што вы можаце прадаць яго, і яны могуць рабіць грошы. Тут, унізе я збіраюся сказаць, што гэта iPhone прыкладанне. Вы можаце стварыць IPad прыкладанне, або калі вы хочаце стварыць адно з тых прыкладанняў , Якая падтрымлівае як прылады, якія вы можаце зрабіць гэта. Гэта тое, што вы хочаце, каб вашы галачкі выглядаць. Вы хочаце выкарыстоўваць Дзень беларускай салідарнасці, якую мы ўбачым пазней, і вы вызначана хочаце выкарыстоўваць аўтаматычны падлік спасылак, , Які з'яўляецца прыемнай асаблівасцю, якая прадухіляе Вас ад неабходнасці казаць таНос і бясплатна. Калі вы жадаеце патэлефанаваць таНос і вольна, я хацеў бы пакінуць гэта праверана. Я буду націсніце кнопку Далей, і, нарэшце, гэта будзе пытаюць мяне, дзе я хачу захаваць яго. Я ўдару стварыць, і тут мы ідзем. Я стварыў новы праект. А тут злева ўсе файлы, якія знаходзяцца ўнутры майго праекта, і заўважыў, што я атрымаў цэлую кучу, і я нават не рабіць нічога. IOS з'яўляецца вялікім. Напрыклад, вось гэтая ViewController.h, гэта будзе прадстаўляць мой першы кантролер гледжання, таму на першым экране ўнутры майго прыкладанні. Цяпер мы ведаем, што гэта казаў. Мы кажам, я тэлефаную гэтага класа ViewController, і ViewController робіць усё, што робіць UIViewController, і гэта, зноў жа, некаторым класам, які пісаў, што Apple, робіць шмат карысных рэчаў для нас хацеў адлюстраваць экран. Вось дзе я магу фактычна пачаць вызначэнне таго, што мой погляд кантролер робіць, і аказваецца, што я сапраўды не трэба гэта. Гэта шаблонны код, які Apple, дае мне бясплатна. Я зрабіў гэта трэба першая лінія, ці ў мяне няма класу, так што мы можам пазбавіцца ад гэтага і пазбавіцца ад гэтага. Такім чынам, гэта мой пусты экран. Цяпер націсніце на гэтую MainStoryboard.storyboard, і гэта дзе яна пачынаецца самае цікавае. Гэта ўяўляе сабой першы экран на маё прыкладанне. Калі я хачу, каб дадаць кнопку ў HTML я павінен быў стварыць кнопку тэга. У Android вы павінны стварыць кнопку тэга, але ў IOS, калі я толькі прыехаў сюды ў правым ніжнім куце і калі я націскаю на гэта 3. тут, дзе ён кажа аб'ектаў, і я магу пракруціць ўніз, ці я магу пачаць пошукі кнопкі. І паглядзіце, кнопкі, так што калі я на самай справе перацягнуць прама там, Я толькі што дадалі кнопку, каб гэты экран на маё прыкладанне. Калі я хачу змяніць тэкст, я магу двойчы пстрыкніце па ім, сказаць нешта прывабна, як "Press Me". Добра, зараз, калі я запускаю гэта прыкладанне, такім чынам, мы скампіляваць яго, так, каб запусціць яго я націскаю кнопку прайгравання ў левым верхнім куце, і ёсць маё прыкладанне. Я нічога не рабіў, і я атрымаў салодкі гледзячы iPhone прыкладанне. Калі я хачу, каб спыніць яго, вы можаце націснуць кнопку прыпынку таму што гэта больш весела. Давайце выкажам здагадку, што я на самой справе хочаце, каб нешта здарылася, калі я націскаю гэтую кнопку. Каб зрабіць тое, што мне трэба зрабіць, гэта мне трэба стварыць Новы апрацоўшчык падзей або дзеянняў. Гэта азначае, што мне трэба стварыць некаторы метад, які я хачу назваць калі я націскаю на кнопку, так давайце створым новы метад. Я ўнутры ViewController.h. Я павінен сказаць, што метад існуе. Мне трэба злучок спачатку, таму што я збіраюся быць выклікам гэтага на выгляд кантролера. Мне трэба, каб даць гэтаму тыпу. Тып гэтага будзе IBAction, што тое, што мы бачылі раней. Гэта апрацоўшчык падзеі, так што ён збіраецца вярнуцца IBAction, і гэта намёк на XCode сказаць, што гэта тое, што я хачу, каб тэлеграфаваць што-небудзь. Я магу даць яму імя, як buttonPressed, кропка з коскі. Цяпер я абвясціў новы метад ўнутры майго класа. Я ўжо казаў гэты метад мае сваё існаванне. Зараз давайце ўступаць у ViewController.m, і скажам, што гэты метад можа зрабіць. Калі я пачынаю набіраць, напрыклад, (несапраўднымі) buttonPressed апавяшчэнне XCode сапраўды добры і autocompletes для мяне. Гэта сапраўды выдатна. Заўважце, што ўнутры. М. файла я магу таксама сказаць, пустэча, і гэта таму, што IBAction на самай справе не тып. Гэта на самай справе хэштэгам вызначана дзесьці быць пустэча, і зноў жа, гэта ўсяго толькі намёк на XCode, што кажа Я хачу, каб гэта апрацоўшчык падзеі, і мы ўбачым, чаму ўсяго за секунду. Пры націску гэтай кнопкі я збіраюся зрабіць нешта раздражняе хацелася адлюстравання ўсплываючае акна. Каб зрабіць гэта, я магу стварыць новы асобнік гэтага класа называюць UIAlertView, і гэта клас, які Apple, пісаў, што збіраецца паказваць назойлівыя усплывальныя вокны. Мы называем гэта ўсплывальнае папярэджанне, а ў мяне 2 кроку, памятаеце, для стварэння гэтага аб'екта. Першае, што мне трэба зрабіць, гэта вылучыць прастору. Я хачу UIAlertView. Я хачу, каб вылучыць прастору. Гэта мой першы метад. Мой наступны метад я хачу, каб ініцыялізаваць яго, і таму ў мяне гэта вялікі, доўгі метад initWithTitle. Гэта ў асноўным збіраецца кантраляваць тое, што гэта ўсплывальнае акно кажа. Назва маёй ўсплывальнае акно можа быць прывітанне. Пасланне гэта ўсплывальнае акно можа быць "Гэта IOS". Дэлегат рэч, я не ведаю, што гэта такое. Скажам, гэта нічога. Цяпер кнопка, якая збіраецца з'явіцца можаце сказаць нешта накшталт "Гэта дакладна", і я сапраўды не хачу ніякіх іншых кнопак, так што давайце выдаліць, што і зачыніце дужку. Добра, я стварыў дадатковае адзін. Там мы ідзем. Гэта, як я магу стварыць новае ўсплывальнае акно. Калі я хачу на самай справе паказаць ўсплывальнае акно я хачу назваць шоў метадам. Каб зрабіць гэта, я магу сказаць, апавяшчэння і шоу, і зноў, аўтазапаўненне быў супер добры. Калі я забыўся, што гэта такое, калі я толькі што ўвялі ў с, Я магу пракруціць тут, каб высветліць, што гэта было, і ён фільтруе прыгожа. Цяпер я стварыў гэта новае ўсплывальнае акно. Мы вернемся да таго, што дэлегат азначае, пазней, і цяпер я хачу сказаць, што я хачу гэты метад, каб быць звольненыя калі я націскаю на кнопку, так што я збіраюся вярнуцца да маёй раскадроўкі, і я хачу цяпер надаём гэтаму IBAction. Першае, што трэба зрабіць, гэта націснуць на кнопку. Пры націску на гэтую кнопку, я хачу нешта здарыцца. Я не збіраюся ўтрымліваць кантроль. Я хачу, каб перацягнуць з дапамогай кнопкі больш тут, дзе ён кажа View Controller. Мы бачым, што гэта прыгожа свеціцца. Калі я адпушчу з маёй мышы зараз у мяне ёсць гэтая ўсплывальнае акно тут, дзе ў мяне ёсць некалькі варыянтаў. Адным з іх з'яўляецца падзей, што я магу зарэгістравацца. Гэта ўсё тыя метады, якія я абвясціў у маім г файла IBActions. Гэта, як XCode ведае, што павінен з'явіцца ў гэтым спісе мала, так што гэта ўсяго толькі намёк. Калі я націскаю на кнопку націснутай, я зараз зарэгістраваны апрацоўшчык падзей. У JavaScript мы павінны былі сказаць у мяне ёсць некаторы код, які зарэгістраваны апрацоўшчык падзей. У Objective-C гэта было сапраўды так проста. Калі я запускаю гэты раз Цяпер, калі я націскаю на кнопку мой апрацоўшчык падзеі будзе страляць, і я збіраюся атрымаць гэта ўсплывальнае акно. Супер, супер проста няма. Калі вы заўсёды хочаце, каб убачыць усе падзеі, якія адбываюцца на рэгістрацыю на кампаненце, калі я націскаю на гэтую кнопку і Я прыйшоў сюды, каб правая бок Спачатку вы можаце бачыць тут я магу рабіць рэчы, як тып кнопкі, так што калі вы хочаце адзін з тых, каго я ці кнопку Дадаць кантакт або любы іншы. Калі я хачу, каб убачыць усе падзеі, якія на гэтай кнопцы калі я зрабіў увесь гэты шлях сюды, на правай баку мы бачым тут на падзеі У мяне ёсць усе гэтыя розныя падзеі. Я магу націснуць на кнопку, калі я адпусціў кнопку, калі я двойчы націсніце або любы іншы, і той, які я толькі што зарэгістраваўся гэта падзея называецца Touch Up Inside, і гэта сведчыць аб тым, што як толькі палец адрываецца ад кнопкі гэта падзея будзе агнём, і гэта менавіта тое, што толькі што адбылося. Гэта свайго роду змаўчанні кнопка націснутая падзеі. Любыя пытанні да гэтага часу? Добра, вось як мы можам пачаць злучаць рэчы ў нашым кодзе ў рэчы ўнутры нашага інтэрфейсу. Памятаеце, першае, што мы павінны былі зрабіць, гэта знайсці код, і тады мы падключана інтэрфейс да коду, і ёсць наша першае прыкладанне. Добра, гэта было сапраўды выдатна, і мы стварылі гэтую кнопку. Што рабіць, калі мы не хочам мець, каб стварыць кучу уласцівасцяў якія прадстаўляюць гэтыя кнопкі? Напрыклад, у Tic Tac Toe ў мяне ёсць 9 кнопак, і было б супер, супер раздражняе трэба перацягнуць 9 разоў або калі я павінен быў зрабіць Tic Tac Toe з 81, а не 9 і мне прыйшлося перацягваць 81 раз, і гэта кульгавы. Што мы можам зрабіць, а вельмі падобна на HTML калі ў нас былі такія рэчы, як ідэнтыфікатары і імёны, і мы можам шукаць рэчы па іх ID, ёсць аналагічныя паняцці ў IOS завецца тэгамі. Тэг гэта проста унікальны лікавы ідэнтыфікатар для кампанента. Калі я кажу, гэта не мае тэга 0, напрыклад, калі я ствараю кнопку і даць яму тэг 0, і мы ўбачым, як гэта зрабіць усяго за секунду, калі я хачу атрымаць гэтую кнопку Я магу проста сказаць, што я хачу, каб выклікаць viewWithTag метад аб'екта тут, self.view, які ўяўляе бягучы экран, напрыклад. Калі я называю гэта viewWithTag метад, я збіраюся адысці на кнопку з тэгам 0. Давайце зірнем на гэта, будынак Tic Tac Toe. Па-першае, гэта мае раскадроўкі. Я стварыў гэтыя 10 кнопак інтэрфейсу. Звярніце ўвагу, што ўсе яны аднолькавага памеру. Калі я націскаю адну з іх і я вярнуся сюды на гэтай правай баку Вы ўбачыце, я паправіў шрыфт прама тут, таму я зрабіў шрыфтам крыху большага памеру, але тое, што я зрабіў, я паставіў гэты тэг. Я сказаў, што гэта не мае тэг 1, і гэта верхнім левым куце. Цяпер, калі я націскаю іншую кнопку, як гэта другая тут, Зараз вы ўбачыце, што мой тэг 2. Кожная з гэтых кнопак проста мае унікальны тэг і так гэта пазней, як я збіраюся пачаць узаемадзеянне з маім дадаткам. Гэта ўсё ўнутры аднаго кантролера прадстаўлення, але вось тое, што ў нас ёсць. У нас ёсць 3 ўласцівасці тут. Першы і апошні збіраемся прадставіць стан майго савета. У асноўным гэта Першы масіў, які ўяўляе дзе Xs і АС. Гэта іншая кажа нам, чыя чарга. Вы заўважыце, што ў мяне таксама ёсць гэтыя рэчы. Раней, калі мы абвясцілі ўласцівасці, якія мы далі ім назвы і тыпу. Мы таксама можам даць ім некаторую дадатковую інфармацыю тут. Гэта першы кажа неатомической, і што гэта кажа у асноўным толькі адна рэч ніколі не будзе спрабаваць атрымаць доступ да гэтай зменнай за адзін раз. Вы можаце зрабіць больш складаныя прыкладанні, якія з'яўляюцца шматструменных, і так яшчэ ў драпіна у нас былі розныя тэмы, і розныя спрайт могуць рабіць розныя рэчы ў той жа час. Калі гэта не так, што яна не ўсё, што мы будзем глядзець на, калі мы кажам неатомической гэта на самай справе збіраюцца зрабіць рэчы крыху хутчэй. У нас таксама ёсць тое, што называецца прызначаюць, моцныя або слабыя. Гэта прызначыць проста кажа, што гэта стандартны тып. Гэта не аб'ект або паказальнік, таму што гэта ўсяго толькі лагічны, так BOOL ўбудаваны ў Objective-C. Гэта кажа не спрабуйце нічога рабіць фантазіі з паказальнікамі тут. Гэта звычайны стары маштабавання. Моцныя і слабыя, гэта слабое кажа, што на самой справе Я хачу, каб гэта паказвае на тое, з пункту гледжання кіравання. Я не збіраюся на самай справе вылучыць або ініцыялізацыі гэтага сам. Interface Builder, калі я запускаю дадатак, будзе апрацоўваць усё, што ініцыялізацыя. Калі я кажу, слабыя, кажа, што нехта будзе стварэнне гэтага. Калі я скажу, моцны, гэта кажа пра тое, што я збіраюся быць адзін якая стварае гэтую дошку аб'екта, і вось у мяне ёсць яшчэ некалькі метадаў тут, Напрыклад, дзеянні, калі новая кнопка націснутая гульні, дзеянне, калі любы іншы націску кнопак і гэтак далей. Мы не будзем удавацца занадта шмат логікі Tic Tac Toe, хоць гэта вельмі цікава, але давайце зірнем на некаторыя з рэчаў, якія мы можам зрабіць, унутры IOS. Гэты новы метад гульні будзе звольнены кожны раз, калі я націскаю кнопку стварэння новай гульні. Для падлучэння, што да мяне проста прыходзяць да мяне раскадроўкі. Я націснуў на новую гульню. Калі б я прыйшоў сюды, каб права Я бачу, што Touch Up Inside падлучаны да NewGame метад. Вось чаму гэта звольняць. Метад NewGame збіраецца зрабіць некаторыя налады. Гэта будзе сказаць, што я хачу, каб вы ясна дзяржаўнага кіравання. Гэта добры метад змяняныя масівы. Гэта будзе сказаць, што гэта цяпер чаргу X, і цяпер я збіраюся скарыстацца гэтым viewWithTag рэч. Я ведаю, што мае кнопкі маюць тэгі 01/09, і гэта тое, што я адвольна выбраў. Калі я хачу, каб усталяваць тэкст кожнай кнопкі, каб быць пустым таму што я проста пачаў новую гульню, і я не хачу Xs або выхады, каб іх пакінулі больш я магу гэта зрабіць. Я магу сказаць, што я хачу прадстаўленне з тэгам, 1, 2, 3, 4 і гэтак далей. Гэта будзе цягнуць іншую кнопку кожны раз. Тут я збіраюся прывесці яго да UIButton. Гэтак жа, як мы маглі б кінуць на цэлыя паплаўкі і наадварот гэта гаворыць пра тое, што я хачу кінуць гэта UIButton. Гэта азначае, што тыпу гэта будзе * UIButton таму што паказальнікаў, але не хвалюйцеся, яны не страшныя больш. Як толькі ў мяне гэтая кнопка я буду называць яго метад. Гэты метад называецца SetTitle forState, і таму гэта кажа Я хачу, каб усталяваць тэкст кнопкі, каб быць пустой радком, і я хачу, каб гэта было пустым радком, калі яна не націснутая. Калі я выкарыстоўваю гэты метад, я магу змяніць тэкст кнопкі як толькі нехта б'е яго, але мы хочам сказаць, калі кнопка проста сядзеў там Я хачу, каб тэкст быў пустым. Нарэшце, мы збіраемся для ініцыялізацыі майго савета, і я хачу сказаць, што ўсё ў цяперашні час на 0, так што гэта сябры савета дырэктараў нязменныя з'яўляецца змяняны масіў, што азначае, я магу назваць AddObject метадам і толькі 0 ўнутры яго. Вось што адбываецца, калі я ствараю новую гульню. Давайце зірнем на іншую. Гэты метад тут IBAction, што збіраецца быць націснутая кожны раз, калі адна з гэтых квадратаў націснутая. Цяпер у нас ёсць Tic Tac Toe логіка. Мы высветліць, чыя чаргу, і на аснове гэтага мы альбо ўсталяваць X або O, але мы заўважылі, што мы паўторна гэтую ж апрацоўшчык падзеі для кожнага з гэтых кнопак. Гэта азначае, што ў мяне няма метаду для верхняй левай кнопкі, іншы метад для кнопкі ўнізе справа, хоць я мог бы зрабіць гэта. Што б не быць сапраўды добрым дызайнам. Што я раблю тут, я на самой справе адбываецца, каб вызначыць што тэг кнопкі, якая была націснутая ёсць. Вы заўважыце, што гэтая п'еса метад прымае адзін аргумент. Гэта называецца адпраўніком, і тое, што адпраўнік знаходзіцца адпраўнік будзе ўяўляюць сабой менавіта тое, што было прынята ўздзеяння на. Калі я націсну кнопку, гэтага адпраўніка будзе, што UIButton што я на самой справе націснутая, так што азначае, што UIButton мае тэг, таму што я стварыў тэгаў. Калі я хачу атрымаць у тэгу Я магу проста сказаць: Я хачу, каб тэгі адпраўніка, і зноў, я толькі літых яго UIButton. Я ведаю, што адпраўнік будзе UIButton. Гэта не заўсёды павінны быць UIButton. Я мог бы, напрыклад, зарэгістраваць той жа апрацоўшчык падзеі  адзін для кнопкі, адна для слайдера. У гэтым выпадку, я ведаю, што яны ўсе кнопкі, так што я збіраюся сказаць Я хачу, каб гэта кнопка, і тады я змагу атрымаць тэг, і з тэгам Цяпер я ведаю, дзе я знаходжуся ўнутры платы. Тады я магу проста ўсталяваць альбо X або O, можа перавярнуць сваю чаргу, праверыць, хто выйграў, і гэтак далей. Любыя пытанні па гэтым да гэтага часу? Такім чынам, увесь код, мы размясцілі онлайн-мы не хочам, каб патрапіць у занадта шмат з логікі Toe Tic Tac, але зараз вы можаце бачыць, што на самой справе усё, што мы робім, мы цыкл па гэтым масіве, таму мы маем пару цыклаў тут, і мы проста параўнанне, каб убачыць у нас ёсць матч ва ўсіх радках, матч у слупку або што-небудзь падобнае. Каб сапраўды запусціць гэта дадатак, калі я націскаю на адну з гэтых кнопак што гульня метад быў звольнены, так, значыць, я проста ўсталюеце Кнопка быць X, так што зараз гэтая кнопка будзе O, і гэтак далей, і вось як мы пачынаем ўзаемадзейнічаць з адным прыкладаннем старонцы. Мы будзем публікаваць код, так што не саромейцеся, каб паказаць файл, што, Але давайце зараз пагаворым аб некаторых прыкладанняў, якія больш, чым проста адна старонка. Гэтак жа захапляльны, як Tic Tac Toe было, шмат прыкладанняў ўнутры IOS з'яўляюцца свайго роду гэтыя дэталізацыі рэчаў з некалькімі экранамі. Першая канцэпцыя, што мы павінны казаць пра пратаколы, і пратаколу з'яўляецца проста наборам метадаў што вы можаце абяцаць вызначыць. Калі я ствараю новы пратакол з 2-ма метадамі, гэта першае, калі вяртаецца тып з'яўляецца нікчэмным, я назваў яго Foo. Ён не прымае аргументаў. У мяне ёсць іншы метад. Яна вяртае Int. Я назваў яго бары, і яна прымае адзін аргумент. Усё гэта пратакол з'яўляецца тое, што называецца SomeProtocol тут, гэта набор рэчаў, якія хто-то можа рэалізаваць. Я не ўнутры гэтага пратаколу сказалі, што Foo робіць. Замест гэтага, я проста кажу, вы маглі б вызначыць Foo, калі вы хочаце. Калі я ствараю шоу-кантролер або стварэнне класа Я магу ўнутры гэтага класа абяцанне рэалізаваць некаторыя з гэтых метадаў, так, напрыклад, калі казаць гэта цяпер кажа, што я раблю вам абяцанне, што ўнутры гэтага класа кантролера гледжання мне давядзецца азначэнняў для абодвух Foo і бар. Чаму гэта карысна? Многія кампаненты ўнутры IOS скарыстацца гэтым шаблон праектавання называецца дэлегацыяй, і тое, што дэлегацыя кажа з'яўляецца тое, што, напрыклад, калі ў мяне ёсць тэкставае поле і ёсць некаторыя падзеі, якія могуць быць зарэгістраваныя ў маёй тэкставае поле, замест стварэння асобнага падзеі, што я магу зрабіць, гэта я магу сказаць, Дэлегат гэта тэкставае поле будзе некаторы аб'ект. Калі я кажу, што гэта дэлегат цяпер, што азначае, што кожны раз, калі некаторыя падзеі былі б звольнены ў тэкставае поле замест таго, каб зарэгістраваць яго ці што-небудзь накшталт гэтага ён проста будзе выклікаць метад дэлегаты. Напрыклад, у маёй тэкставае поле ў мяне ёсць метад, калі я націскаю што зрабіць кнопку ў правым ніжнім куце, і г.д., а не рэгістрацыю апрацоўніка падзеі, што я магу сказаць, тэкставае поле, вось гэта аб'ект, які я хачу, каб выклікаць метад кожны раз, калі хтосьці націскае кнопку Гатова, і гэта азначае, што гэты аб'ект мае для ажыццяўлення некаторых пратаколаў кажа, што я абяцаю, каб вызначыць, што рабіць кнопкі дзеянні, таму што, калі ён не вызначае, што метад, і вы націсніце Гатова, Затым яна збіраецца ўводзіць у зман. Давайце паглядзім на прыкладзе. Тут я проста адно тэкставае поле, і адным з уласцівасцяў гэтага тэкставага поля тут на гэтым правая частка дэлегатаў. Гэта ўласцівасць класа. Што я зрабіў тут я магу кантраляваць націснутая, і я пацягнуў з гэтага месца тут на прадстаўленне-кантролер, а цяпер кажа дэлегат гэта поле будзе шоу-кантролер. Гэта азначае, што, калі некаторыя дзеянні адбываюцца, а не рэгістрацыі асобныя апрацоўшчыкі падзей, я хачу, каб вы адправіць іх на дэлегат. Зараз давайце зірнем на мой погляд кантролер. Унутры. Файл ч я даў абяцанне. Я абяцаў выканаць некаторыя метады ўнутры гэтага пратаколу называецца UITextFieldDelegate, і зноў, гэта толькі некаторыя спіс некаторых рэчаў, якія я магу выбраць для рэалізацыі. Калі б я прыехаў сюды ў маёй. М. файла, я рэалізаваў адзін з такіх метадаў. Я назваў яго textFieldShouldReturn таму што гэта, як гэта называецца ўнутры пратаколу. І цяпер кожны раз, калі я націскаю кнопку Гатова ўнутры гэтага тэкставага поля Гэта тое, што збіраюся называць, так што я не зарэгістраваць апрацоўшчык падзей. Я падлучаны дэлегаты, і кожны раз, калі гэта падзея гэта метад, які будзе выкліканы, так што калі я прыходжу сюды, каб мае раскадроўкі і запусціць яго- Хоць гэта пагрузцы мы можам бачыць, што яна робіць. На маім экране ў мяне ёсць 2 рэчы. У мяне ёсць тэкставае поле, і ў мяне гэты ярлык. Я проста кажу, я хачу, каб тэкст гэтай пазнакі роўным любы карыстальнік увёў ўнутры тэкставага поля. У наступным радку тут проста метад, які я тэлефаную на тэкставае поле, якое кажа, што я хачу, каб вы схаваць клавіятуру. Гэта ўсяго толькі адвольныя метад, які Apple, выбраў. Зноў жа, перш чым я нічога не рабіў, я павінен быў звязаць усе, так што я ўпершыню прыехаў сюды. З пункту гледжання кантролера я перацягнуць у тэкставае поле. Я адпусьціў, і я бачу тут, што я магу зрабіць гэта ўласцівасць тэкставага поля так як тут, на думку кантролера я вызначыў уласнасці гэта значыць IBOutlet тэкставага поля. Гэта сведчыць аб тым, што я магу падключыць гэтую ўласнасць да у тэкставым полі ў маёй карыстацкага інтэрфейсу. Цяпер, калі я націскаю гэтага я магу пачаць друкаваць. Цяпер, калі я націсніце кнопку Гатова, гэта будзе страляць падзея, што я магу зараз адказаць. Няма апрацоўшчыкаў падзей. Вось як я толькі што адказаў на кнопку Гатова. Сэнс? Гэта не шаблон праектавання, што-Вы не маглі б калі-небудзь апынецеся стварэння ўласнага пратаколу, але дакладна ведаю, што некаторыя розных кампанентаў IOS рэгістрацыі падзей па-рознаму. Кнопкі, напрыклад, выкарыстоўваць гэтыя IBActions. Тэкставыя палі, з другога боку, будзем выкарыстоўваць дэлегаты. Мы бачым, і вы можаце глядзець усе, што ўнутры дакументацыі. Дарэчы, там на самай справе тоны матэрыялу карыстацкі інтэрфейс ўбудаваны ў IOS для вас, так, напрыклад, так, як я зрабіў, якія кажуць, зрабіў у правым ніжнім куце Я абраў у гэтым тэкставым полі. Я прыйшоў сюды. Я пракручваецца трохі ўніз, каб вярнуць ключ, і я магу на самой справе зрабіць гэта цэлая куча рэчаў, напрыклад, калі я хачу сказаць, што экстранага выкліку, а я магу гэта зрабіць, што зусім выпадкова, і я не ведаю, чаму ёсць убудаваны выкліку службы экстранай дапамогі кнопкі, але няма, ён кажа, экстраны выклік у рэчаіснасці маленькай літары. Там вы ідзяце. Вызначана вывучыць усе гэтыя розныя варыянты ў IOS. Любыя пытанні па дэлегаты? Зноў жа, цікавы шаблон дызайну, што вы павінны быць у курсе. Добра, давай наступны зірнем на табліцу выгляд. Табліцы ў асноўным, што спіс прадметаў, якія на ўсім працягу месцы ў IOS. Калі вы праглядаеце ўсе вашы кантакты, вы глядзіце на налада старонкі, і такі спіс рэчаў, называецца табліцы. Рэалізацыя табліцы ў IOS даволі простая. Замест таго класа, які спускаецца ад UIViewController як мы рабілі раней мы проста павінны сказаць, а не усе UIViewController ж я хачу зрабіць, Я кажу ўсё UITableViewController ж я хачу зрабіць, так што проста дадае некаторыя дадатковыя рэчы, якія цалкам для нас зрабіў. Нам трэба зрабіць вельмі мала ў асноўным запоўніць прабелы ўнутры табліцы. Для таго, каб адлюстраваць табліцу мне трэба адказаць на некалькі пытанняў. Першае пытанне, які мне трэба адказаць, колькі секцый у табліцы? Калі вы праглядаеце ваша прыкладанне кантакты вы заўважыце, што гэта свайго роду арганізавана як, то ў вас ёсць сняданак, і ў вас ёсць, што трохі на поўдзень загалоўку. Кожны з іх завецца падзел. Вы можаце або не трэба гэта. Першае, што вам трэба зрабіць, гэта рэалізаваць метад называецца TableView: numberOfSectionsInTableView. Гэта проста вяртае колькі секцый ў вас ёсць, так што можна сказаць, вяртаць адно калі ў вас ёсць адна вялікая ўяўленне табліцы. Наступнае пытанне, які IOS павінен ведаць, колькі радкоў у вас ёсць? Напрыклад, вы праглядаеце табліцы. У вас ёсць фіксаванае колькасць песень, вы глядзіце на або фіксаванае колькасць кантактаў. Калі вы мяне, вядома, не так шмат, і вось як IOS ведае, колькі клетак на форуме. Зноў жа, гэта можа сказаць нешта накшталт вяртання 3. Мая табліца мае 3 шэрагу. Нарэшце, IOS павінен ведаць, што кожная клетка выглядае, Так што гэта на самай справе збіраюся зрабіць, гэта выклікаць гэты метад тут, гэта TableView: cellForRowAtIndexPath. Гэта будзе выклікаць гэты метад на кожнае вочка ўнутры табліцы. Як гэта ведаю, колькі разоў гэта назваць? Ну, вы сказалі, што ўнутры колькасць радкоў у раздзеле. Мы будзем называць гэта на кожнай з нашых клетак, і ўнутры гэта дзе вы можаце рабіць рэчы, як набор тэксту альбо сказаць вам, што гэта трохі сіняй кнопкі на правай баку робіць. Шаблон для атрымання гэтых клетак, мы збіраемся выкарыстаць гэты метад называецца dequeueReusableCellWithIdentifier. Objective-C на самай справе вельмі добра вядомыя за смешную даўжыня іх імёны метадаў, і гэта сапраўды добрая гаворка прыклад. Што гэты метад робіць гэта проста кажа, што я хачу, каб ты даў мне камеру. Проста рэч IOS. Калі ў вас ёсць нешта накшталт 100000 кампазіцый на стаўку IOS, што не хочаце зрабіць, гэта вылучыць 100000 клетак, таму што калі вы ў верхняй частцы спісу, вам сапраўды трэба вылучыць памяць на вочка, 99000 радкоў ўніз? Не, таму што, як вы пракруткі можна вылучыць віды, як вы ідзяце наперад. Гэта робіцца для вас. Вам не прыйдзецца турбавацца аб тым, што ўсе дурныя рэчы прадукцыйнасці. Усе вы кажаце, вы выклікаеце гэты метад dequeueReusableCellWithIdentifier, і гэта кажа, добра, калі вам трэба, каб я збіраюся стварыць новую вочка для вас. Але калі вы ў ніжняй частцы табліцы, і вы ўжо вылучыў некаторыя клеткі у верхняй частцы табліцы, што вы сапраўды не спатрэбяцца ў бліжэйшы час Я збіраюся даць вам адзін з тых спіне замест выдзялення новага, , Так што гэта добры заклапочанасць прадукцыйнасці. Вы не павінны вылучаць клеткі самастойна. Гэта дасць вам назад у клетку. Гэта збіраецца вярнуцца да вас вочку аб'екта. Калі ў вас ёсць клетка аб'екта, вы можаце рабіць рэчы да яго. Вы можаце ўсталяваць тэкст вочкі з гэтым уласцівасцю называецца тэкставая пазнака. Можна дадаць, што стрэлка на правым або іншыя выпадковыя рэчы З гэтым другім уласцівасцю accessoryType, і гэтак далей і гэтак далей. Давайце зірнем на самай справе рэалізацыі табліцы цяпер. Калі я стварыў гэты праект а не гаварыць адно прыкладанне гледжання, я на самай справе прыйшлі сюды на майстар-дэталь прыкладанняў, а так у асноўным гэта адпавядае пошты прыкладанне на IPad з табліцай, від на левы, а затым змесціва справа. На стаўку або iPhone гэта будзе адпавядаць аднаму ўяўленне табліцы. Вось дзе я атрымаў свой стартавы код. Давайце спачатку паглядзім на Дзень беларускай салідарнасці. Усё гэта было зроблена для мяне, у асноўным створана. Гэтая панэль навігацыі паказаў мне, што напрыклад клеткі могуць выглядаць, і я магу двойчы пстрыкніце гэтым, змяніць назву. Любыя іншыя праблемы карыстацкага інтэрфейсу я магу справіцца там. У загалоўку файла выглядае вельмі проста. Замест таго, кажуць, што гэта UIViewController мы зараз гаворым, што гэта TableViewController, таму мы ведаем, што мы хочам заклікаць усіх гэтых метадаў табліцу. Далей я хачу стварыць ўласцівасць, якое збіраецца прадстаўляць рэчы ў маёй табліцы. Гэтая табліца будзе адвольна адлюстроўваць Спіс садавіны, і таму мне трэба стварыць некалькі масіваў , У якой я магу ўставіць свой плён. Усярэдзіне майго файла рэалізацыі Першае, што я хачу зрабіць , Я хачу пераканацца, што я ініцыялізаваць гэты масіў. Я сказаў ідэнтыфікатар ініцыялізацыі, стварыў свой плён масіва, і я дадаю 4 рэчы да яго, адным з якіх з'яўляецца значна больш спрэчным, чым іншыя 3. І зараз у мяне ёсць масіў памерам 4. Мы падтрасаючы яго ў CS50. Цяпер у мяне ёсць масіў памерам 4. Цяпер я збіраюся пачаць адказваць на гэтыя пытанні, і на самай справе, Калі я стварыў гэта прыкладанне ўсё гэта ўжо было зроблена для мяне. У мяне не было набіраць з ліку секцый у выглядзе табліцы. Ён ужо быў там, і я запаўняючы прабелы. Колькі раздзелаў у мяне ёсць? One. Усё зроблена. Колькі радкоў у мяне ёсць? Ну, у мяне па адным радку для кожнага плёну, дык гэта колькасць з'яўляецца уласцівасцю любой масіў, які кажа, наколькі ён вялікі? Вось колькі радкоў у мяне ёсць. Нарэшце, я павінен сказаць, што ж кожная клетка выглядае? Я збіраюся сказаць dequeueReusableCellWithIdentifier. Зноў жа, гэта была ўжо напісана для мяне. Я не павінен быў зрабіць гэта сам, і я хачу, каб вярнуцца гэтая клетка ў гэтым месцы. Памятаеце, што мы называем гэтым жа метадам, на кожную клетку, і гэты аргумент тут, гэты аргумент indexPath, кажа, што радкі я цалі Калі я скажу, indexPath.row тут гэта будзе 0, то гэта будзе 1, то гэта будзе 2, і гэта так, я ведаю, што клетка я ў цяперашні час адлюстравання. Я хачу, каб усталяваць тэкст вочкі з дапамогай гэтага ўласцівасці textLabel пайсці ў маю садавіна масіў і атрымаць аб'ект, які адпавядае кожнай радку. Калі гэта радок, я цяпер ўстаноўка Тэкст уласнасці ў радок. Я магу зрабіць яшчэ адну рэч. Я таксама магу зарэгістраваць апрацоўшчык падзей па кожнаму з клеткі, таму, калі я націскаю кожнай з гэтых клетак гэта didSelectRowAtIndexPath, гэта будзе называцца для мяне, так проста, вызначыўшы гэта, я зараз можа апрацоўваць тое, што адбываецца Пры націску на вочка, і зноў, мы перадаем у якой клеткі пастукаў так што мы можам выкарыстоўваць гэтую ж апрацоўшчык падзеі для ўсіх нашых клетак. Зноў жа, гэта тое, што IOS робіць для мяне. Давайце адлюстравання іншай раздражняльных усплываючых , Які проста кажа, што вы выбралі тое, дзе нешта будзе радок аб'екта. Калі я запускаю гэта, я буду мець гэта добры выгляд табліцы па адной радку для кожнага з гэтых пладоў, і калі я націсніце на адну ён кажа мне, што адбылося. Сэнс? Давайце пабудуем крыху больш Комплекс прыкладанняў, столькі, колькі вы абралі націснуўшы памідор. Добра ў Дзень беларускай салідарнасці яно не толькі дапаможа нам экранаў дызайн індывідуальна, гэта таксама дапаможа нам звязаць разам усё наша прыкладанне, так што канчатковае дадатак мы будзем Будынак гэта добрае спартыўных навін чытач, і таму ён будзе мець некалькі экранаў, і таму я магу на самой справе ўяўляюць кожны з гэтых некалькіх экранаў на Дзень беларускай салідарнасці і я магу паменшыць маштаб і ўбачыць маё прыкладанне ад высокага ўзроўню. Для таго, каб стварыць новы элемент у маёй раскадроўкі гэта сапраўды проста ўнутры Interface Builder. Калі я хачу дадаць яшчэ адзін экран для гэтага, напрыклад, Я спачатку не паменшыць маштаб з дробкай маштабу, што Яблык любіць так шмат, і тут, перш чым я шукаць кнопку і я перацягнуць кнопку калі я хачу, каб стварыць новы экран я магу на самой справе проста перацягнуць Увесь выгляд кантролера, так што калі я бяру гэта, выцягнуць яго сюды, Гэй, ёсць яшчэ адзін экран, і цяпер з дапамогай гэтага ж файла раскадроўкі Я магу мець усе экраны ўнутры майго прыкладанні, і я магу паменшыць маштаб і паглядзець, як яны ўзаемадзейнічаюць. Яны не будуць узаемадзейнічаць яшчэ няма. Тое, якім чынам гэтыя 2 экрана ўзаемадзеяння з'яўляецца вы вызначаеце адносіны. Вы можаце сказаць, што гэта ў асноўным экране, пры націску на гэтую кнопку, Я хачу, каб слізгаць па гэтаму новаму экране. Гэта азначае, што існуе такая сувязь паміж  На першым экране і на другім экране. Вам прыйдзецца ў асноўным стрэлку ад гэтай кнопкі на другі экран кажа, што, калі вы націскаеце на гэтую кнопку, вось дзе я хачу пайсці. Гэтак жа, як мы кантралюем пстрыкнула, і пацягнуў для вызначэння гэтых кропак Мы збіраемся зрабіць тое ж самае для вызначэння гэтых segues. Мы ўбачым, напрыклад, для гэтага, і перш, чым мы на самай справе пераход з аднаго экрана на іншы IOS досыць добры, каб выклікаць гэты метад называецца prepareForSegue, і гэта тое, дзе мы можам пачаць адпраўка дадзеных з аднаго прыкладанні ў іншае. У гэтым прыкладзе мы збіраемся глядзець на гэта будуць у асноўным дазваляюць нам для фільтрацыі бейсбольных каманд на лігі і падраздзяленняў. Калі я выбіраю лігі, напрыклад, я хачу пераходзе да майго наступнага экране, дзе я магу паказаць усе падраздзяленні У гэтай лізе або ўсе розныя каманды. Мне трэба адправіць на той экране тое, што каманды вы павінны праглядаў. Для гэтага я збіраюся скарыстацца гэтым метадам тут. Нарэшце, проста выпадковая кропка на IOS. Калі вы хочаце захоўваць дадзеныя ёсць тое, што называецца асноўнымі дадзенымі, які на самай справе выгляд складана працаваць. Вы таксама можаце выкарыстоўваць SQL для захоўвання дадзеных, які, зноў жа, добра, але выгляд на больш складаныя боку ў працы, але IOS таксама падтрымлівае гэтыя сапраўды цікавыя рэчы называюцца спісы уласцівасцяў, і спіс уласцівасцяў гэта проста файл, які ўяўляе пар ключ-значэнне. Вы вызначаеце спіс ключоў, а вы кажаце гэтая клавіша будзе масівам. Гэты ключ будзе радок, і ў асноўным усё, што вы можаце зрабіць У JSON вы можаце зрабіць ўнутры спісу уласцівасцяў, і такім чынам, гэта сапраўды прыемна дазваляе нам працаваць з некаторымі дадзенымі. Напрыклад, у мяне ёсць гэтая Teams.plist, што я стварыў. Я стварыў новы файл PLIST, і я магу дэталізаваць. Гэта слоўнік, гэта слоўнік, гэтыя радкі, , Так што гэта добры графічнага прадстаўлення дакументаў JSON ці проста набор пар ключ-значэнне, і так гэта дадзеныя, якія я буду працаваць унутры майго прыкладанні. Давайце спачатку ідзі сюды. У нас ёсць шмат іншых файлаў у цяперашні час. Але давайце спачатку прыехаць сюды на Дзень беларускай салідарнасці. Дзень беларускай салідарнасці і тут, калі я магу паменшыць маштаб- Цяпер мы можам бачыць, што гэта паток маё прыкладанне. Я першы пачну на гэтым экране. Я збіраюся перайсці да гэтага экрану, і я збіраюся перайсці да гэтага экрану, і мы бачым тут, што калі я як бы перамясціць адзін з гэтых вакол мы гэтыя стрэлкі, якія ідуць ад гэтага да гэтага, і тое, як я вызначаю, што стрэлка была, калі я павялічу трохі, і калі я прыйду да гэтага пункту гледжаньня кантролера, і вось клетка, і я хачу сказаць, што, калі вы націснеце на вочка Я хачу, каб слізгаць на іншы экран. Я магу проста ўтрымліваць кантроль, пракруткі па ледзь-ледзь, ўтрымлівайце кантроль, перацягнуць гэтую вочка зноў і адпусціць. І тут мы кажам, што той пераход, які вы жадаеце выкарыстоўваць? Вы хочаце выкарыстаць гэты слайд рэч, якая называецца штуршок? Вы хочаце, каб слізгаць знізу ўверх? Гэта называецца мадальным. І як толькі я націскаю адну з іх, ён збіраецца зрабіць гэтую стрэлку для мяне, і гэта азначае, што я на самой справе апрацоўваюцца, што адбываецца, калі я націскаю гэтую кнопку ў графічным выглядзе. Я не пісаць ніякага кода на самай справе слізгаць ад аднаго экрана да наступнага. Я вызначыў гэта візуальна ўнутры Interface Builder. Калі я націскаю на гэтую стрэлку, мы бачым, што Я даў гэтую рэч імем. Я назваў яго showDivisions, і гэта так, што я магу ведаць што пераход можа адбыцца, і мы ўбачым, чаму толькі ў сек. Вось як я падключыў розных экранах у маё прыкладанне. Калі б гэта была кнопка, напрыклад, замест табліцы, Я мог кантраляваць націснуць на кнопку, перацягнуць на наступны экран, і вось як я магу зрабіць навігацыю такім чынам. Сапраўды хутка, калі б мы ўступілі ў MasterViewController, зноў жа, мы проста збіраемся вызначыць спіс рэчаў, , Які будзе адлюстроўвацца ў выглядзе табліцы. Тут я кажу, што я хачу, каб вы, што PLIST файл, і я хачу, каб вы загрузіце яго ў слоўнік, і як толькі вы гэтага слоўніка, я збіраюся адказаць на гэтыя ж пытанні зноў. Вось шэраг раздзелаў. Адзін з іх, значыць па адным радку для кожнай лізе, і тэкст кожнай ячэйкі павінны быць альбо першым, першая ліга, другая ліга, і гэтак далей. Нарэшце, я збіраюся выкарыстоўваць гэты метад, які мы толькі што бачылі называецца prepareForSegue, і гэта метад, які будзе звольнены, калі я націскаю на адной з гэтых радкоў і, такім чынам, актывацыя, што пераход што я стварыў з дапамогай стрэлак. Гэта кажа, што ў мяне можа быць некалькі адносін з аднаго экрана на іншы. Калі ў мяне ёсць 2 кнопкі і кожную кнопку, Вы трапіце на іншы экран Я збіраюся мець 2 segues, 1 для кожнай кнопкі. Але гэта prepareForSegue, зноў жа, будзе паўторна для кожнага з розных адносін, дык гэта значыць, што мне патрэбен спосаб выяўлення, калі націснуць першай кнопкі або націску на другую кнопку. Памятаеце, калі я даў, што пераход назва, гэта showDivisions, Вось як я цяпер ведаю, што гэта пераход, які быў актываваны. Усё, што я хачу зрабіць, гэта я хачу сказаць, Я хачу высветліць, што я толькі што стукнуў, і так, каб атрымаць гэта, я магу сказаць, што я хачу indexPath для абранай радкі, памятаю indexPath проста кажа, дзе я толькі што націснулі, і тады я хачу сказаць, што я хачу, каб высветліць, куды я іду. Гэта destinationViewController, гэта ўласцівасць пераходзіць. Вось на экране я збіраюся, так што я ведаю, што на экране я збіраюся называецца DivisionsViewController таму што я стварыў гэты клас, І вось цяпер, калі я скажу d.divisions Я цяпер усталяваўшы ўласцівасць шоу-кантролер я збіраюся пайсці. Гэта, як я перадача дадзеных з аднаго экрана на іншы экран. Проста гледзячы на ​​гэтую DivisionsViewController Вы можаце бачыць тут, што ў файле. Г ёсць тое, што маёмасць падраздзялення, і вось што я ў асноўным запаўнення, так вось як я ведаю, што я адлюстраванні адпаведнага падраздзялення лігі, што я націснуў, і зноў, фактычны выгляд табліца выглядае амаль гэтак жа, толькі адказваючы на ​​гэтыя 3 простых пытання, а таксама выяўленне што адбываецца, калі вы пераходзіце да наступнага экране. Яшчэ пару іншых рэчаў. Вы заўважылі, у верхняй тут, што замест таго, каб гаварыць # ўключыць Я зараз кажу # імпартаваць. Гэта толькі Objective-C рэч. Імпарт у асноўным лепш версіі ўключаюць у сябе, і, напрыклад, мы павінны ведаць, што гэты клас, таму я не магу проста сказаць DivisionsViewController. Калі б мы не хэштэгам standardio.c ўнутры нашага. Файл з кампілятар не ведаў, што Printf было. Сапраўды гэтак жа, калі я не імпартаваць DivisionsViewController кампілятар на самай справе не ведае, што DivisionsViewController ёсць. Проста пераканайцеся, што ў Вашым розныя. Файлаў м вы пераканаецеся, што імпарт адпаведная. ч. файлы, так што кампілятар не ведае, што адбываецца. Нарэшце, тое, што Apple, у канчатковым рахунку, робіць гэта паказаць некаторыя дадзеныя з дапамогай вэб-прагляду, і г.д. Ваш погляд аб'екта, у якім Вы можаце ўстаўляць трохі вэб-браўзэр ўнутры вашага прыкладання. Усё, што вам трэба зрабіць, гэта падаць URL вашага вэб-браўзэра, так што я хачу пайсці ў mlb.mlb.com, і гэта, як я магу атрымаць доступ да хатняй старонкі для кожнай каманды, і так, перадаючы ў гэтым URL Ваш можа адлюстроўвацца гэта для мяне, і я магу праглядаць вакол, і трэнажор выкарыстоўваецца той. Цяпер гэта прыйшло ад маіх PLIST. Калі я націскаю гэтую гэтага таксама прыйшлі з маіх PLIST, і гэта слізгаценне было перавалена шляхам вызначэння тых segues. Я націскаю гэтую і яшчэ адну, і цяпер вось мая UIWebView, таму проста так вось сайт для URL, якія я толькі ўбудаваныя, і ў мяне не было, каб справіцца з чым заўгодна з розуму. Гэта, як адлюстроўваць вэб-старонкі. Такія рэчы, як гэтая кнопку таму тут таксама дадзена мне цалкам бясплатна, таму што я вызначыў гэтыя адносіны выкарыстанні segues. Ёсць пытанні? Так. [Студэнт] Такім чынам, калі вы выкарыстоўваеце ідэнтыфікатар, вам ніколі не давядзецца нічога бясплатна? Менавіта, калі вы тэлефануеце ідэнтыфікатар ініцыялізацыі і вам не прыйдзецца вызваліць яго. IOS будзе апрацоўваць усё гэта для вас. Гэта выдатна, і ты не парушаючы ніякіх правілаў. Так. [Студэнт] Калі б вы былі, каб уключыць больш каманд, якія могуць змясціцца на экране, будзе аўтаматычна мець опцыю пракруткі, ці гэта нешта трэба дадаць? Менавіта так, калі б я меў больш каманд, напрыклад, ён бы аўтаматычна апрацоўваць пракруткі для мяне, і ўсе праблемы прадукцыйнасці з вялізным сталом таксама ажыццяўляецца цалкам для мяне. Іншыя пытанні? Усё гэта код будзе размешчаны. Мы як бы затушоўваецца крыху больш дробных дэталяў, але рэчы, як усталяваць некаторыя ўласцівасці для вэб-прагляду проста рэчы, якія вы можаце атрымаць, перайшоўшы па спасылцы дакументацыі Apple, што сапраўды, вельмі прыгожа выкладзеныя. У іх ёсць шмат узораў прыкладанняў і прыклад прызначэнне розных API, так вызначана праглядзець іх, калі можна. Проста некаторыя карысныя спасылкі, якія вы, магчыма, захочаце зірнуць на. Вось некаторыя карысныя кіраўніцтва дакументацыі. URL-адрасы, масіўныя, так што яны скарочаныя. Гэта першая з'яўляецца цэлай бібліятэкі дакументацыі. Там мала бараў пошуку, так што калі вы пачынаеце набіраць кнопкі яна пачне даваць вам усю інфармацыю пра ўсё, што можна зрабіць з кнопкай. Я таксама уключыў праграмавання Table View Guide. Ён апрацоўвае табліцы прадстаўлення ў значна больш падрабязна, як рабіць такія рэчы, як дынамічна дадаваць або рэдагаваць клетак клеткі або выдаліць іх. Там шмат узораў прыкладанняў ад Apple, якая пакажа вам, як гэта зрабіць, І, нарэшце, гэтая апошняя з'яўляецца Асноўныя прынцыпы ўліку чалавечага інтэрфейсу, і гэта ў асноўным некаторага абмеркавання кампанентаў карыстацкага інтэрфейсу, такія рэчы, як не зрабіць кнопку, што на 4 пікселя на 4 пікселя. Гэта дрэнная ідэя, і іншыя рэчы, якія Яблык хоча, каб вы заахвочванне добрага дызайну. Любы апошніх пытанняў, перш чым мы скончым? Добра, безумоўна, не саромейцеся-мы будзем мець адмысловыя этыкеткі на абмеркавання. Мы павінны IOS адзін, так што дакладна не саромейцеся выкарыстоўваць гэта. Калі вы хочаце працаваць са сваімі аднакласнікамі па праектах або дапамагчы высветліць некаторыя выпадковыя рэчы IOS не саромейцеся, напішыце мне, і, безумоўна, праглядаем увесь код онлайн, таму што толькі ў інтарэсах эканоміі часу мы неяк замоўчваецца больш тонкозернистой дэталі рэчы. Але калі няма, то поспеху ў вашых праектах IOS, і я спадзяюся, што ў нас ёсць вялікі прыток прыкладанняў у App Store. [CS50.TV]