1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminari] [iOS: Escriptura d'aplicacions Like a Boss] 2 00:00:02,000 --> 00:00:04,000 [Tommy MacWilliam] [Harvard University] 3 00:00:04,000 --> 00:00:08,000 [Aquesta és CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Molt bé, tots, benvinguts a iOS: Escriptura d'aplicacions com un cap. 5 00:00:12,000 --> 00:00:16,000 Aquest seminari se centrarà en l'escriptura d'aplicacions per l'iPhone 6 00:00:16,000 --> 00:00:19,000 i alhora escriure aplicacions per l'iPad, i pel que estem bàsicament va a caminar a través de 7 00:00:19,000 --> 00:00:23,000 un parell d'exemples diferents de com fer una aplicació, un joc tan simple com Tic Tac Toe, 8 00:00:23,000 --> 00:00:26,000 o si vostè està més interessat en fer una aplicació com una mena de lector de notícies 9 00:00:26,000 --> 00:00:30,000 o alguna cosa que interactua amb l'Internet parlaré d'això també. 10 00:00:30,000 --> 00:00:32,000 Aquí està la nostra agenda breu. 11 00:00:32,000 --> 00:00:36,000 >> Aplicacions IOS estan escrits en un llenguatge anomenat Objective-C, 12 00:00:36,000 --> 00:00:39,000 pel que aquest és una mica similar a C, però en realitat no en tots, 13 00:00:39,000 --> 00:00:41,000 pel que anem a parlar una mica sobre el llenguatge en si mateix 14 00:00:41,000 --> 00:00:45,000 i després com construir aplicacions per l'iPhone usant aquest programa aplicació anomenada XCode, 15 00:00:45,000 --> 00:00:48,000 que si no ho has descarregat encara no dubti a iniciar la descàrrega ara mateix. 16 00:00:48,000 --> 00:00:50,000 És diversos gigabytes. 17 00:00:50,000 --> 00:00:54,000 Ha d'estar lliure en l'App Store, així que vostè haurà de tenir un Mac 18 00:00:54,000 --> 00:00:57,000 idealment executant l'última versió d'OS X. 19 00:00:57,000 --> 00:00:59,000 Si no és així, cap problema. 20 00:00:59,000 --> 00:01:02,000 Comptem amb equips Mac al centre de la ciència disponible per al seu ús 21 00:01:02,000 --> 00:01:05,000 amb XCode instal · lat, de manera que no dubti en utilitzar els de desenvolupament. 22 00:01:05,000 --> 00:01:07,000 Si vols fer una aplicació, però no tenen una Mac, no et preocupis. 23 00:01:07,000 --> 00:01:09,000 Hi ha un munt de recursos del campus per això. 24 00:01:09,000 --> 00:01:15,000 I llavors anem a cobrir dos grans exemples d'aplicacions diferents que vostè pot fer. 25 00:01:15,000 --> 00:01:19,000 Objective-C és tècnicament el que es diu un superconjunt de C. 26 00:01:19,000 --> 00:01:24,000 Això vol dir que qualsevol codi C és també vàlid Objective-C codi. 27 00:01:24,000 --> 00:01:29,000 Això vol dir que tipus de conducte fes en algunes característiques addicionals a C. 28 00:01:29,000 --> 00:01:33,000 Algunes d'aquestes característiques inclouen no haver d'escriure sempre malloc nou, gràcies a Déu, 29 00:01:33,000 --> 00:01:36,000 sense haver de preocupar sobre els punters estúpides i alliberar-los i tot això 30 00:01:36,000 --> 00:01:40,000 que odiava de C, i és una mena de passat en Objective-C. 31 00:01:40,000 --> 00:01:43,000 >> Ara, Objective-C també té una biblioteca estàndard molt més gran, 32 00:01:43,000 --> 00:01:47,000 de manera que hi ha molta més funcionalitat que et passa per dins lliures de Objective-C. 33 00:01:47,000 --> 00:01:50,000 Recordes quan estàvem escrivint PHP ens vam adonar que hem passat de 34 00:01:50,000 --> 00:01:54,000 aquest petit llenguatge per a la biblioteca gegant de totes aquestes coses boges que pot fer. 35 00:01:54,000 --> 00:01:56,000 El mateix succeeix en iOS. 36 00:01:56,000 --> 00:01:59,000 Hi ha objectes per coses com el calendari budista, i res realment 37 00:01:59,000 --> 00:02:05,000 que possiblement pot pensar probablement ja existeix en l'aplicació de Objective-C. 38 00:02:05,000 --> 00:02:08,000 La part objectiva de Objective-C fa referència a alguna cosa 39 00:02:08,000 --> 00:02:11,000 anomenat Programació orientada a objectes. 40 00:02:11,000 --> 00:02:14,000 Això és una mica d'un concepte nou, però en realitat hem après en la seva majoria 41 00:02:14,000 --> 00:02:17,000 molts d'aquests conceptes ja. 42 00:02:17,000 --> 00:02:19,000 La idea darrere de Programació orientada a objectes és que vostè va a estructurar 43 00:02:19,000 --> 00:02:23,000 una gran part del seu codi entorn d'aquestes coses anomenades classes, 44 00:02:23,000 --> 00:02:26,000 i aquestes classes són realment glorificat estructures. 45 00:02:26,000 --> 00:02:30,000 A l'interior d'una estructura que bàsicament diu aquí és una cosa, 46 00:02:30,000 --> 00:02:32,000 i això pot tenir membres. 47 00:02:32,000 --> 00:02:35,000 Per exemple, un node en una llista enllaçada podria tenir altres coses 48 00:02:35,000 --> 00:02:38,000 com un valor, un punter al següent node a la llista, 49 00:02:38,000 --> 00:02:44,000 i junts aquest punter i el valor que compon aquesta instància d'una estructura. 50 00:02:44,000 --> 00:02:47,000 Les classes són molt similars, excepte 51 00:02:47,000 --> 00:02:50,000 classes també poden tenir funcions dins d'ells. 52 00:02:50,000 --> 00:02:54,000 Quan declarem una estructura, només podríem dir int n o * següent node. 53 00:02:54,000 --> 00:02:57,000 >> Ara amb Objective-C es pot posar realment les funcions 54 00:02:57,000 --> 00:02:59,000 dins d'aquestes coses. 55 00:02:59,000 --> 00:03:03,000 Una altra cosa que pots fer és classes poden heretar d'altres classes de dades. 56 00:03:03,000 --> 00:03:07,000 Per exemple, estarem buscant en un munt de classes incorporades de Objective-C. 57 00:03:07,000 --> 00:03:11,000 Una d'elles podria ser la classe que representa la visió d'una pantalla, 58 00:03:11,000 --> 00:03:14,000 i així, dient que vull aplicar el meu propi punt de vista 59 00:03:14,000 --> 00:03:18,000 que bàsicament diu a algú a Apple, la gent probablement molt agradable, 60 00:03:18,000 --> 00:03:21,000 escriure aquesta classe per a mi, i maneja les coses com mostrar botons 61 00:03:21,000 --> 00:03:25,000 o la prestació de la pantalla, i que seria molt dolorosa 62 00:03:25,000 --> 00:03:28,000 aplicar tota la funcionalitat que nosaltres mateixos, i així simplement 63 00:03:28,000 --> 00:03:31,000 heretant dades podem dir tot el que vas fer en aquesta classe 64 00:03:31,000 --> 00:03:34,000 Jo també vull dins de la meva classe, i després em vaig a fer algunes altres coses, 65 00:03:34,000 --> 00:03:37,000 és a dir, implementar una aplicació. 66 00:03:37,000 --> 00:03:40,000 Això és el que significa la paraula herència. Anem a veure un exemple més concret. 67 00:03:40,000 --> 00:03:42,000 >> I, finalment, la clau de programació orientada a objectes és que 68 00:03:42,000 --> 00:03:45,000 que condueix a la encapsulació de dades. 69 00:03:45,000 --> 00:03:48,000 En alguns dels nostres butlletins de problemes que podríem tenir aquestes grans variables globals, 70 00:03:48,000 --> 00:03:51,000 i globals a tot arreu, i així és com ens agradaria portar un registre d'estat. 71 00:03:51,000 --> 00:03:55,000 Amb les classes podem començar encapsular informació dins d'un objecte. 72 00:03:55,000 --> 00:03:58,000 Si tenim una pantalla en la nostra aplicació, que en realitat no necessita tenir cap dada de 73 00:03:58,000 --> 00:04:01,000 altra pantalla a l'interior de la nostra aplicació que, 74 00:04:01,000 --> 00:04:04,000 pel que al encapsular les coses dins de les classes d'aquesta realitat condueix 75 00:04:04,000 --> 00:04:08,000 per disseny de codi molt millor, i això és possible amb algunes de les característiques addicionals 76 00:04:08,000 --> 00:04:11,000 de Objective-C. 77 00:04:11,000 --> 00:04:15,000 Avís previ, la sintaxi per Objective-C és el banano. 78 00:04:15,000 --> 00:04:19,000 Això s'assembla a res que hàgim vist abans, 79 00:04:19,000 --> 00:04:22,000 pel que és una mica d'una corba d'aprenentatge per acostumar 80 00:04:22,000 --> 00:04:24,000 Què diables vol dir això? 81 00:04:24,000 --> 00:04:27,000 Però una vegada que passes aquesta corba d'aprenentatge inicial és molt, molt suau 82 00:04:27,000 --> 00:04:29,000 per començar a escriure aplicacions. 83 00:04:29,000 --> 00:04:33,000 >> Per declarar una classe, per no dir aquesta és la meva classe, existeix, 84 00:04:33,000 --> 00:04:35,000 i potser aquí hi ha algunes coses que vaig a definir més endavant, 85 00:04:35,000 --> 00:04:38,000 Vaig a dir @ interface. 86 00:04:38,000 --> 00:04:41,000 Vaig a dir @ interface. Vaig a donar la meva classe un nom. 87 00:04:41,000 --> 00:04:43,000 I més tard en un altre lloc vaig a dir @ end, 88 00:04:43,000 --> 00:04:46,000 i tot enmig de la interfície i l'extrem @ @ 89 00:04:46,000 --> 00:04:48,000 serà la meva classe. 90 00:04:48,000 --> 00:04:51,000 Això serà el que hi ha dins dels nostres arxius. H. 91 00:04:51,000 --> 00:04:55,000 Igual que en C els arxius. H bàsicament va dir aquí hi ha algunes coses que existiran. 92 00:04:55,000 --> 00:04:57,000 No estic dient necessàriament el que fan, però, 93 00:04:57,000 --> 00:04:59,000 el compilador necessita saber que ells existeixen. 94 00:04:59,000 --> 00:05:04,000 Més tard, a l'interior de la nostra. Arxius m-m perquè per Objective-C 95 00:05:04,000 --> 00:05:08,000 és on estem en realitat definirà el que aquestes classes ho fan. 96 00:05:08,000 --> 00:05:11,000 Igual que els nostres arxius. C, proporcionem una implementació per les funcions. 97 00:05:11,000 --> 00:05:15,000 Dins de la nostra. M fitxer que anem a dir aquí és el que totes les funcions 98 00:05:15,000 --> 00:05:18,000 dins de la meva classe-el que tots fan. 99 00:05:18,000 --> 00:05:22,000 I, finalment, a l'interior d'una estructura que podríem dir dins de les claus 100 00:05:22,000 --> 00:05:25,000 int, n o node següent * 101 00:05:25,000 --> 00:05:28,000 i en Objective-C que utilitzarem la paraula clau @ property, 102 00:05:28,000 --> 00:05:31,000 i això és el que definirà les propietats, 103 00:05:31,000 --> 00:05:36,000 o les funcions no-que són una part de les meves classes. 104 00:05:36,000 --> 00:05:40,000 >> Trucar a funcions en Objective-C és també plàtans. 105 00:05:40,000 --> 00:05:43,000 Quan declarem funcions en C que deia alguna cosa així com int foo 106 00:05:43,000 --> 00:05:46,000 i obert parin i després li va donar una llista d'arguments. 107 00:05:46,000 --> 00:05:51,000 Això és el que declara els mètodes o funcions es veu com en Objective-C. 108 00:05:51,000 --> 00:05:54,000 Si vull declarar una funció o un mètode 109 00:05:54,000 --> 00:05:58,000 on jo estic dient mètode és en realitat una funció que és un membre d'una classe, 110 00:05:58,000 --> 00:06:01,000 tan amable de intercanviables, però no realment, 111 00:06:01,000 --> 00:06:03,000 tan dins del meu mètode que voleu crear un nou mètode. 112 00:06:03,000 --> 00:06:06,000 Es tornarà cap valor, així que serà de tipus void. 113 00:06:06,000 --> 00:06:08,000 Aquest és el tipus de retorn de la meva funció. 114 00:06:08,000 --> 00:06:11,000 Ara tenim parèntesi aquí perquè-no ho sé. 115 00:06:11,000 --> 00:06:14,000 A continuació serà el nom del meu funció, 116 00:06:14,000 --> 00:06:17,000 i, finalment, tenim un punt i coma igual que vam tenir en C. 117 00:06:17,000 --> 00:06:19,000 El que és nou aquí és que aquest tipus aquí. 118 00:06:19,000 --> 00:06:22,000 Aquest guió és realment necessari, i és el que aquest diu que 119 00:06:22,000 --> 00:06:26,000 Aquest mètode ha de ser cridat aquí a una instància d'una classe. 120 00:06:26,000 --> 00:06:29,000 >> Després declarem nostres estructures és probable que deia alguna cosa així com 121 00:06:29,000 --> 00:06:32,000 n struct node, i que en realitat va crear 122 00:06:32,000 --> 00:06:35,000 o instàncies d'una d'aquestes estructures per tal que jo podia començar a treballar 123 00:06:35,000 --> 00:06:38,000 amb el que hi ha dins d'ella, de manera que aquest guió significa que hem de 124 00:06:38,000 --> 00:06:41,000 instància de la classe de la mateixa manera que nosaltres instància que struct 125 00:06:41,000 --> 00:06:43,000 abans de poder trucar a aquest mètode en ell. 126 00:06:43,000 --> 00:06:46,000 Si vull començar a afegir arguments als meus mètodes 127 00:06:46,000 --> 00:06:48,000 es torna encara més plàtans. 128 00:06:48,000 --> 00:06:50,000 Aquí està el meu nom de mètode. 129 00:06:50,000 --> 00:06:53,000 Llavors em vaig a tenir dos punts, i després d'això que diu aquí dos punts ve alguns arguments. 130 00:06:53,000 --> 00:06:56,000 Aquest mètode pren un argument. 131 00:06:56,000 --> 00:06:59,000 El tipus del seu argument és un enter, i el nom d'aquest argument 132 00:06:59,000 --> 00:07:03,000 o la variable que vaig a començar a utilitzar dins del mètode es diu i. 133 00:07:03,000 --> 00:07:05,000 Un cop més, aquest és el mètode. Pren un argument. 134 00:07:05,000 --> 00:07:10,000 >> Si vols començar a afegir més arguments es posa més bananes 135 00:07:10,000 --> 00:07:13,000 en què tenim aquest còlon que diu aquí ve la meva llista d'arguments. 136 00:07:13,000 --> 00:07:15,000 Aquest primer argument és un nombre enter. 137 00:07:15,000 --> 00:07:17,000 Ara bé, aquest segon argument és interessant. 138 00:07:17,000 --> 00:07:20,000 La variable que vaig a utilitzar dins del meu funció 139 00:07:20,000 --> 00:07:23,000 es diu f, tan dins del meu funció que podria dir 140 00:07:23,000 --> 00:07:25,000 f + = 1 o alguna cosa així. 141 00:07:25,000 --> 00:07:30,000 Aquesta cosa aquí és, bàsicament, una clau perquè l'argument o paràmetre. 142 00:07:30,000 --> 00:07:34,000 Igual que hem tingut parells de clau-valor i una mica com JSON o arrays associatius 143 00:07:34,000 --> 00:07:37,000 Objective-C va prendre la decisió de dir, bé, només perquè sigui realment transparent 144 00:07:37,000 --> 00:07:39,000 quan es crida a un mètode que tots aquests paràmetres són 145 00:07:39,000 --> 00:07:41,000 De fet vaig a anomenar-los tots. 146 00:07:41,000 --> 00:07:45,000 Quan es crida a un mètode, que realment dirà andFloat, 147 00:07:45,000 --> 00:07:47,000 i llavors et passarà polz 148 00:07:47,000 --> 00:07:50,000 >> Curiosament, aquest no s'anomena, però són tots dels altres paràmetres, 149 00:07:50,000 --> 00:07:53,000 pel que si teníem un argument tercer que pogués dir andFloat 150 00:07:53,000 --> 00:07:56,000 i un altre flotador i així successivament. 151 00:07:56,000 --> 00:08:01,000 En trucar a aquests mètodes és de plàtans dels cursos, 152 00:08:01,000 --> 00:08:04,000 pel que si tinc un objecte, i es defineix un mètode anomenat foo, 153 00:08:04,000 --> 00:08:09,000 i vull dir-, en lloc de dir foo obrir / tancar parèntesi 154 00:08:09,000 --> 00:08:11,000 Vaig a obrir un suport. 155 00:08:11,000 --> 00:08:13,000 Aquest és el nom del meu mètode. 156 00:08:13,000 --> 00:08:17,000 Vaig a tancar el suport, i aquest és l'objecte, sóc a engegar. 157 00:08:17,000 --> 00:08:20,000 Recordeu, tots aquests mètodes existeixen dins de les classes 158 00:08:20,000 --> 00:08:23,000 ja que les classes poden tenir mètodes definits dins d'ells. 159 00:08:23,000 --> 00:08:26,000 >> Aquí he arbitràriament creat un objecte d'una classe, 160 00:08:26,000 --> 00:08:28,000 i aquesta és la sintaxi per fer-ho. 161 00:08:28,000 --> 00:08:31,000 Hi ha dos passos per crear un objecte. 162 00:08:31,000 --> 00:08:34,000 El primer pas és dir que vol assignar l'espai. 163 00:08:34,000 --> 00:08:37,000 Aquest és l'equivalent d'un malloc. No hem de dir malloc mai més. 164 00:08:37,000 --> 00:08:42,000 Ens va deixar la m, va fer Alloc, i substituir al c. Con M. 165 00:08:42,000 --> 00:08:47,000 Després d'alguna cosa Alloc que llavors hagi de inicialitzar. 166 00:08:47,000 --> 00:08:49,000 Bàsicament, quan es creen objectes potser voldreu tenir una mica de lògica 167 00:08:49,000 --> 00:08:53,000 que s'executa quan es crea, pel que pot passar en alguns valors per defecte 168 00:08:53,000 --> 00:08:57,000 o alguna cosa així, de manera que aquest mètode init és el que realment crea l'objecte. 169 00:08:57,000 --> 00:08:59,000 En primer lloc, assignar l'espai, tal com ho vam fer en C, 170 00:08:59,000 --> 00:09:04,000 i després inicialitzar, que pot o no pot fer molt. 171 00:09:04,000 --> 00:09:07,000 Llavors estem tornant aquesta cosa en un objecte o. 172 00:09:07,000 --> 00:09:09,000 Hi ha una estrella aquí perquè això és tècnicament un punter, 173 00:09:09,000 --> 00:09:12,000 però no et preocupis, els punters no són gran cosa en Objective-C més. 174 00:09:12,000 --> 00:09:15,000 >> Ara hem instància aquesta classe anomenada NSObject, 175 00:09:15,000 --> 00:09:19,000 i això és només una classe a l'atzar que Apple té. 176 00:09:19,000 --> 00:09:22,000 Hem instància això, i ara tinc una instància d'aquesta classe 177 00:09:22,000 --> 00:09:25,000 en aquest efecte o, el que significa que si es defineix 178 00:09:25,000 --> 00:09:29,000 aquests mètodes els podia dir així. 179 00:09:29,000 --> 00:09:31,000 De la mateixa manera, si volia trucar a un mètode amb un argument, 180 00:09:31,000 --> 00:09:34,000 de manera que aquest és el mètode de bar, que pren un argument, 181 00:09:34,000 --> 00:09:38,000 i aquí hi ha el baz: Mètode qux, de manera que això pren 2 arguments. 182 00:09:38,000 --> 00:09:44,000 Això s'anomena una funció d'aquest o d'objectes. 183 00:09:44,000 --> 00:09:46,000 Té sentit? 184 00:09:46,000 --> 00:09:50,000 La sintaxi ha de tenir sentit, però quin tipus de acostumar-se a ell. 185 00:09:50,000 --> 00:09:54,000 >> Bé, anem a parlar d'algunes coses que es construeixen en Objective-C 186 00:09:54,000 --> 00:09:56,000 que no necessàriament es van construir en C. 187 00:09:56,000 --> 00:09:59,000 En C que d'alguna manera havia de bregar amb aquestes cadenes com a matrius de caràcters estúpids, 188 00:09:59,000 --> 00:10:01,000 i es va posar molt molest. 189 00:10:01,000 --> 00:10:04,000 Objective-C té tots els construïts en per a nosaltres, i està construït en 190 00:10:04,000 --> 00:10:06,000 ús d'aquesta classe NSString anomenat. 191 00:10:06,000 --> 00:10:10,000 Quan vull crear un NSString tenim sintaxi més arcà. 192 00:10:10,000 --> 00:10:15,000 En comptes de dir "CS50", diem @ "CS50" 193 00:10:15,000 --> 00:10:17,000 i això és només la sintaxi per declarar cadenes en Objective-C. 194 00:10:17,000 --> 00:10:21,000 Això és molt fàcil d'oblidar, així que no ho facis. 195 00:10:21,000 --> 00:10:24,000 Ara, un cop que tinc això, això és una cadena, però noti 196 00:10:24,000 --> 00:10:26,000 no deixa de ser un objecte. 197 00:10:26,000 --> 00:10:30,000 Vaig dir NSString, el que significa que una instància de la classe 198 00:10:30,000 --> 00:10:32,000 anomenat NSString, que algú va escriure per a mi, 199 00:10:32,000 --> 00:10:35,000 i que era molt agradable sobre ell, i per això ara 200 00:10:35,000 --> 00:10:37,000 Puc començar a cridar als mètodes en ell. 201 00:10:37,000 --> 00:10:40,000 Si crido a la longitud d'aquest mètode s objecte 202 00:10:40,000 --> 00:10:43,000 que tornarà a mi la longitud de la cadena. 203 00:10:43,000 --> 00:10:45,000 Això és igual que strlen en C. 204 00:10:45,000 --> 00:10:47,000 Retorna 4. 205 00:10:47,000 --> 00:10:51,000 >> Així mateix, un altre mètode que pot ser que vulgui tenir en compte és aquesta characterAtIndex. 206 00:10:51,000 --> 00:10:54,000 Aquest és un mètode que diu en aquesta cadena es 207 00:10:54,000 --> 00:10:57,000 Vull que per obtenir el caràcter zero, 208 00:10:57,000 --> 00:10:59,000 de manera que aquest tornés a mi el caràcter c, 209 00:10:59,000 --> 00:11:02,000 i hi ha un munt més d'aquests mètodes que vostè pot buscar a Google amb molta facilitat. 210 00:11:02,000 --> 00:11:07,000 Documentació d'Apple és gran, i anem a fer una ullada a això en un moment. 211 00:11:07,000 --> 00:11:09,000 Els que són cadenes. 212 00:11:09,000 --> 00:11:11,000 També hem arrays de mida variable construït endins 213 00:11:11,000 --> 00:11:13,000 Recordi que en C quan declarem un arranjament 214 00:11:13,000 --> 00:11:16,000 que havíem de dir 5 elements, fi de la història. 215 00:11:16,000 --> 00:11:18,000 Quan vam arribar a JavaScript i PHP podríem començar 216 00:11:18,000 --> 00:11:20,000 fer les coses com l'addició d'elements o elements mòbils. 217 00:11:20,000 --> 00:11:22,000 Podem fer el mateix en Objective-C. 218 00:11:22,000 --> 00:11:26,000 En lloc de crear una matriu en la forma normal de C 219 00:11:26,000 --> 00:11:30,000 tenim de nou una altra classe anomenada NSMutableArray. 220 00:11:30,000 --> 00:11:33,000 També hi ha NSArray, 221 00:11:33,000 --> 00:11:35,000 i això va a encapsular bàsicament alguns matriu. 222 00:11:35,000 --> 00:11:38,000 Això ens diu que el primer que vull fer és que vull assignar 223 00:11:38,000 --> 00:11:41,000 espai per a una nova matriu, i després que s'assignin 224 00:11:41,000 --> 00:11:43,000 Llavors necessitem per inicialitzar. 225 00:11:43,000 --> 00:11:45,000 Un cop més, només cridar a aquests dos mètodes. 226 00:11:45,000 --> 00:11:48,000 Ara bé, això vol dir que dins d'aquest objecte un 227 00:11:48,000 --> 00:11:50,000 Tinc una matriu buida assegut allà. 228 00:11:50,000 --> 00:11:54,000 Si vull afegir alguna cosa a aquesta matriu, em pot trucar al mètode AddObject. 229 00:11:54,000 --> 00:11:59,000 Vull afegir un objecte a la matriu a, i vull afegir la cadena CS50. 230 00:11:59,000 --> 00:12:02,000 Si volgués eliminar el contrari, que puc dir que em vols 231 00:12:02,000 --> 00:12:09,000 eliminar l'objecte en primer lloc en la matriu o un objecte. 232 00:12:09,000 --> 00:12:11,000 >> Té sentit? 233 00:12:11,000 --> 00:12:14,000 Està bé, quin tipus d'acostumar a això claudàtors. 234 00:12:14,000 --> 00:12:18,000 Per cert, a l'interior d'una gran quantitat de biblioteques d'Apple veurà aquesta DR. 235 00:12:18,000 --> 00:12:21,000 El NS realment significa per al pas següent, que era una de les primeres empreses Steve Jobs, 236 00:12:21,000 --> 00:12:24,000 i aquí és on realment vaig començar a escriure un munt de codi 237 00:12:24,000 --> 00:12:27,000 com una mena de base per a Mac OS X i totes les altres coses, 238 00:12:27,000 --> 00:12:32,000 pel que aquest tipus de NS és aquest llegat agradable cridar a una de les empreses anteriors 239 00:12:32,000 --> 00:12:34,000 volta quan Apple estava començant. 240 00:12:34,000 --> 00:12:36,000 Està a tot arreu. 241 00:12:36,000 --> 00:12:41,000 Fem una ullada a un enfocament més holístic Objective-C exemple. 242 00:12:41,000 --> 00:12:44,000 Aquí estic dins XCode. 243 00:12:44,000 --> 00:12:47,000 Per arribar fins aquí, el primer que XCode descarregat de l'App Store, 244 00:12:47,000 --> 00:12:50,000 el va obrir, i després vaig pujar aquí a l'expedient, 245 00:12:50,000 --> 00:12:54,000 aquí a nou projecte, i després. 246 00:12:54,000 --> 00:12:57,000 Després de fer això tinc totes aquestes opcions del que vull crear, 247 00:12:57,000 --> 00:12:59,000 pel que anem a fer una ullada a aquestes opcions més endavant, 248 00:12:59,000 --> 00:13:03,000 però només per aquest exemple, perquè no estem realment tindrà una aplicació, però, 249 00:13:03,000 --> 00:13:06,000 Vaig venir aquí i em va dir eina de línia de comandes, 250 00:13:06,000 --> 00:13:09,000 i aquesta és una aplicació que podria córrer en la línia d'ordres 251 00:13:09,000 --> 00:13:12,000 igual que hem estat fugint de C. 252 00:13:12,000 --> 00:13:16,000 Així és com he creat aquest projecte, i per això ara que sóc aquí, 253 00:13:16,000 --> 00:13:20,000 així que anem a veure per primera vegada en aquest arxiu, i això hauria de ser bastant familiar. 254 00:13:20,000 --> 00:13:24,000 Tinc un nom int. Aquí està el meu amic argc, argv meu altre amic. 255 00:13:24,000 --> 00:13:30,000 I així podem veure que aquest és el punt de partida del meu primer Objective-C de l'aplicació. 256 00:13:30,000 --> 00:13:32,000 Aquí podem ignorar això per ara. 257 00:13:32,000 --> 00:13:35,000 Això és bàsicament una mica de matèria de gestió de memòria que es vol en realitat no 258 00:13:35,000 --> 00:13:37,000 mai ha de preocupar. 259 00:13:37,000 --> 00:13:39,000 >> Fem una ullada a aquest primer bloc aquí. 260 00:13:39,000 --> 00:13:46,000 Aquesta primera línia, si dic Estudiant * alice = [[Estudiant Alloc] init] què fa això? 261 00:13:46,000 --> 00:13:50,000 Aquest estudiant per primera vegada aquí, aquesta és probablement una classe. 262 00:13:50,000 --> 00:13:54,000 Això no és una classe que Apple va escriure, però és una classe que vaig escriure. 263 00:13:54,000 --> 00:13:57,000 El primer que vull fer és que vull assignar espai per a un nou estudiant, 264 00:13:57,000 --> 00:14:00,000 i després vull que l'iniciï, així que això em dóna l'esquena 265 00:14:00,000 --> 00:14:05,000 aquest objecte nou estudiant, i estic emmagatzemar això en una variable anomenada Alice. 266 00:14:05,000 --> 00:14:07,000 D'on va venir aquesta classe ve? 267 00:14:07,000 --> 00:14:12,000 Bé, aquí al costat esquerre són tots els arxius diferents a l'interior del meu projecte. 268 00:14:12,000 --> 00:14:16,000 Podem veure aquí tinc un Student.h i Student.m a. 269 00:14:16,000 --> 00:14:20,000 L'arxiu. H, recordi, és on jo declaro totes les coses 270 00:14:20,000 --> 00:14:22,000 que hi ha dins de la classe. 271 00:14:22,000 --> 00:14:25,000 >> Anem a fer una ullada a això. 272 00:14:25,000 --> 00:14:29,000 Molt bé, aquí tenim aquesta interfície @, i això diu que aquí ve 273 00:14:29,000 --> 00:14:33,000 les declaracions de tot el que existeix dins de la meva classe. 274 00:14:33,000 --> 00:14:36,000 Llavors tinc dos punts. Llavors tinc aquesta cosa NSObject. 275 00:14:36,000 --> 00:14:40,000 Això vol dir que dos punts bit d'herència que estàvem discutint una mica abans. 276 00:14:40,000 --> 00:14:43,000 Això ens diu tot el que un NSObject pot fer 277 00:14:43,000 --> 00:14:46,000 on NSObject és aquesta classe escrita per algú més, 278 00:14:46,000 --> 00:14:50,000 tot això es pot fer NSObject Vull ser capaç de fer això. 279 00:14:50,000 --> 00:14:54,000 En dir: NSObject que significa que, bàsicament, 280 00:14:54,000 --> 00:14:58,000 heretat tota la funcionalitat d'una altra classe. 281 00:14:58,000 --> 00:15:02,000 Això em va donar un munt de diferents mètodes i propietats que es poden utilitzar. 282 00:15:02,000 --> 00:15:05,000 Aquí sota estic creant dues propietats. 283 00:15:05,000 --> 00:15:08,000 Això vol dir que el meu estudiant, si es tractés d'una estructura, aquestes serien les 2 coses 284 00:15:08,000 --> 00:15:11,000 dins del meu estructura, de manera que cada estudiant té un nom 285 00:15:11,000 --> 00:15:14,000 que és una cadena, i l'estudiant també té un grau, 286 00:15:14,000 --> 00:15:17,000 que és un int. 287 00:15:17,000 --> 00:15:23,000 >> Finalment, aquí vaig a crear un mètode per a mi estudiant. 288 00:15:23,000 --> 00:15:26,000 Vaig trucar al meu mètode, initWithName, i es necessita un argument, 289 00:15:26,000 --> 00:15:31,000 i aquest argument és una cadena, i em va cridar de tot. 290 00:15:31,000 --> 00:15:35,000 Ara donem una ullada a la forma en què realment implementat aquesta classe. 291 00:15:35,000 --> 00:15:38,000 Aquí, ara estic dins del meu. Arxiu m, 292 00:15:38,000 --> 00:15:40,000 m per a la implementació, suposo. 293 00:15:40,000 --> 00:15:44,000 Tinc la meva aplicació, el meu cap, i aquí és on realment estic definint 294 00:15:44,000 --> 00:15:47,000 initWithName ho fa. 295 00:15:47,000 --> 00:15:50,000 Tinc initWithName, el nom del meu paràmetre, i llavors aquest 296 00:15:50,000 --> 00:15:53,000 és on en realitat estic creant un estudiant, 297 00:15:53,000 --> 00:15:56,000 pel que aquest és una mica críptic, però això és una mica repetitiu 298 00:15:56,000 --> 00:15:58,000 que voleu incloure en els seus constructors. 299 00:15:58,000 --> 00:16:02,000 Aquesta funció d'inicialització aquí, initWithName, és un tipus de constructor. 300 00:16:02,000 --> 00:16:05,000 Bàsicament, s'està construint un objecte nou estudiant 301 00:16:05,000 --> 00:16:07,000 i potser l'enviament d'algunes dades dins de la mateixa. 302 00:16:07,000 --> 00:16:11,000 El primer que vull fer és que vull cridar a init en aquesta cosa super. 303 00:16:11,000 --> 00:16:15,000 >> Recordeu que quan li vaig dir de nou aquí al expedient. H 304 00:16:15,000 --> 00:16:21,000 que tot el que un estudiant té una NSObject també ho ha fet. 305 00:16:21,000 --> 00:16:24,000 Així doncs, quan crec un estudiant que també ha de fer és 306 00:16:24,000 --> 00:16:28,000 assegureu-vos que el NSObject que estic heretant totes les dades de 307 00:16:28,000 --> 00:16:32,000 També s'ha inicialitzat correctament. 308 00:16:32,000 --> 00:16:36,000 Què he de dir és que aquest súper és en realitat farà referència a la classe pare 309 00:16:36,000 --> 00:16:39,000 que estic heretant de, així que vull assegurar-me que inicialitzar 310 00:16:39,000 --> 00:16:43,000 tot el que estic depenent d'abans de començar a tractar d'usar-lo. 311 00:16:43,000 --> 00:16:46,000 Després, si aquest inicialitzat correctament és com dir si malloc 312 00:16:46,000 --> 00:16:50,000 no va tornar nul llavors puc començar a configurar algunes propietats. 313 00:16:50,000 --> 00:16:54,000 >> En JavaScript i PHP havíem aquesta paraula clau es diu això, 314 00:16:54,000 --> 00:16:58,000 i això fa referència a la instància actual d'una classe. 315 00:16:58,000 --> 00:17:00,000 En Objective-C anomenem a això mateix. 316 00:17:00,000 --> 00:17:04,000 Quan dic self.name, que significa que l'objecte 317 00:17:04,000 --> 00:17:07,000 Acabo de crear quan vaig dir Alloc estudiant init, 318 00:17:07,000 --> 00:17:09,000 que em tornarà un objecte. 319 00:17:09,000 --> 00:17:12,000 Això vol dir que desitja establir el nom d'aquest objecte 320 00:17:12,000 --> 00:17:15,000 al que m'acaba de passar polz 321 00:17:15,000 --> 00:17:18,000 Igual que en C, tenim accés als membres d'aquest punt, 322 00:17:18,000 --> 00:17:21,000 així self.name diu el nom de l'objecte d'estudiant 323 00:17:21,000 --> 00:17:24,000 ara serà el que acaba de passar polz 324 00:17:24,000 --> 00:17:28,000 I així, per fi, puc tornar així que en realitat recuperar alguna cosa. 325 00:17:28,000 --> 00:17:30,000 >> Preguntes? 326 00:17:30,000 --> 00:17:34,000 Bé, de manera que aquest acte = super init, 327 00:17:34,000 --> 00:17:37,000 si vostè no entén totalment les coses herència no es preocupi. 328 00:17:37,000 --> 00:17:40,000 Només sé que si mai vols fer el teu propi mètode init només 329 00:17:40,000 --> 00:17:42,000 fer això, i vostè estarà llest per sortir. 330 00:17:42,000 --> 00:17:44,000 Si. >> [Estudiant] Què significa si mateix? 331 00:17:44,000 --> 00:17:49,000 Així doncs, quan malloc una cosa que sempre es comprova si era igual a null, 332 00:17:49,000 --> 00:17:51,000 i si era nul, llavors sortim. 333 00:17:51,000 --> 00:17:55,000 Aquesta és la mateixa cosa, perquè si això retorna null, llavors probablement serà culpa seg 334 00:17:55,000 --> 00:17:57,000 si comencem a tractar de manipular. 335 00:17:57,000 --> 00:18:01,000 Aquesta és la nostra classe estudiantil. 336 00:18:01,000 --> 00:18:03,000 Això vol dir que podem iniciar els nostres alumnes en una de dues maneres. 337 00:18:03,000 --> 00:18:08,000 Si dic Alloc estudiant init no estic fent servir aquest mètode que acabo d'escriure, 338 00:18:08,000 --> 00:18:11,000 i en comptes de puc dir alice.name, 339 00:18:11,000 --> 00:18:14,000 i ara em posaré aquest nom de propietat. 340 00:18:14,000 --> 00:18:17,000 >> De la mateixa manera, si vull utilitzar aquest mètode initWithName 341 00:18:17,000 --> 00:18:20,000 Simplement puc dir Alloc, a continuació, en lloc de dir init 342 00:18:20,000 --> 00:18:24,000 Vaig a trucar a aquest mètode que acabeu de crear, i ho vaig a passar a Bob. 343 00:18:24,000 --> 00:18:30,000 En aquest punt, aquest objecte Bob té un nom igual a Bob. 344 00:18:30,000 --> 00:18:35,000 Bé, aquí estic fent servir que NSMutableArray que vam veure anteriorment. 345 00:18:35,000 --> 00:18:38,000 Estic assignant space.Then Estic inicialitzar una nova matriu. 346 00:18:38,000 --> 00:18:40,000 Vaig a afegir dues coses a la mateixa. 347 00:18:40,000 --> 00:18:43,000 Aquesta matriu té ara objectes estudiantils. 348 00:18:43,000 --> 00:18:46,000 Tingueu en compte que enlloc he de dir que és un conjunt d'estudiants. 349 00:18:46,000 --> 00:18:48,000 He dit que és una matriu, i punt. 350 00:18:48,000 --> 00:18:50,000 Llavors puc posar el interior del que jo vull. 351 00:18:50,000 --> 00:18:52,000 Aquí tinc dos objectes. 352 00:18:52,000 --> 00:18:56,000 >> Finalment, tinc un altre objecte aquí, aquest TF. 353 00:18:56,000 --> 00:18:59,000 Aquí a TF.h bàsicament la mateixa cosa. 354 00:18:59,000 --> 00:19:01,000 Estic heretant de NSObject, i per cert, 355 00:19:01,000 --> 00:19:03,000 en crear classes de tot això és fet per tu, 356 00:19:03,000 --> 00:19:06,000 aquest tipus d'interfície repetitiu. 357 00:19:06,000 --> 00:19:08,000 Té una propietat dels estudiants. 358 00:19:08,000 --> 00:19:15,000 Tinc un parell de mètodes que aquí realment no fan molt, 359 00:19:15,000 --> 00:19:18,000 i pel que significa que després de crear aquest objecte TF 360 00:19:18,000 --> 00:19:23,000 Em pot trucar a aquest mètode de grau sobre el mateix d'aquesta manera. 361 00:19:23,000 --> 00:19:26,000 Teniu alguna pregunta respecte sintaxi de Objective-C abans de començar a passar a alguna cosa més 362 00:19:26,000 --> 00:19:30,000 coses interessants desenvolupament d'aplicacions? 363 00:19:30,000 --> 00:19:34,000 >> Està bé, així que anem a fer realitat una aplicació per l'iPhone. 364 00:19:34,000 --> 00:19:39,000 Les classes principals que vostè va a utilitzar dins de la seva aplicació per l'iPhone s'anomenen controladors de vista, 365 00:19:39,000 --> 00:19:42,000 i un controlador de vista representa bàsicament una sola pantalla 366 00:19:42,000 --> 00:19:46,000 dins de la seva aplicació, de manera que si estic en l'aplicació de música, per exemple, 367 00:19:46,000 --> 00:19:50,000 un controlador de vista podria representar la vista en què puc veure totes les cançons en el meu iPhone. 368 00:19:50,000 --> 00:19:53,000 Un altre controlador de vista podria ser quan faig clic a una cançó i començar a jugar 369 00:19:53,000 --> 00:19:55,000 o com m'estic aprofundint en els artistes. 370 00:19:55,000 --> 00:19:59,000 Cadascuna d'aquestes pantalles diferents pot ser representada com un controlador de vista diferent, 371 00:19:59,000 --> 00:20:04,000 i un controlador de vista és en realitat una classe que diu com funciona aquesta pantalla. 372 00:20:04,000 --> 00:20:07,000 Les coses a l'interior d'un controlador de vista, tindrem propietats, 373 00:20:07,000 --> 00:20:10,000 així que coses com un botó que serà una característica del nostre controlador de vista. 374 00:20:10,000 --> 00:20:13,000 >> També anem a disposar de mètodes, i aquestes són, bàsicament, els controladors d'esdeveniments. 375 00:20:13,000 --> 00:20:16,000 Aquest mètode diu que quan es prem aquest botó 376 00:20:16,000 --> 00:20:19,000 Vull fer alguna cosa, i finalment, de nou, 377 00:20:19,000 --> 00:20:24,000 utilitzarem aquesta paraula clau acte per accedir a la instància actual. 378 00:20:24,000 --> 00:20:29,000 Per construir interfícies en iOS és realment molt, molt fàcil. 379 00:20:29,000 --> 00:20:32,000 Tenen aquesta drag drop interfície agradable i va cridar Interface Builder, 380 00:20:32,000 --> 00:20:37,000 i els 2 conceptes bàsics que cablejar seu Objective-C a Interface Builder 381 00:20:37,000 --> 00:20:40,000 són IBOutlet i IBAction. 382 00:20:40,000 --> 00:20:44,000 Un IBOutlet simplement diu que si es declara una propietat que és un botó, 383 00:20:44,000 --> 00:20:47,000 i desitja connectar a alguna cosa en la interfície d'usuari actual, 384 00:20:47,000 --> 00:20:49,000 diràs que és una sortida. 385 00:20:49,000 --> 00:20:51,000 De la mateixa manera, si es vol representar un controlador d'esdeveniments 386 00:20:51,000 --> 00:20:54,000 llavors vostè va a dir que és una acció. 387 00:20:54,000 --> 00:20:57,000 >> Per cablejar en realitat aquesta representació gràfica 388 00:20:57,000 --> 00:21:00,000 i el seu codi és molt, molt simple. 389 00:21:00,000 --> 00:21:03,000 Per adjuntar un IBOutlet, tot el que has de fer és controlar clic, 390 00:21:03,000 --> 00:21:05,000 i anem a veure un exemple d'això molt ràpid. 391 00:21:05,000 --> 00:21:07,000 Vostè controla clic on diu View Controller. 392 00:21:07,000 --> 00:21:09,000 Vostè va a arrossegar a la interfície, o per contra, 393 00:21:09,000 --> 00:21:13,000 si voleu connectar un controlador d'esdeveniments que va a arrossegar des de la interfície 394 00:21:13,000 --> 00:21:15,000 en l'altra direcció. 395 00:21:15,000 --> 00:21:20,000 Fem una ullada a un exemple iOS realment simple. 396 00:21:20,000 --> 00:21:23,000 >> Crearem un nou projecte. 397 00:21:23,000 --> 00:21:25,000 Vaig a venir aquí a l'aplicació, 398 00:21:25,000 --> 00:21:28,000 i jo vaig a feu clic en Aplicació de vista simple. 399 00:21:28,000 --> 00:21:31,000 Vaig a fer clic a Següent. Vaig a donar el meu projecte un nom. 400 00:21:31,000 --> 00:21:33,000 Vaig a trucar Hola. 401 00:21:33,000 --> 00:21:36,000 Curiosament, Apple dóna per fet que crearà un producte 402 00:21:36,000 --> 00:21:38,000 de manera que vostè pot vendre i que poden guanyar diners. 403 00:21:38,000 --> 00:21:41,000 Aquí sota us diré que es tracta d'una aplicació per l'iPhone. 404 00:21:41,000 --> 00:21:44,000 Podeu crear una aplicació per l'iPad, o si voleu crear una d'aquestes aplicacions 405 00:21:44,000 --> 00:21:47,000 que suporta tant perifèrics que pot fer això també. 406 00:21:47,000 --> 00:21:49,000 Això és el que vostè vol que els seus marques de verificació perquè sembli. 407 00:21:49,000 --> 00:21:51,000 >> Vostè voleu utilitzar guions gràfics, que veurem més endavant, 408 00:21:51,000 --> 00:21:54,000 i que ha d'utilitzar el recompte de referències automàtica, 409 00:21:54,000 --> 00:21:58,000 que és una bona funció no implementada haver de dir malloc i lliure. 410 00:21:58,000 --> 00:22:03,000 Llevat que vulguis cridar malloc i lliure, em deixa seleccionada. 411 00:22:03,000 --> 00:22:07,000 Vaig a fer clic a Següent i, finalment, aquest em va a preguntar on vol guardar. 412 00:22:07,000 --> 00:22:14,000 Vaig a colpejar crear, i aquí anem. 413 00:22:14,000 --> 00:22:16,000 He creat un nou projecte. 414 00:22:16,000 --> 00:22:19,000 Per aquí a l'esquerra hi ha tots els arxius que hi ha dins del meu projecte, 415 00:22:19,000 --> 00:22:22,000 i noti que tinc un munt, i jo ni tan sols fer res. 416 00:22:22,000 --> 00:22:24,000 IOS és gran. 417 00:22:24,000 --> 00:22:27,000 >> Per exemple, aquí aquesta ViewController.h, 418 00:22:27,000 --> 00:22:30,000 això va a representar el meu controlador de vista en primer lloc, 419 00:22:30,000 --> 00:22:32,000 de manera que la primera pantalla dins del meu app. 420 00:22:32,000 --> 00:22:34,000 Ara sabem el que això està dient. 421 00:22:34,000 --> 00:22:36,000 Estem dient, sóc a aquest ViewController classe, 422 00:22:36,000 --> 00:22:40,000 i un ViewController fa tot el que fa un UIViewController, 423 00:22:40,000 --> 00:22:43,000 i això, de nou, és una classe que Apple va escriure que fa un munt de coses útils per a nosaltres 424 00:22:43,000 --> 00:22:46,000 agradaria mostrar la pantalla. 425 00:22:46,000 --> 00:22:50,000 Aquí és on realment pot començar a definir el que el meu controlador de vista fa, 426 00:22:50,000 --> 00:22:52,000 i resulta que jo realment no necessita res d'això. 427 00:22:52,000 --> 00:22:55,000 Això és codi repetitiu que Apple em dóna de forma gratuïta. 428 00:22:55,000 --> 00:22:59,000 Em feia falta aquesta primera línia, o no tinc una classe, 429 00:22:59,000 --> 00:23:02,000 perquè puguem desfer-nos d'això i lliurar d'això. 430 00:23:02,000 --> 00:23:05,000 Bé, aquesta és la meva pantalla en blanc. 431 00:23:05,000 --> 00:23:08,000 >> Ara farem clic en aquest MainStoryboard.storyboard, 432 00:23:08,000 --> 00:23:11,000 i aquí és on comença a posar-se interessant. 433 00:23:11,000 --> 00:23:14,000 Això representa la primera pantalla en el meu aplicació. 434 00:23:14,000 --> 00:23:17,000 Si voleu afegir un botó, en HTML que vaig haver de crear una etiqueta de botó. 435 00:23:17,000 --> 00:23:20,000 En Android has de crear una etiqueta de botó, 436 00:23:20,000 --> 00:23:23,000 però en iOS si només vénen aquí a la cantonada inferior dreta 437 00:23:23,000 --> 00:23:27,000 i si faig clic a aquesta tercera aquí on diu objectes, 438 00:23:27,000 --> 00:23:31,000 i que pot desplaçar-se cap avall, o puc iniciar la recerca de botó. 439 00:23:31,000 --> 00:23:35,000 I mira, un botó, així que si realment arrossegar i deixar anar és aquí, 440 00:23:35,000 --> 00:23:38,000 He afegit un botó per aquesta pantalla del meu app. 441 00:23:38,000 --> 00:23:41,000 Si vull canviar el text, pot fer doble clic, 442 00:23:41,000 --> 00:23:47,000 dir alguna cosa temptador com "Press em". 443 00:23:47,000 --> 00:23:51,000 Bé, ara si em quedo aquesta aplicació, de manera que compilar, 444 00:23:51,000 --> 00:23:54,000 de manera que per executar faig clic al botó de reproducció en la part superior esquerra, i aquí està la meva aplicació. 445 00:23:54,000 --> 00:23:58,000 Jo no he fet res, i em van donar un dolç mirar aplicació iPhone. 446 00:23:58,000 --> 00:24:01,000 Si vull aturar-lo, pot fer clic al botó de parada 447 00:24:01,000 --> 00:24:03,000 perquè és més divertit. 448 00:24:03,000 --> 00:24:07,000 >> Diguem que jo realment vull que passi alguna cosa en prémer aquest botó. 449 00:24:07,000 --> 00:24:09,000 Per fer això el que he de fer és el que necessito per crear 450 00:24:09,000 --> 00:24:13,000 un nou controlador d'esdeveniments o una acció. 451 00:24:13,000 --> 00:24:16,000 Això vol dir que he de crear algun mètode que jo vull ser anomenat 452 00:24:16,000 --> 00:24:18,000 quan es pressiona el botó, així que anem a crear un nou mètode. 453 00:24:18,000 --> 00:24:20,000 Jo estic dins d'ViewController.h. 454 00:24:20,000 --> 00:24:22,000 He de dir que hi ha un mètode. 455 00:24:22,000 --> 00:24:26,000 Necessito un guió primer, perquè vaig a estar trucant a això al controlador de vista. 456 00:24:26,000 --> 00:24:28,000 He de donar a aquest un tipus. 457 00:24:28,000 --> 00:24:31,000 El tipus d'aquest serà aquesta cosa IBAction que hem vist anteriorment. 458 00:24:31,000 --> 00:24:35,000 Es tracta d'un controlador d'esdeveniments, de manera que va a tornar un IBAction, 459 00:24:35,000 --> 00:24:38,000 i això és un indici per XCode dir que 460 00:24:38,000 --> 00:24:40,000 això és una cosa que vull connectar alguna cosa. 461 00:24:40,000 --> 00:24:45,000 Puc donar-li un nom, com a punt i coma buttonPressed,. 462 00:24:45,000 --> 00:24:48,000 >> Ara he declarat un nou mètode dins de la classe. 463 00:24:48,000 --> 00:24:50,000 Ho he dit mètode ha d'existir. 464 00:24:50,000 --> 00:24:53,000 Ara entrarem en ViewController.m, 465 00:24:53,000 --> 00:24:56,000 i diguem que el que aquest mètode pot fer. 466 00:24:56,000 --> 00:25:03,000 Si em poso a escriure, per exemple, (void) buttonPressed 467 00:25:03,000 --> 00:25:06,000 Avís XCode és realment agradable i completa automàticament per a mi. 468 00:25:06,000 --> 00:25:09,000 Això és realment meravellós. 469 00:25:09,000 --> 00:25:12,000 Noteu aquí que dins de l'arxiu. M També puc dir nul · la, 470 00:25:12,000 --> 00:25:15,000 i això és perquè IBAction no és realment un tipus. 471 00:25:15,000 --> 00:25:19,000 De fet, és hashtag definit en algun lloc que un buit, 472 00:25:19,000 --> 00:25:22,000 i de nou, això és només un suggeriment per XCode que diu 473 00:25:22,000 --> 00:25:25,000 Jo vull que això sigui un controlador d'esdeveniments, i veurem per què en tan sols un segon. 474 00:25:25,000 --> 00:25:28,000 Quan es prem aquest botó Vaig a fer alguna cosa molest 475 00:25:28,000 --> 00:25:30,000 vol mostrar una finestra emergent. 476 00:25:30,000 --> 00:25:35,000 >> Per a poder crear una nova instància d'aquesta classe anomenada UIAlertView, 477 00:25:35,000 --> 00:25:39,000 i aquesta és una classe que Apple va escriure que va a mostrar popups molestos. 478 00:25:39,000 --> 00:25:43,000 Anomenarem a aquesta alerta emergent, i tinc 2 passos, recorda, a la creació d'aquest objecte. 479 00:25:43,000 --> 00:25:46,000 El primer que cal fer és assignar l'espai. 480 00:25:46,000 --> 00:25:48,000 Vull un UIAlertView. 481 00:25:48,000 --> 00:25:51,000 Vull assignar espai. Aquest és el meu primer mètode. 482 00:25:51,000 --> 00:25:53,000 El meu mètode següent és que vull inicialitzar, 483 00:25:53,000 --> 00:25:58,000 i pel que tinc aquest mètode gran i llarga anomenada initWithTitle. 484 00:25:58,000 --> 00:26:01,000 Això és bàsicament el que va a controlar aquesta emergent diu. 485 00:26:01,000 --> 00:26:04,000 El títol de la meva finestra emergent es pot saludar. 486 00:26:04,000 --> 00:26:08,000 El missatge d'aquesta finestra emergent pot estar "Aquesta és iOS." 487 00:26:08,000 --> 00:26:10,000 El delegat, no sé què és això. 488 00:26:10,000 --> 00:26:13,000 Diguem que no és res. 489 00:26:13,000 --> 00:26:18,000 Ara el botó que apareixerà pot dir alguna cosa així com "És clar que ho és", 490 00:26:18,000 --> 00:26:24,000 i jo realment no vull cap altre botó, així que anem a esborrar això i tancar el parèntesi. 491 00:26:24,000 --> 00:26:27,000 >> Bé, he creat un extra. Aquí anem. 492 00:26:27,000 --> 00:26:30,000 Així és com puc crear una nova finestra emergent. 493 00:26:30,000 --> 00:26:35,000 Per mostrar la finestra emergent en realitat vull cridar al mètode xou. 494 00:26:35,000 --> 00:26:38,000 Per fer el que puc dir d'alerta i mostrar, 495 00:26:38,000 --> 00:26:40,000 i una altra, Autocomplete era súper agradable. 496 00:26:40,000 --> 00:26:42,000 Si em vaig oblidar del que era, si m'acaba d'escriure en s, 497 00:26:42,000 --> 00:26:45,000 Puc recórrer aquí per saber el que era, 498 00:26:45,000 --> 00:26:48,000 i es filtra molt bé. 499 00:26:48,000 --> 00:26:52,000 Ara he creat aquesta nova finestra emergent. 500 00:26:52,000 --> 00:26:55,000 Tornarem al que significa delegat després, 501 00:26:55,000 --> 00:26:58,000 i ara vull dir que estimo aquest mètode per ser acomiadat 502 00:26:58,000 --> 00:27:01,000 quan es pressiona el botó, així que vaig a tornar al meu storyboard, 503 00:27:01,000 --> 00:27:04,000 i vull fixar ara aquesta IBAction. 504 00:27:04,000 --> 00:27:06,000 El primer que vull fer és fer clic al botó. 505 00:27:06,000 --> 00:27:08,000 En prémer aquest botó, vull que passi alguna cosa. 506 00:27:08,000 --> 00:27:10,000 Jo no vaig a mantenir premuda la tecla Control. 507 00:27:10,000 --> 00:27:13,000 Vaig a fer clic i arrossegar amb el botó 508 00:27:13,000 --> 00:27:15,000 cap aquí on diu View Controller. 509 00:27:15,000 --> 00:27:17,000 Podem veure que bé s'encén. 510 00:27:17,000 --> 00:27:22,000 >> Si et deixo anar amb la meva ratolí ara tinc aquesta finestra per aquí on tinc algunes opcions. 511 00:27:22,000 --> 00:27:24,000 Un d'ells són els esdeveniments que es poden registrar. 512 00:27:24,000 --> 00:27:28,000 Aquests són tots els mètodes declarats jo en el meu arxiu com IBActions h. 513 00:27:28,000 --> 00:27:31,000 Així és com XCode sap el que ha d'aparèixer en aquesta llista poc, 514 00:27:31,000 --> 00:27:33,000 així que això és només un suggeriment. 515 00:27:33,000 --> 00:27:37,000 Si faig clic al botó pressionat, ara he registrat el controlador d'esdeveniments. 516 00:27:37,000 --> 00:27:41,000 En JavaScript vam dir que tinc una mica de codi que registra el controlador d'esdeveniments. 517 00:27:41,000 --> 00:27:43,000 En Objective-C és realment tan fàcil. 518 00:27:43,000 --> 00:27:46,000 Si em trobo de nou 519 00:27:46,000 --> 00:27:49,000 Ara en prémer el botó del meu controlador d'esdeveniments es va a acomiadar, 520 00:27:49,000 --> 00:27:51,000 i em vaig a posar aquesta emergent. 521 00:27:51,000 --> 00:27:54,000 Super, super simple allà. 522 00:27:54,000 --> 00:27:57,000 >> Si mai vols veure tots els esdeveniments que estan registrats 523 00:27:57,000 --> 00:28:00,000 en un component si faig clic en aquest botó 524 00:28:00,000 --> 00:28:02,000 i vinc aquí a la dreta 525 00:28:02,000 --> 00:28:05,000 primer que pots veure aquí el que puc fer coses com el tipus de botó, 526 00:28:05,000 --> 00:28:08,000 així que si vols un d'aquests jos o el botó de Afegir contacte 527 00:28:08,000 --> 00:28:10,000 o el que sigui. 528 00:28:10,000 --> 00:28:13,000 Per veure tots els esdeveniments que estan en aquest botó 529 00:28:13,000 --> 00:28:16,000 si jo vaig tot el camí fins aquí a la dreta 530 00:28:16,000 --> 00:28:19,000 podem veure aquí en els esdeveniments que tenen tots aquests esdeveniments. 531 00:28:19,000 --> 00:28:23,000 Em pot pressionar el botó, quan em va deixar anar el botó, quan faig doble toc o el que sigui, 532 00:28:23,000 --> 00:28:26,000 i el que m'acabo de registrar aquest esdeveniment és anomenat Touch Up Inside, 533 00:28:26,000 --> 00:28:29,000 i aquest diu que tan aviat com el meu dit surt el botó 534 00:28:29,000 --> 00:28:32,000 aquest esdeveniment va a foc, i això és exactament el que acaba de succeir. 535 00:28:32,000 --> 00:28:36,000 Aquest és el tipus d'esdeveniment de botó predeterminat pressionat. 536 00:28:36,000 --> 00:28:39,000 >> Qualsevol pregunta fins ara? 537 00:28:39,000 --> 00:28:43,000 Bé, així és com podem començar a cablejar les coses en el nostre codi 538 00:28:43,000 --> 00:28:46,000 en les coses dins la nostra interfície. 539 00:28:46,000 --> 00:28:49,000 Recordeu que el primer que havia de fer era trobar el codi, 540 00:28:49,000 --> 00:28:54,000 i després fins al cable d'interfície al codi, 541 00:28:54,000 --> 00:28:57,000 i aquí està la nostra primera aplicació. 542 00:28:57,000 --> 00:29:00,000 Bé, això va ser realment genial, i hem creat aquest botó. 543 00:29:00,000 --> 00:29:03,000 I si no ho fem vull haver de crear un munt de propietats 544 00:29:03,000 --> 00:29:05,000 representant aquests botons? 545 00:29:05,000 --> 00:29:08,000 Per exemple, en Tic Tac Toe Tinc 9 botons, 546 00:29:08,000 --> 00:29:11,000 i que seria super, super molest haver de arrossegar i deixar anar 9 vegades 547 00:29:11,000 --> 00:29:14,000 o si hagués de fer tres en ratlla amb 81 en lloc de 9 548 00:29:14,000 --> 00:29:17,000 i vaig haver arrossegar i deixar anar 81 vegades, i això és coix. 549 00:29:17,000 --> 00:29:20,000 El que podem fer en el seu lloc és com un HTML 550 00:29:20,000 --> 00:29:23,000 quan teníem coses com identificadors i noms i podem buscar les coses 551 00:29:23,000 --> 00:29:27,000 per la seva ID, hi ha un concepte similar a iOS trucades etiquetes. 552 00:29:27,000 --> 00:29:31,000 >> Una etiqueta és simplement un identificador numèric únic per a un component. 553 00:29:31,000 --> 00:29:34,000 Si dic això té una etiqueta de 0, per exemple, 554 00:29:34,000 --> 00:29:38,000 si crec un botó i donar-li una etiqueta de 0, i veurem com fer això en un segon, 555 00:29:38,000 --> 00:29:41,000 si vol aconseguir que el botó que es pot dir simplement vull cridar 556 00:29:41,000 --> 00:29:45,000 la, viewWithTag mètode en l'objecte aquí 557 00:29:45,000 --> 00:29:48,000 la self.view, que representa la pantalla actual, per exemple. 558 00:29:48,000 --> 00:29:53,000 Si dic a aquest mètode viewWithTag, em vaig a estirar el botó amb l'etiqueta 0. 559 00:29:53,000 --> 00:29:58,000 Anem a fer una ullada a aquest edifici per Tic Tac Toe. 560 00:29:58,000 --> 00:30:01,000 En primer lloc, aquest és el meu storyboard. 561 00:30:01,000 --> 00:30:05,000 He creat aquests 10 botons d'interfície d'usuari. 562 00:30:05,000 --> 00:30:07,000 Tingueu en compte que són tots de la mateixa mida. 563 00:30:07,000 --> 00:30:11,000 Si faig clic a un d'aquests i torno per aquí en aquest costat dret 564 00:30:11,000 --> 00:30:15,000 veuràs d'ajustar el tipus de lletra aquí, així que vaig fer la font una mica més gran, 565 00:30:15,000 --> 00:30:19,000 però el que jo també vaig fer va ser establir aquesta etiqueta. 566 00:30:19,000 --> 00:30:23,000 Li vaig dir que això té una etiqueta d'1, i aquesta és la part superior esquerra. 567 00:30:23,000 --> 00:30:26,000 >> Ara bé, si faig clic en un altre botó, com aquest segon aquí, 568 00:30:26,000 --> 00:30:29,000 ara veuràs que el meu etiqueta és 2. 569 00:30:29,000 --> 00:30:32,000 Cada un d'aquests botons només té una etiqueta única, 570 00:30:32,000 --> 00:30:35,000 pel que aquesta tarda es com vaig a començar a interactuar 571 00:30:35,000 --> 00:30:38,000 amb la meva aplicació. 572 00:30:38,000 --> 00:30:40,000 Tot això està dins d'un controlador de vista, 573 00:30:40,000 --> 00:30:42,000 però això és el que tenim. 574 00:30:42,000 --> 00:30:44,000 Tenim 3 propietats aquí. 575 00:30:44,000 --> 00:30:49,000 El primer i l'últim es va a representar l'estat del meu taula. 576 00:30:49,000 --> 00:30:53,000 Bàsicament, aquest primer és una matriu que representa a la Xs i Os ho són. 577 00:30:53,000 --> 00:30:57,000 Aquest altre aquí ens diu a qui toca. 578 00:30:57,000 --> 00:31:01,000 Es donarà compte de que jo també tinc aquestes coses aquí. 579 00:31:01,000 --> 00:31:05,000 Abans, quan declarem propietats que els va donar un nom i un tipus. 580 00:31:05,000 --> 00:31:08,000 També se'ls pot donar alguna informació addicional aquí. 581 00:31:08,000 --> 00:31:11,000 La primera diu que no atòmica, i el que diu aquest 582 00:31:11,000 --> 00:31:16,000 és, bàsicament, una sola cosa cada vegada s'intenta accedir a aquesta variable alhora. 583 00:31:16,000 --> 00:31:19,000 Vostè podria fer aplicacions més complexes que són multi-fil, 584 00:31:19,000 --> 00:31:22,000 i així de nou en Scratch teníem diferents fils, 585 00:31:22,000 --> 00:31:25,000 i sprites diferents podrien estar fent coses diferents a la vegada. 586 00:31:25,000 --> 00:31:29,000 >> Si aquest no és el cas, la qual cosa no és res del que estarem mirant, 587 00:31:29,000 --> 00:31:33,000 si diem que no atòmica en realitat farà les coses una mica més ràpid. 588 00:31:33,000 --> 00:31:37,000 També tenim aquesta cosa anomenada assignació, fort o feble. 589 00:31:37,000 --> 00:31:40,000 Aquesta assignar només diu que es tracta d'un model estàndard. 590 00:31:40,000 --> 00:31:43,000 Això no és un objecte o un punter, perquè això és només un bool, 591 00:31:43,000 --> 00:31:46,000 així bool està integrat en Objective-C. 592 00:31:46,000 --> 00:31:49,000 Aquest diu que no es tracta de fer una mica de fantasia amb punters aquí. 593 00:31:49,000 --> 00:31:51,000 És un habitual escalador d'edat. 594 00:31:51,000 --> 00:31:54,000 Fort i feble, tan feble diu que en realitat 595 00:31:54,000 --> 00:31:57,000 Vull que això s'apunta a alguna cosa al controlador de vista. 596 00:31:57,000 --> 00:32:00,000 Jo no vaig a assignar init real o jo mateix. 597 00:32:00,000 --> 00:32:04,000 El constructor d'interfície, en executar l'aplicació, es va a manejar tot el que la inicialització. 598 00:32:04,000 --> 00:32:07,000 Si dic feble, que diu que algú més serà la creació d'aquest. 599 00:32:07,000 --> 00:32:09,000 Si dic fort, això diu que jo seré el que 600 00:32:09,000 --> 00:32:12,000 que està creant aquest objecte bord, 601 00:32:12,000 --> 00:32:14,000 i aquí tinc alguns altres mètodes aquí, 602 00:32:14,000 --> 00:32:18,000 per exemple, una acció per quan el botó es prem nou joc, 603 00:32:18,000 --> 00:32:20,000 una acció de quan qualsevol dels altres botons es pressionen, 604 00:32:20,000 --> 00:32:23,000 i etcètera. 605 00:32:23,000 --> 00:32:26,000 >> No entrarem en massa de la lògica de Tic Tac Toe, 606 00:32:26,000 --> 00:32:30,000 encara que és molt emocionant, però anem a fer una ullada a 607 00:32:30,000 --> 00:32:33,000 algunes de les coses que podem fer dins de iOS. 608 00:32:33,000 --> 00:32:35,000 Aquest mètode nou joc serà acomiadat 609 00:32:35,000 --> 00:32:37,000 cada vegada que premi el botó de nou joc. 610 00:32:37,000 --> 00:32:41,000 Per connectar fins que jo simplement venir al meu storyboard. 611 00:32:41,000 --> 00:32:43,000 He fet clic a nou joc. 612 00:32:43,000 --> 00:32:47,000 Si vinc aquí a la dreta puc veure que 613 00:32:47,000 --> 00:32:50,000 Toqueu a l'interior està connectat amb el mètode newGame. 614 00:32:50,000 --> 00:32:53,000 És per això que això serà acomiadat. 615 00:32:53,000 --> 00:32:56,000 El mètode newGame farà una mica de posada a punt. 616 00:32:56,000 --> 00:32:59,000 Va a dir que vull que esborrar l'estat de la junta. 617 00:32:59,000 --> 00:33:01,000 Aquest és un bon mètode de matrius mutables. 618 00:33:01,000 --> 00:33:03,000 Això dirà ara és el torn de X, 619 00:33:03,000 --> 00:33:07,000 i ara em vaig a prendre avantatge d'això viewWithTag. 620 00:33:07,000 --> 00:33:11,000 >> Sé que els meus botons tenen les etiquetes 1-9, 621 00:33:11,000 --> 00:33:13,000 i això és una cosa que arbitràriament escollit. 622 00:33:13,000 --> 00:33:15,000 Si voleu ajustar el text de cada botó que està buit 623 00:33:15,000 --> 00:33:17,000 perquè acabo de començar un nou joc i jo no vull 624 00:33:17,000 --> 00:33:20,000 Us X o quedar més del que puc fer això. 625 00:33:20,000 --> 00:33:24,000 Puc dir que desitja que la vista amb l'etiqueta, 1, 2, 3, 4 et cetera. 626 00:33:24,000 --> 00:33:27,000 Això farà que un botó diferent cada vegada. 627 00:33:27,000 --> 00:33:30,000 Aquí em vaig a fer fora UIButton. 628 00:33:30,000 --> 00:33:33,000 Igual que podríem fer fora INT carrosses i viceversa 629 00:33:33,000 --> 00:33:37,000 això diu que em vol fer fora un UIButton. 630 00:33:37,000 --> 00:33:40,000 Això vol dir que el tipus d'aquest serà un * UIButton 631 00:33:40,000 --> 00:33:43,000 perquè de punters, però no et preocupis, no és por mai més. 632 00:33:43,000 --> 00:33:47,000 >> Quan tinc aquest botó Vaig a trucar a un mètode en ell. 633 00:33:47,000 --> 00:33:50,000 Aquest mètode es diu setTitle forState, i així ho diu 634 00:33:50,000 --> 00:33:53,000 Vull configurar el text del botó a ser la cadena buida, 635 00:33:53,000 --> 00:33:57,000 i jo vull que sigui una cadena buida quan no està pressionat. 636 00:33:57,000 --> 00:34:01,000 Si estic fent servir aquest mètode, pot canviar el text del botó 637 00:34:01,000 --> 00:34:04,000 tan aviat com algú ho copeja, però volem dir quan el botó està allà assegut 638 00:34:04,000 --> 00:34:07,000 Vull que el text en blanc. 639 00:34:07,000 --> 00:34:10,000 Finalment, anem a iniciar el meu taula, 640 00:34:10,000 --> 00:34:12,000 i jo vaig a dir que tot està en 0, 641 00:34:12,000 --> 00:34:15,000 de manera que aquest els membres del consell immutable és una matriu mutable, 642 00:34:15,000 --> 00:34:21,000 el que significa que pot trucar al mètode AddObject i un interior 0 de ell. 643 00:34:21,000 --> 00:34:23,000 Això és el que passa quan es crea una nova partida. 644 00:34:23,000 --> 00:34:25,000 >> Fem una ullada a un altre. 645 00:34:25,000 --> 00:34:28,000 Aquest mètode aquí és la IBAction que serà pressionat 646 00:34:28,000 --> 00:34:31,000 cada vegada que un d'aquests quadrats es pressiona. 647 00:34:31,000 --> 00:34:33,000 Ara tenim una mica de lògica Tic Tac Toe aquí. 648 00:34:33,000 --> 00:34:36,000 Hem d'esbrinar qui li toca, 649 00:34:36,000 --> 00:34:39,000 i sobre la base que, o bé establir una X o una O, 650 00:34:39,000 --> 00:34:43,000 però ens adonem que estem reutilitzant el mateix controlador d'esdeveniments 651 00:34:43,000 --> 00:34:45,000 per a cada un d'aquests botons. 652 00:34:45,000 --> 00:34:49,000 Això vol dir que no tenen un mètode per al botó de dalt a l'esquerra, 653 00:34:49,000 --> 00:34:52,000 un mètode diferent per al botó de baix a la dreta, tot i que podria haver fet. 654 00:34:52,000 --> 00:34:54,000 Això no seria realment un bon disseny. 655 00:34:54,000 --> 00:34:57,000 El que estic fent aquí és que estic realment va a determinar 656 00:34:57,000 --> 00:35:00,000 el que l'etiqueta del botó que s'ha premut és. 657 00:35:00,000 --> 00:35:04,000 T'adones que aquest mètode de reproducció pren un argument. 658 00:35:04,000 --> 00:35:07,000 Es diu remitent, remitent i el que s'està remitent serà 659 00:35:07,000 --> 00:35:10,000 representar exactament el que es va prendre acció sobre. 660 00:35:10,000 --> 00:35:15,000 Si es pressiona un botó, aquest remitent serà que UIButton 661 00:35:15,000 --> 00:35:18,000 que realment pressionat, el que significa que aquesta UIButton 662 00:35:18,000 --> 00:35:20,000 té una etiqueta perquè he creat una etiqueta. 663 00:35:20,000 --> 00:35:23,000 >> Si vull arribar a l'etiqueta simplement puc dir 664 00:35:23,000 --> 00:35:26,000 Vull que l'etiqueta del remitent, 665 00:35:26,000 --> 00:35:28,000 i de nou, acabo de casted a una UIButton. 666 00:35:28,000 --> 00:35:32,000 M'he assabentat que el remitent serà un UIButton. 667 00:35:32,000 --> 00:35:34,000 No sempre ha de ser un UIButton. 668 00:35:34,000 --> 00:35:36,000 Podria, per exemple, registrar el mateix controlador d'esdeveniments 669 00:35:36,000 --> 00:35:38,000  per a un per un botó, una per a un control lliscant. 670 00:35:38,000 --> 00:35:40,000 En aquest cas, sé que estan tots els botons, així que vaig a dir 671 00:35:40,000 --> 00:35:43,000 Jo vull que això sigui un botó, i llavors puc obtenir l'etiqueta, 672 00:35:43,000 --> 00:35:48,000 i de l'etiqueta que ara sé on sóc dins de la taula. 673 00:35:48,000 --> 00:35:51,000 Llavors només ha de fixar bé la X oa la O, pot voltejar alhora, 674 00:35:51,000 --> 00:35:54,000 comprovar que ha guanyat, etcètera. 675 00:35:54,000 --> 00:35:59,000 >> Teniu alguna pregunta respecte això fins ara? 676 00:35:59,000 --> 00:36:02,000 Bé, tot el codi que publiquen en línia-no vull entrar en massa 677 00:36:02,000 --> 00:36:06,000 de la lògica del dit del peu de Tic Tac, però ara es pot veure que realment 678 00:36:06,000 --> 00:36:09,000 tot el que estem fent és que estem recórrer aquest array, 679 00:36:09,000 --> 00:36:13,000 així que tenim un parell de bucles per aquí, i estem comparant per veure 680 00:36:13,000 --> 00:36:18,000 tenim un partit en totes les files, un partit en una columna o alguna cosa així. 681 00:36:18,000 --> 00:36:21,000 Per executar aquesta aplicació en realitat, si em toca en un dels botons 682 00:36:21,000 --> 00:36:24,000 que el mètode de joc va ser acomiadat, el que significa que acaba d'establir 683 00:36:24,000 --> 00:36:31,000 el botó per ser un X, de manera que ara aquest botó serà un O, i així successivament, 684 00:36:31,000 --> 00:36:35,000 i així és com estem començant a interactuar amb aquesta aplicació única pàgina. 685 00:36:35,000 --> 00:36:38,000 >> Anem a publicar el codi, així que si fóssiu lliure per llegir que, 686 00:36:38,000 --> 00:36:43,000 però ara anem a parlar d'algunes aplicacions que són alguna cosa més que una pàgina. 687 00:36:43,000 --> 00:36:47,000 Tan emocionant com Tic Tac Toe va ser, un munt d'aplicacions dins de iOS 688 00:36:47,000 --> 00:36:50,000 són una espècie d'aquests drill down coses amb múltiples pantalles. 689 00:36:50,000 --> 00:36:54,000 El primer concepte que haurem de parlar són els protocols, 690 00:36:54,000 --> 00:36:57,000 i un protocol és simplement un conjunt de mètodes 691 00:36:57,000 --> 00:36:59,000 que et puc prometre de definir. 692 00:36:59,000 --> 00:37:02,000 Si crec aquest nou protocol amb 2 mètodes, aquest primer, 693 00:37:02,000 --> 00:37:05,000 si el tipus de retorn és nul, el vaig trucar foo. 694 00:37:05,000 --> 00:37:07,000 Això no té arguments. Tinc un altre mètode. 695 00:37:07,000 --> 00:37:11,000 Es torna un int. Vaig trucar Bar, i es necessita un argument. 696 00:37:11,000 --> 00:37:14,000 Tot aquest protocol és que es diu SomeProtocol aquí, 697 00:37:14,000 --> 00:37:19,000 Aquest és un conjunt de coses que algú pot implementar. 698 00:37:19,000 --> 00:37:22,000 No he dins d'aquest protocol, va dir que foo fa. 699 00:37:22,000 --> 00:37:26,000 En el seu lloc, només estic dient que podríem definir foo si així ho desitja. 700 00:37:26,000 --> 00:37:30,000 Si jo estic creant un controlador de vista o la creació d'una classe 701 00:37:30,000 --> 00:37:33,000 Jo interior pot d'aquesta promesa classe per implementar 702 00:37:33,000 --> 00:37:40,000 alguns d'aquests mètodes, així que per exemple, si dir 703 00:37:40,000 --> 00:37:43,000 això ara diu que estic fent una promesa a vostè que dins de 704 00:37:43,000 --> 00:37:50,000 d'aquesta classe de controlador de vista tindré definicions per ambdós foo i bar. 705 00:37:50,000 --> 00:37:52,000 >> Per què és útil? 706 00:37:52,000 --> 00:37:55,000 Una gran quantitat de components interns de iOS aprofitar aquesta 707 00:37:55,000 --> 00:37:58,000 patró de disseny anomenat delegació, i el que diu la delegació 708 00:37:58,000 --> 00:38:01,000 és que, per exemple, si tinc un quadre de text 709 00:38:01,000 --> 00:38:04,000 i hi ha alguns fets que podrien ser registrats dins del meu caixa de text, 710 00:38:04,000 --> 00:38:07,000 en lloc de crear esdeveniments separats el que puc fer és el que puc dir 711 00:38:07,000 --> 00:38:10,000 el delegat d'aquesta caixa de text serà d'algun objecte. 712 00:38:10,000 --> 00:38:13,000 Quan dic que això és un delegat que vol dir que ara 713 00:38:13,000 --> 00:38:16,000 sempre que algun succés hauria estat acomiadat en el quadre de text 714 00:38:16,000 --> 00:38:18,000 en lloc d'haver de registrar ni res d'això 715 00:38:18,000 --> 00:38:21,000 que només va a trucar a un mètode en el delegat. 716 00:38:21,000 --> 00:38:24,000 Per exemple, a l'interior del meu caixa de text tinc un mètode per quan pols 717 00:38:24,000 --> 00:38:27,000 que realitza botó a la part inferior dreta, 718 00:38:27,000 --> 00:38:30,000 pel que en lloc de registrar controlador d'esdeveniments el que puc dir és 719 00:38:30,000 --> 00:38:34,000 quadre de text, aquí és un objecte que vull que trucar a un mètode en 720 00:38:34,000 --> 00:38:37,000 cada vegada que algú pressiona el botó Acceptar, 721 00:38:37,000 --> 00:38:40,000 i això vol dir que aquest objecte ha d'implementar algun protocol 722 00:38:40,000 --> 00:38:45,000 que diu que em compromet a definir que l'acció del botó fet, 723 00:38:45,000 --> 00:38:47,000 perquè si no defineix aquest mètode i premeu Fet, 724 00:38:47,000 --> 00:38:49,000 llavors serà confús. 725 00:38:49,000 --> 00:38:55,000 >> Fem una ullada a un exemple. 726 00:38:55,000 --> 00:38:58,000 Aquí només tinc un quadre de text, 727 00:38:58,000 --> 00:39:04,000 i una de les propietats d'aquesta caixa de text d'aquí d'aquest costat dret és el delegat. 728 00:39:04,000 --> 00:39:06,000 Aquesta és una propietat de la classe. 729 00:39:06,000 --> 00:39:09,000 El que he fet aquí és que el control es fa clic, i arrossegar des d'aquest punt d'aquí 730 00:39:09,000 --> 00:39:13,000 per al controlador de vista, i això diu ara el delegat d'aquesta caixa de text 731 00:39:13,000 --> 00:39:18,000 serà el controlador de vista. 732 00:39:18,000 --> 00:39:20,000 Així doncs, quan algunes accions ocorren, en lloc de registrar 733 00:39:20,000 --> 00:39:25,000 controladors d'esdeveniments independents que volen que els enviï al delegat. 734 00:39:25,000 --> 00:39:28,000 Ara anem a fer una ullada al meu controlador de vista. 735 00:39:28,000 --> 00:39:32,000 Dins de l'expedient. H He fet una promesa. 736 00:39:32,000 --> 00:39:36,000 He promès implementar alguns mètodes dins d'aquest protocol 737 00:39:36,000 --> 00:39:38,000 UITextFieldDelegate anomenat, i de nou, 738 00:39:38,000 --> 00:39:42,000 això és només una llista d'algunes coses que puc decideixi implementar. 739 00:39:42,000 --> 00:39:46,000 >> Si vinc aquí al meu. M arxiu, he implementat un mètode. 740 00:39:46,000 --> 00:39:49,000 Els he demanat que textFieldShouldReturn 741 00:39:49,000 --> 00:39:52,000 perquè això és el que es diu dins del protocol. 742 00:39:52,000 --> 00:39:57,000 I ara cada vegada que premi el botó interior fet que el camp de text 743 00:39:57,000 --> 00:40:00,000 això és el que serà anomenat, pel que no es va registrar un controlador d'esdeveniments. 744 00:40:00,000 --> 00:40:03,000 He connectat el delegat, i sempre que aquest esdeveniment es dispara 745 00:40:03,000 --> 00:40:08,000 aquest és el mètode que es dirà, de manera que si vinc aquí al meu storyboard i executar- 746 00:40:08,000 --> 00:40:11,000 mentre que es carrega podem veure el que fa. 747 00:40:11,000 --> 00:40:13,000 A la pantalla del meu tinc 2 coses. 748 00:40:13,000 --> 00:40:16,000 Tinc un camp de text, i tinc aquesta etiqueta. 749 00:40:16,000 --> 00:40:19,000 Simplement estic dient que desitja que el text d'aquesta etiqueta 750 00:40:19,000 --> 00:40:23,000 a ser igual al que l'usuari va escriure a l'interior del camp de text. 751 00:40:23,000 --> 00:40:26,000 Aquesta línia ve aquí és simplement un mètode que anomeno 752 00:40:26,000 --> 00:40:29,000 en el camp de text que diu que vull que vostè oculti el teclat. 753 00:40:29,000 --> 00:40:33,000 Això és només el mètode arbitrari que Apple va triar. 754 00:40:33,000 --> 00:40:38,000 >> Un cop més, abans que fes qualsevol cosa que vaig haver cablejar tot, així que vaig venir per primera vegada aquí. 755 00:40:38,000 --> 00:40:42,000 Des del controlador de vista que arrossegar la caixa de text. 756 00:40:42,000 --> 00:40:46,000 Et deixo anar, i puc veure aquí que jo puc fer això propietat text del camp 757 00:40:46,000 --> 00:40:49,000 des d'aquí al controlador de vista que he definit una propietat 758 00:40:49,000 --> 00:40:52,000 que és un IBOutlet d'un camp de text. 759 00:40:52,000 --> 00:40:55,000 Això diu que puc connectar a aquesta propietat fins 760 00:40:55,000 --> 00:40:59,000 a un camp de text en la meva interfície d'usuari. 761 00:40:59,000 --> 00:41:03,000 Ara, quan faig clic en això puc començar a escriure. 762 00:41:03,000 --> 00:41:06,000 Ara bé, si faig clic al botó Fet això va a disparar 763 00:41:06,000 --> 00:41:08,000 un esdeveniment que ara puc respondre. 764 00:41:08,000 --> 00:41:10,000 No hi ha controladors d'esdeveniments. 765 00:41:10,000 --> 00:41:13,000 Així és com m'acaba de respondre a aquest botó fet. 766 00:41:13,000 --> 00:41:15,000 Té sentit? 767 00:41:15,000 --> 00:41:20,000 >> Això no és un patró de disseny que-que mai podria trobar 768 00:41:20,000 --> 00:41:23,000 la creació del seu propi protocol, però només sé que alguns 769 00:41:23,000 --> 00:41:27,000 diferents components iOS registrar esdeveniments de diferents maneres. 770 00:41:27,000 --> 00:41:29,000 Botons, per exemple, utilitzar els IBActions. 771 00:41:29,000 --> 00:41:32,000 Els camps de text, d'altra banda, s'utilitzarà delegats. 772 00:41:32,000 --> 00:41:36,000 Podem veure i es pot veure tot això dins de la documentació. 773 00:41:36,000 --> 00:41:41,000 Per cert, en realitat hi ha un munt de coses d'interfície d'usuari integrada en iOS per a vostè, 774 00:41:41,000 --> 00:41:46,000 així per exemple, la manera com diuen que vaig fer fa a la part inferior dreta 775 00:41:46,000 --> 00:41:48,000 es He escollit aquest camp de text. 776 00:41:48,000 --> 00:41:50,000 Jo vaig venir aquí. 777 00:41:50,000 --> 00:41:53,000 Em desplaçat una mica per tornar clau, 778 00:41:53,000 --> 00:41:56,000 i que en realitat es pot fer d'aquest un munt de coses, com si volgués dir que 779 00:41:56,000 --> 00:42:00,000 trucada d'emergència en lloc d'això pot fer, que és totalment a l'atzar, 780 00:42:00,000 --> 00:42:02,000 i jo no sé per què hi ha un botó d'emergència integrat en l'anomenada, 781 00:42:02,000 --> 00:42:06,000 però, diu trucada d'emergència en lletres molt petites. 782 00:42:06,000 --> 00:42:08,000 Aquí ho tens. 783 00:42:08,000 --> 00:42:12,000 >> Definitivament explorar totes aquestes diferents elements en iOS. 784 00:42:12,000 --> 00:42:14,000 Teniu alguna pregunta respecte els delegats? 785 00:42:14,000 --> 00:42:18,000 Un cop més, només un patró de disseny interessant que vostè ha de tenir en compte. 786 00:42:18,000 --> 00:42:22,000 Bé, anem a fer una ullada al costat de les vistes de taula. 787 00:42:22,000 --> 00:42:26,000 En vista de taula és bàsicament la llista d'articles que està per tot el lloc en iOS. 788 00:42:26,000 --> 00:42:29,000 Quan vostè està mirant tots els seus contactes, vostè està buscant en 789 00:42:29,000 --> 00:42:34,000 la pàgina de configuració, i aquest tipus de llista de les coses que es diu una vista de taula. 790 00:42:34,000 --> 00:42:37,000 La implementació d'una vista de taula en iOS és bastant simple. 791 00:42:37,000 --> 00:42:41,000 En lloc de fer una classe que baixa que UIViewController 792 00:42:41,000 --> 00:42:44,000 com ho hem fet abans simplement hem de dir més aviat que 793 00:42:44,000 --> 00:42:46,000 tot el que un UIViewController és el que vull fer, 794 00:42:46,000 --> 00:42:50,000 Jo dic tot el que un UITableViewController és el que vull fer, 795 00:42:50,000 --> 00:42:54,000 de manera que es limita a afegir algunes coses addicionals que són totalment fet per nosaltres. 796 00:42:54,000 --> 00:42:58,000 Hem de fer molt poc per cobrir bàsicament els espais en blanc dins de la taula. 797 00:42:58,000 --> 00:43:02,000 >> Per tal de mostrar una taula que he de respondre a algunes preguntes. 798 00:43:02,000 --> 00:43:06,000 La primera pregunta que ha de respondre és com les seccions que hi ha a la taula? 799 00:43:06,000 --> 00:43:08,000 Quan vostè està mirant la seva aplicació contactes t'adonaràs que és una mena de 800 00:43:08,000 --> 00:43:12,000 organitzat per l'As, llavors vostè té la B, i vostè té aquesta capçalera sub poc. 801 00:43:12,000 --> 00:43:14,000 Cada un dels que s'anomena una secció. 802 00:43:14,000 --> 00:43:16,000 Vostè pot o no pot necessitar aquests. 803 00:43:16,000 --> 00:43:19,000 El primer que has de fer és posar en pràctica un mètode 804 00:43:19,000 --> 00:43:22,000 anomenat tableView: numberOfSectionsInTableView. 805 00:43:22,000 --> 00:43:25,000 Això simplement retorna quantes seccions té, 806 00:43:25,000 --> 00:43:29,000 pel que aquesta podria dir tornar un si té una vista de taula gran. 807 00:43:29,000 --> 00:43:33,000 La següent pregunta que iOS ha de saber és quantes files té? 808 00:43:33,000 --> 00:43:36,000 Per exemple, vostè hojeando una vista de taula. 809 00:43:36,000 --> 00:43:39,000 Vostè té un nombre fix de les cançons que estàs veient o un nombre fix dels seus contactes. 810 00:43:39,000 --> 00:43:41,000 Si ets com jo, per descomptat, no és que molts, 811 00:43:41,000 --> 00:43:44,000 i així és com iOS sap quantes cèl · lules que es vegi. 812 00:43:44,000 --> 00:43:46,000 >> Un cop més, això podria dir alguna cosa així torni 3. 813 00:43:46,000 --> 00:43:49,000 La meva opinió taula té 3 files. 814 00:43:49,000 --> 00:43:52,000 Finalment, iOS ha de saber el que cada cèl · lula s'assembla, 815 00:43:52,000 --> 00:43:54,000 així que el que en realitat farà és cridar a aquest mètode aquí baix, 816 00:43:54,000 --> 00:43:57,000 aquest tableView: cellForRowAtIndexPath. 817 00:43:57,000 --> 00:44:01,000 Es dirà a aquest mètode en cada cèl · lula dins de la taula. 818 00:44:01,000 --> 00:44:03,000 Com sap quantes vegades l'hi diu? 819 00:44:03,000 --> 00:44:06,000 Bé, el que s'ha dit a l'interior del nombre de files de la secció. 820 00:44:06,000 --> 00:44:08,000 Anem a trucar a aquest en cadascuna de les nostres cèl · lules, 821 00:44:08,000 --> 00:44:11,000 i dins d'aquest és on realment es pot fer coses com 822 00:44:11,000 --> 00:44:16,000 establir el text o li dirà què aquest petit botó blau a la part dreta fa. 823 00:44:16,000 --> 00:44:19,000 El patró per obtenir aquestes cèl · lules, utilitzarem aquest mètode 824 00:44:19,000 --> 00:44:22,000 anomenat dequeueReusableCellWithIdentifier. 825 00:44:22,000 --> 00:44:29,000 >> Objective-C és en realitat molt coneguda per la longitud dels seus noms ridículs mètodes, 826 00:44:29,000 --> 00:44:32,000 i això és realment un bon cas en l'exemple de punt. 827 00:44:32,000 --> 00:44:37,000 El que aquest mètode no es tracta simplement diu que vull que em facis un cel · la. 828 00:44:37,000 --> 00:44:39,000 Només una cosa iOS. 829 00:44:39,000 --> 00:44:41,000 Si vostè té una mena 100.000 cançons en el seu iPod 830 00:44:41,000 --> 00:44:45,000 el que iOS no vol fer és assignar 100.000 cèl · lules, 831 00:44:45,000 --> 00:44:48,000 perquè si vostè està a la part superior de la seva llista, el que realment necessita per assignar memòria 832 00:44:48,000 --> 00:44:51,000 per a la cèl · lula que és 99.000 files cap avall? 833 00:44:51,000 --> 00:44:55,000 No, perquè el que et puguis desplaçar tipus d'assignar a mesura que avança. 834 00:44:55,000 --> 00:44:57,000 Això es fa per a vostè. 835 00:44:57,000 --> 00:44:59,000 Vostè no ha de preocupar-se per totes aquestes coses estúpides rendiment. 836 00:44:59,000 --> 00:45:02,000 Tot el que diuen és que criden a aquest mètode dequeueReusableCellWithIdentifier, 837 00:45:02,000 --> 00:45:06,000 i això ho diu, està bé, si cal vaig a crear una nova cel · la per a vostè. 838 00:45:06,000 --> 00:45:09,000 >> Però si vostè està a la part inferior de la taula i ja ha assignat algunes cèl · lules 839 00:45:09,000 --> 00:45:12,000 a la part superior de la taula que no estàs realment va a necessitar en el curt termini 840 00:45:12,000 --> 00:45:15,000 Jo et donaré un dels de tornada en lloc d'assignar una nova, 841 00:45:15,000 --> 00:45:17,000 pel que aquest és un problema de funcionament agradable. 842 00:45:17,000 --> 00:45:21,000 No ha d'assignar a les cèl · lules a tu mateix. 843 00:45:21,000 --> 00:45:23,000 Això et tornarà una cel. 844 00:45:23,000 --> 00:45:25,000 Va a tornar a vostè un objecte mòbil. 845 00:45:25,000 --> 00:45:28,000 Un cop tingueu l'objecte de cèl · lula que pot fer coses per a ella. 846 00:45:28,000 --> 00:45:32,000 Podeu definir el text de la cel · la amb aquesta propietat anomenada etiqueta de text. 847 00:45:32,000 --> 00:45:36,000 Vostè pot afegir que la fletxa de la dreta o d'algun altre material atzar 848 00:45:36,000 --> 00:45:41,000 amb aquesta altra propietat anomenada accessoryType, i així successivament i així successivament. 849 00:45:41,000 --> 00:45:46,000 >> Anem a fer una ullada a l'aplicació real d'una vista de taula ara. 850 00:45:46,000 --> 00:45:49,000 Quan vaig crear aquest projecte 851 00:45:49,000 --> 00:45:53,000 en lloc de dir la aplicació única vista que en realitat vaig venir aquí 852 00:45:53,000 --> 00:45:57,000 de l'aplicació principal-detall, de manera que, bàsicament, el que correspon a l'aplicació de correu 853 00:45:57,000 --> 00:46:01,000 en l'iPad amb la vista de la taula de l'esquerra i llavors el contingut de la dreta. 854 00:46:01,000 --> 00:46:07,000 En l'iPod o iPhone que això va a correspondre a una visió única taula. 855 00:46:07,000 --> 00:46:10,000 Aquí és on jo tinc el meu codi d'arrencada. 856 00:46:10,000 --> 00:46:13,000 >> Primer donem una ullada al guió gràfic. 857 00:46:13,000 --> 00:46:15,000 Tot això va ser fet per mi, en el fons creat. 858 00:46:15,000 --> 00:46:18,000 Aquesta barra de navegació em va mostrar el que una cèl · lula exemple podria ser similar, 859 00:46:18,000 --> 00:46:22,000 i fer doble clic, canviï el títol. 860 00:46:22,000 --> 00:46:25,000 Qualsevol preocupació d'IU altres que puc manejar allà. 861 00:46:25,000 --> 00:46:27,000 L'arxiu de capçalera es veu molt simple. 862 00:46:27,000 --> 00:46:30,000 En lloc de dir això és UIViewController ara estem dient que això és una 863 00:46:30,000 --> 00:46:35,000 TableViewController, així que sabem que volem cridar a tots els mètodes de la taula. 864 00:46:35,000 --> 00:46:38,000 Ara vull crear una propietat que representarà 865 00:46:38,000 --> 00:46:40,000 les coses dins de la meva taula. 866 00:46:40,000 --> 00:46:43,000 Aquesta taula es mostrarà arbitràriament 867 00:46:43,000 --> 00:46:46,000 una llista de fruites, i per això necessitem crear alguns matriu 868 00:46:46,000 --> 00:46:49,000 en la qual pot inserir fruita. 869 00:46:49,000 --> 00:46:52,000 Dins del meu arxiu d'implementació, el primer que vull fer 870 00:46:52,000 --> 00:46:55,000 és que vull assegurar-me que inicialitzar aquesta matriu. 871 00:46:55,000 --> 00:46:58,000 >> Vaig dir Alloc init, vaig crear el meu arsenal de fruita, 872 00:46:58,000 --> 00:47:03,000 i jo estic afegint 4 coses a ell, un dels quals és molt més controvertit que els altres 3. 873 00:47:03,000 --> 00:47:06,000 I ara tinc una matriu de mida 4. 874 00:47:06,000 --> 00:47:08,000 Ho estem sacsejant a CS50. 875 00:47:08,000 --> 00:47:11,000 Ara tinc una matriu de mida 4. 876 00:47:11,000 --> 00:47:13,000 Ara vaig a començar a respondre aquestes preguntes, i de fet, 877 00:47:13,000 --> 00:47:16,000 quan vaig crear aquesta aplicació d'aquest ja estava fet per a mi. 878 00:47:16,000 --> 00:47:19,000 No vaig haver d'escriure el nombre de seccions en vista de taula. 879 00:47:19,000 --> 00:47:22,000 Ja estava allà, i jo estic omplint els espais en blanc. 880 00:47:22,000 --> 00:47:24,000 Quantes seccions tinc? 881 00:47:24,000 --> 00:47:26,000 Una. Tot fet. 882 00:47:26,000 --> 00:47:28,000 Quantes files tinc? 883 00:47:28,000 --> 00:47:31,000 Bé, tinc una fila per a cada fruita, de manera que aquest recompte 884 00:47:31,000 --> 00:47:34,000 és una propietat de qualsevol matriu que diu com és de gran? 885 00:47:34,000 --> 00:47:36,000 Aquest és el nombre de files que tinc. 886 00:47:36,000 --> 00:47:42,000 Finalment, he de dir el que té cada cèl · lula sembla? 887 00:47:42,000 --> 00:47:46,000 Vaig a dir dequeueReusableCellWithIdentifier. 888 00:47:46,000 --> 00:47:48,000 >> De nou, això ja estava escrit per a mi. 889 00:47:48,000 --> 00:47:51,000 Jo no havia de fer això per mi mateix, i vull tornar 890 00:47:51,000 --> 00:47:54,000 aquesta cel · la en aquesta ubicació. 891 00:47:54,000 --> 00:47:57,000 Recordeu que estem cridant a aquest mateix mètode en totes les cèl · lules, 892 00:47:57,000 --> 00:48:01,000 i aquest argument aquí, aquest argument indexPath, 893 00:48:01,000 --> 00:48:03,000 diu quina fila estic dins 894 00:48:03,000 --> 00:48:05,000 Si dic indexPath.row aquí 895 00:48:05,000 --> 00:48:09,000 aquest serà 0, llavors serà 1, llavors serà 2, i això és el que sé 896 00:48:09,000 --> 00:48:11,000 què cel · Actualment estic mostrant. 897 00:48:11,000 --> 00:48:15,000 Vull configurar el text de la cel · la utilitzant aquesta propietat textLabel 898 00:48:15,000 --> 00:48:19,000 anar dins del meu matriu fruita i obtenir 899 00:48:19,000 --> 00:48:21,000 l'objecte que correspon a cada fila. 900 00:48:21,000 --> 00:48:24,000 Si això és una cadena, ara estic establint 901 00:48:24,000 --> 00:48:28,000 la propietat de text en una cadena. 902 00:48:28,000 --> 00:48:30,000 Puc fer una altra cosa. 903 00:48:30,000 --> 00:48:32,000 També pot registrar un controlador d'esdeveniments en cadascuna de les cèl · lules, 904 00:48:32,000 --> 00:48:35,000 així que quan em toqui a cadascuna d'aquestes cèl · lules 905 00:48:35,000 --> 00:48:39,000 aquest didSelectRowAtIndexPath, això serà anomenat per mi, 906 00:48:39,000 --> 00:48:42,000 per la qual cosa simplement definint aquesta ara puc manejar el que succeeix 907 00:48:42,000 --> 00:48:46,000 en tocar en una cel · la i, de nou, estem passant a la cel · la que va ser aprofitat 908 00:48:46,000 --> 00:48:50,000 perquè puguem tornar a utilitzar aquest mateix controlador d'esdeveniments per a totes les nostres cèl · lules. 909 00:48:50,000 --> 00:48:53,000 >> Un cop més, això és una cosa iOS està fent per mi. 910 00:48:53,000 --> 00:48:55,000 Anem a mostrar una altra popup molest 911 00:48:55,000 --> 00:48:59,000 que simplement diu que va escollir alguna cosa quan aquesta cosa 912 00:48:59,000 --> 00:49:04,000 serà l'objecte de fila. 913 00:49:04,000 --> 00:49:10,000 Quan executo això, jo vaig a tenir aquest punt de vista bonica taula 914 00:49:10,000 --> 00:49:14,000 amb una fila per a cada una d'aquestes fruites, i si em toca una 915 00:49:14,000 --> 00:49:16,000 em diu el que va passar. 916 00:49:16,000 --> 00:49:21,000 Té sentit? 917 00:49:21,000 --> 00:49:24,000 Anem a construir una mica més complex d'una aplicació, 918 00:49:24,000 --> 00:49:28,000 tant com fer clic a que vostè va escollir tomàquet és. 919 00:49:28,000 --> 00:49:31,000 La part agradable sobre el storyboard 920 00:49:31,000 --> 00:49:35,000 és que no és només ajudarà a les pantalles de disseny individual, 921 00:49:35,000 --> 00:49:38,000 també ens ajudarà a unir la nostra aplicació completa, 922 00:49:38,000 --> 00:49:42,000 de manera que l'aplicació final que serà aquest edifici és bonic esport lector de notícies, 923 00:49:42,000 --> 00:49:45,000 i pel que tindrà diverses pantalles, així que pot representar en realitat 924 00:49:45,000 --> 00:49:48,000 cadascuna d'aquestes pantalles múltiples en l'storyboard, 925 00:49:48,000 --> 00:49:52,000 i puc allunyar la imatge i veure la meva aplicació d'un alt nivell. 926 00:49:52,000 --> 00:49:55,000 >> Per tal de crear un nou element a l'interior del meu storyboard 927 00:49:55,000 --> 00:49:59,000 és molt simple dins d'Interface Builder. 928 00:49:59,000 --> 00:50:01,000 Si vull afegir una altra pantalla per això, per exemple, 929 00:50:01,000 --> 00:50:06,000 La primera vegada que es pot reduir amb el zoom de pessic que Apple vol molt, 930 00:50:06,000 --> 00:50:09,000 i aquí baix abans de cercar un botó 931 00:50:09,000 --> 00:50:12,000 i arrossegar i deixar anar un botó 932 00:50:12,000 --> 00:50:15,000 si voleu crear una nova pantalla que en realitat es pot simplement arrossegar i deixar anar 933 00:50:15,000 --> 00:50:19,000 un controlador de vista completa, de manera que si agafo aquest, estireu-lo per aquí, 934 00:50:19,000 --> 00:50:23,000 hey, hi ha una altra pantalla, de manera que ara està utilitzant aquest arxiu de storyboard mateix 935 00:50:23,000 --> 00:50:26,000 Puc tenir totes les pantalles dins del meu app, i puc allunyar 936 00:50:26,000 --> 00:50:28,000 i veure com interactuen. 937 00:50:28,000 --> 00:50:32,000 Aquests no van a interactuar amb tot. 938 00:50:32,000 --> 00:50:36,000 La manera com aquestes 2 pantalles interactuen és definir les relacions. 939 00:50:36,000 --> 00:50:39,000 És, bàsicament, es pot dir d'aquesta pantalla, en prémer aquest botó, 940 00:50:39,000 --> 00:50:42,000 Vull que llisqui cap a aquesta nova pantalla. 941 00:50:42,000 --> 00:50:44,000 Això significa que aquest tipus de relació entre 942 00:50:44,000 --> 00:50:46,000  la pantalla primera i la segona pantalla. 943 00:50:46,000 --> 00:50:49,000 Vas a tenir bàsicament una fletxa d'aquest botó a la segona pantalla 944 00:50:49,000 --> 00:50:53,000 dient que quan es prem aquest botó, que és on vull anar. 945 00:50:53,000 --> 00:50:57,000 Igual que hem fet clic i arrossegament de controls per definir els punts de venda 946 00:50:57,000 --> 00:51:01,000 farem el mateix per definir aquests Segues. 947 00:51:01,000 --> 00:51:05,000 >> Anem a veure un exemple d'això, i abans que realment la transició 948 00:51:05,000 --> 00:51:08,000 d'una pantalla a una altra iOS és prou agradable per trucar a aquest mètode 949 00:51:08,000 --> 00:51:11,000 anomenat prepareForSegue, i aquí és on podem començar a 950 00:51:11,000 --> 00:51:14,000 l'enviament de dades des d'una aplicació a una altra. 951 00:51:14,000 --> 00:51:17,000 En l'exemple que estem a punt de veure, bàsicament, ens permetrà 952 00:51:17,000 --> 00:51:20,000 per filtrar els equips de beisbol de les lligues i divisions. 953 00:51:20,000 --> 00:51:23,000 Quan selecciono una lliga, per exemple, vull fer la transició 954 00:51:23,000 --> 00:51:25,000 al meu següent pantalla on pugui mostrar totes les divisions 955 00:51:25,000 --> 00:51:27,000 en aquesta lliga o tots els equips diferents. 956 00:51:27,000 --> 00:51:31,000 He de trametre a la pantalla el que els equips que es mostrin. 957 00:51:31,000 --> 00:51:35,000 Per això vaig a prendre avantatge d'aquest mètode aquí. 958 00:51:35,000 --> 00:51:39,000 >> Finalment, només un punt a l'atzar en iOS. 959 00:51:39,000 --> 00:51:41,000 Per emmagatzemar les dades que hi ha aquesta cosa anomenada dades bàsiques, 960 00:51:41,000 --> 00:51:44,000 que és en realitat una mica complicat treballar amb ells. 961 00:51:44,000 --> 00:51:47,000 També pot utilitzar SQL per emmagatzemar dades, 962 00:51:47,000 --> 00:51:51,000 que, de nou, és agradable, però una mica en el costat més complicat de treballar, 963 00:51:51,000 --> 00:51:55,000 però també és compatible amb iOS aquestes coses molt interessants trucades llistes de propietats, 964 00:51:55,000 --> 00:52:00,000 i una llista de propietats és un arxiu que representa els parells clau-valor. 965 00:52:00,000 --> 00:52:03,000 Es defineix una llista de claus, i li dic clau serà una matriu. 966 00:52:03,000 --> 00:52:06,000 Aquesta clau serà una cadena, i bàsicament qualsevol cosa que vostè pot fer 967 00:52:06,000 --> 00:52:10,000 en JSON es pot fer dins d'una llista de propietats, 968 00:52:10,000 --> 00:52:14,000 pel que aquesta realment bé ens permet treballar amb algunes dades. 969 00:52:14,000 --> 00:52:18,000 Per exemple, tinc aquest Teams.plist que he creat. 970 00:52:18,000 --> 00:52:22,000 He creat un arxiu plist nou, i puc veure els detalls. 971 00:52:22,000 --> 00:52:26,000 Aquest és un diccionari, això és un diccionari, es tracta de cadenes, 972 00:52:26,000 --> 00:52:30,000 i pel que aquesta és una representació gràfica agradable d'un document JSON 973 00:52:30,000 --> 00:52:33,000 o simplement un conjunt de parells de valors clau, 974 00:52:33,000 --> 00:52:37,000 i per tant aquests són les dades que estaré treballant amb l'interior del meu aplicació. 975 00:52:37,000 --> 00:52:40,000 >> Primer anem a venir aquí. Tenim arxius molt més ara. 976 00:52:40,000 --> 00:52:44,000 Però primer anem a venir aquí al guió gràfic. 977 00:52:44,000 --> 00:52:48,000 El guió aquí, si puc allunyar- 978 00:52:48,000 --> 00:52:51,000 ara podem veure que això és el flux de la meva app. 979 00:52:51,000 --> 00:52:53,000 Estic primer anem a començar en aquesta pantalla. 980 00:52:53,000 --> 00:52:55,000 Vaig a aprofundir en aquesta pantalla, 981 00:52:55,000 --> 00:52:58,000 i vaig a aprofundir en aquesta pantalla, i podem veure aquí que si quin tipus de 982 00:52:58,000 --> 00:53:04,000 moure un d'aquests en tot hem aquestes fletxes anar des d'aquí fins aquí, 983 00:53:04,000 --> 00:53:08,000 i la manera com defineixen aquesta fletxa va ser si puc ampliar una mica, 984 00:53:08,000 --> 00:53:12,000 i si em vénen a aquest controlador de vista, 985 00:53:12,000 --> 00:53:16,000 i aquí hi ha una cel · la, i vull dir que en tocar en una cel · la 986 00:53:16,000 --> 00:53:18,000 Vull que llisqui cap a una altra pantalla. 987 00:53:18,000 --> 00:53:21,000 Simplement, pot mantenir premut el control, 988 00:53:21,000 --> 00:53:26,000 desplaçar-se al llarg d'una mica més, premeu la tecla Control, arrossegueu la cel · la una i deixar anar. 989 00:53:26,000 --> 00:53:30,000 >> I aquí podem dir quina és la transició que voleu utilitzar? 990 00:53:30,000 --> 00:53:32,000 Vols utilitzar aquesta cosa que es diu diapositiva empenta? 991 00:53:32,000 --> 00:53:34,000 Vols que llisqui cap amunt des de la part inferior? 992 00:53:34,000 --> 00:53:36,000 Això es diu modal. 993 00:53:36,000 --> 00:53:40,000 I una vegada que feu clic en un d'ells, que va a treure aquesta fletxa per a mi, 994 00:53:40,000 --> 00:53:44,000 i això vol dir que he manejat en realitat el que succeeix quan pressiono aquest botó gràficament. 995 00:53:44,000 --> 00:53:48,000 Jo no he escrit cap codi per lliscar en realitat d'una pantalla a la següent. 996 00:53:48,000 --> 00:53:51,000 He definit aquesta visualment dins d'Interface Builder. 997 00:53:51,000 --> 00:53:55,000 Si faig clic a aquesta fletxa, podem veure que em va donar aquesta cosa un nom. 998 00:53:55,000 --> 00:53:59,000 Em va cridar showDivisions, i això és perquè jo pugui saber 999 00:53:59,000 --> 00:54:03,000 transició el que està per passar, i veurem per què en tan sols un segon. 1000 00:54:03,000 --> 00:54:06,000 Així és com m'he connectat a les diferents pantalles de la meva aplicació. 1001 00:54:06,000 --> 00:54:09,000 Si això fos un botó, per exemple, en lloc d'una vista de taula, 1002 00:54:09,000 --> 00:54:11,000 Que podia controlar fes clic al botó, arrossegament a la següent pantalla, 1003 00:54:11,000 --> 00:54:16,000 i així és com puc fer la navegació d'aquesta manera. 1004 00:54:16,000 --> 00:54:19,000 >> Molt ràpidament, si entrem a la MasterViewController, 1005 00:54:19,000 --> 00:54:22,000 de nou, estem simplement definirà una llista de les coses 1006 00:54:22,000 --> 00:54:26,000 que es mostrarà a la vista de taula. 1007 00:54:26,000 --> 00:54:29,000 Aquí estic dient que vull que prenguis aquest arxiu plist, 1008 00:54:29,000 --> 00:54:32,000 i jo vull que el carregui en un diccionari, 1009 00:54:32,000 --> 00:54:35,000 i una vegada que tens aquest diccionari, vaig a contestar les mateixes preguntes de nou. 1010 00:54:35,000 --> 00:54:37,000 Aquí és el nombre de seccions. 1011 00:54:37,000 --> 00:54:41,000 Un, hi ha una fila per cada lliga, i el text de cada cel · la 1012 00:54:41,000 --> 00:54:46,000 hauria de ser la primera, la primera lliga, la lliga segon, i així successivament. 1013 00:54:46,000 --> 00:54:51,000 Finalment, vaig a utilitzar aquest mètode que acabem de veure es diu prepareForSegue, 1014 00:54:51,000 --> 00:54:54,000 i aquest és el mètode que serà acomiadat quan faig clic a 1015 00:54:54,000 --> 00:54:57,000 en una de les files i per tant l'activació de la transició 1016 00:54:57,000 --> 00:54:59,000 que vaig amb les fletxes. 1017 00:54:59,000 --> 00:55:02,000 Això és a dir que pot tenir múltiples 1018 00:55:02,000 --> 00:55:05,000 relacions d'una pantalla a una altra. 1019 00:55:05,000 --> 00:55:08,000 Si tinc 2 botons i cada botó et porta a una altra pantalla 1020 00:55:08,000 --> 00:55:10,000 Vaig a tenir 2 Segués, 1 per a cada botó. 1021 00:55:10,000 --> 00:55:14,000 Però aquesta prepareForSegue és, de nou, serà reutilitzat 1022 00:55:14,000 --> 00:55:17,000 per a cadascuna de les diferents relacions, el que significa que necessito una manera 1023 00:55:17,000 --> 00:55:21,000 d'identificar si es prem el primer botó o prémer el segon botó. 1024 00:55:21,000 --> 00:55:25,000 >> Recordes quan et va donar aquesta segue un nom, aquest showDivisions, 1025 00:55:25,000 --> 00:55:29,000 això és el que ara sé que aquest és el segue que va ser activat. 1026 00:55:29,000 --> 00:55:32,000 Tot el que vull fer és que vull dir 1027 00:55:32,000 --> 00:55:35,000 Vull entendre el que m'acaba de colpejar, 1028 00:55:35,000 --> 00:55:38,000 i així aconseguir això, puc dir que vull el indexPath per la fila seleccionada, 1029 00:55:38,000 --> 00:55:42,000 Recordo la indexPath només diu on acaba de fer clic, 1030 00:55:42,000 --> 00:55:47,000 i llavors vull dir que vull saber on vaig. 1031 00:55:47,000 --> 00:55:50,000 Aquesta destinationViewController, això és una propietat de la segue. 1032 00:55:50,000 --> 00:55:53,000 Aquesta és la pantalla que vaig a, 1033 00:55:53,000 --> 00:55:56,000 així que sé que la pantalla em s'anomena DivisionsViewController 1034 00:55:56,000 --> 00:55:59,000 perquè he creat aquesta classe, 1035 00:55:59,000 --> 00:56:02,000 i per això ara si dic d.divisions 1036 00:56:02,000 --> 00:56:06,000 Ara estic establint una propietat del controlador de vista que vaig a anar. 1037 00:56:06,000 --> 00:56:10,000 Així és com jo estic enviant dades d'una pantalla a una altra pantalla. 1038 00:56:10,000 --> 00:56:13,000 >> Amb només mirar aquesta DivisionsViewController 1039 00:56:13,000 --> 00:56:16,000 vostè pot veure aquí que en l'expedient. h 1040 00:56:16,000 --> 00:56:20,000 no és que les divisions de propietat, i això és el que estic bàsicament poblar, 1041 00:56:20,000 --> 00:56:25,000 de manera que és com sé que estic mostrant les divisions corresponents a 1042 00:56:25,000 --> 00:56:28,000 la lliga que vaig fer clic i, de nou, 1043 00:56:28,000 --> 00:56:31,000 la vista de taula real es veu més o menys el mateix, només responent als 1044 00:56:31,000 --> 00:56:34,000 3 preguntes simples, així com la identificació de 1045 00:56:34,000 --> 00:56:37,000 el que passa quan es mou a la següent pantalla. 1046 00:56:37,000 --> 00:56:40,000 Només un parell de coses aquí. 1047 00:56:40,000 --> 00:56:43,000 Es nota en la part superior aquí que en lloc de dir # include 1048 00:56:43,000 --> 00:56:45,000 Ara estic dient # import. 1049 00:56:45,000 --> 00:56:47,000 Això és només una cosa de Objective-C. 1050 00:56:47,000 --> 00:56:52,000 La importació és bàsicament una versió més amable d'incloure, 1051 00:56:52,000 --> 00:56:57,000 i per exemple, hem de saber el que aquesta classe és, 1052 00:56:57,000 --> 00:57:00,000 així que no puc dir DivisionsViewController. 1053 00:57:00,000 --> 00:57:05,000 Si no hashtag dins del nostre standardio.c. Arxiu c 1054 00:57:05,000 --> 00:57:07,000 el compilador no tenia idea del que era printf. 1055 00:57:07,000 --> 00:57:12,000 De la mateixa manera, si no m'importi el DivisionsViewController 1056 00:57:12,000 --> 00:57:16,000 el compilador realment no té idea del que és un DivisionsViewController. 1057 00:57:16,000 --> 00:57:19,000 Només assegureu-vos que dins dels seus arxius m diferents. Vostè, assegureu-vos d'importar 1058 00:57:19,000 --> 00:57:25,000 els arxius corresponents h. perquè el compilador sap el que està passant. 1059 00:57:25,000 --> 00:57:31,000 >> Finalment, en última instància, el que Apple fa és mostrar algunes dades utilitzant una web d'opinió, 1060 00:57:31,000 --> 00:57:35,000 i així una visió web és un objecte que es pot incrustar 1061 00:57:35,000 --> 00:57:37,000 un navegador web petit dins de la seva aplicació. 1062 00:57:37,000 --> 00:57:40,000 Tot el que necessites fer és proporcionar un URL en el seu navegador web, 1063 00:57:40,000 --> 00:57:43,000 així que vull anar a mlb.mlb.com, 1064 00:57:43,000 --> 00:57:46,000 i així és com puc accedir a la pàgina d'inici per a cada equip, 1065 00:57:46,000 --> 00:57:49,000 i així passant en aquest URL 1066 00:57:49,000 --> 00:57:52,000 la vista web pot mostrar això per a mi, i puc navegar, 1067 00:57:52,000 --> 00:58:01,000 i el simulador està en ús perquè un. 1068 00:58:01,000 --> 00:58:03,000 Ara bé, això ve del meu plist. 1069 00:58:03,000 --> 00:58:07,000 Si fa clic en aquest això també ve del meu plist, i aquest lliscament es manegen 1070 00:58:07,000 --> 00:58:09,000 mitjançant la definició dels Segues. 1071 00:58:09,000 --> 00:58:12,000 Faig clic en aquest i un més, 1072 00:58:12,000 --> 00:58:15,000 i ara aquí està la meva UIWebView, de manera que igual que 1073 00:58:15,000 --> 00:58:19,000 aquí està la pàgina web per a la direcció URL que acabo incorporat, 1074 00:58:19,000 --> 00:58:21,000 i jo no havia de manejar cap bogeria. 1075 00:58:21,000 --> 00:58:24,000 Aquesta és la forma de mostrar una pàgina web. 1076 00:58:24,000 --> 00:58:27,000 Coses com aquesta el botó de tornada aquí també es donen a mi 1077 00:58:27,000 --> 00:58:33,000 totalment gratis, perquè he definit aquestes relacions utilitzant Segues. 1078 00:58:33,000 --> 00:58:37,000 >> Alguna pregunta? Si. 1079 00:58:37,000 --> 00:58:40,000 [Estudiant] Així que quan vostè utilitza Alloc, vostè no haurà de alguna cosa gratis? 1080 00:58:40,000 --> 00:58:43,000 Exactament, quan es diu a Alloc i init vostè no ha de alliberar. 1081 00:58:43,000 --> 00:58:46,000 IOS va a manejar tot això per a vostè. 1082 00:58:46,000 --> 00:58:51,000 És meravellós, i vostè no està trencant cap regla. Si. 1083 00:58:51,000 --> 00:58:54,000 [Estudiant] Si s'inclourà més equips que podrien cabre a la pantalla, 1084 00:58:54,000 --> 00:58:58,000 el tenen automàticament una opció de desplaçament o és que alguna cosa ha de afegir? 1085 00:58:58,000 --> 00:59:01,000 Exactament, si tingués més equips, per exemple, automàticament s'ocuparia de 1086 00:59:01,000 --> 00:59:04,000 el desplaçament per a mi, i tots els problemes de rendiment 1087 00:59:04,000 --> 00:59:08,000 amb l'enorme taula també són manejats totalment per mi. 1088 00:59:08,000 --> 00:59:11,000 >> Altres preguntes? 1089 00:59:11,000 --> 00:59:13,000 Tots aquests programes serà publicat. 1090 00:59:13,000 --> 00:59:16,000 És com que passa per alt una mica dels detalls més petits, 1091 00:59:16,000 --> 00:59:19,000 però coses com establir algunes propietats a la vista web 1092 00:59:19,000 --> 00:59:22,000 són coses que vostè pot aconseguir explorar la documentació d'Apple, 1093 00:59:22,000 --> 00:59:24,000 que és molt, molt ben dissenyada. 1094 00:59:24,000 --> 00:59:27,000 Ells tenen un munt d'aplicacions d'exemple i l'exemple usos 1095 00:59:27,000 --> 00:59:34,000 d'APIs diferent, així que sens dubte llegir aquests si pots. 1096 00:59:34,000 --> 00:59:36,000 Només alguns enllaços útils que vostè pot ser que vulgui fer una ullada a. 1097 00:59:36,000 --> 00:59:38,000 Aquestes són algunes de les guies de documentació a mà. 1098 00:59:38,000 --> 00:59:41,000 Les URL són enormes, de manera que estem escurçat. 1099 00:59:41,000 --> 00:59:44,000 Aquest primer és tota la biblioteca de documentació. 1100 00:59:44,000 --> 00:59:46,000 Hi ha petits bars de recerca, de manera que si el botó d'inici escrivint 1101 00:59:46,000 --> 00:59:50,000 que començarà a donar-li tota la informació sobre totes les coses que pots fer amb un botó. 1102 00:59:50,000 --> 00:59:53,000 També he inclòs el Table View Programming Guide. 1103 00:59:53,000 --> 00:59:56,000 S'ocupa de les vistes de taula en molt més detall, 1104 00:59:56,000 --> 01:00:00,000 com fer coses com afegir de forma dinàmica o cèl · lules editar o eliminar-los. 1105 01:00:00,000 --> 01:00:02,000 >> Hi ha un munt d'aplicacions d'exemple d'Apple que li mostrarà com fer-ho, 1106 01:00:02,000 --> 01:00:05,000 i, finalment, aquest últim és el Human Interface Guidelines, 1107 01:00:05,000 --> 01:00:09,000 i això és bàsicament una discussió dels components d'interfície d'usuari, 1108 01:00:09,000 --> 01:00:12,000 coses com no fer un botó que és de 4 píxels per 4 píxels. 1109 01:00:12,000 --> 01:00:15,000 Aquesta és una mala idea, i altres coses que Apple vol que facis 1110 01:00:15,000 --> 01:00:18,000 fomentar el disseny correcte. 1111 01:00:18,000 --> 01:00:23,000 >> Les últimes preguntes abans d'acabar? 1112 01:00:23,000 --> 01:00:27,000 Bé, definitivament no dubti en-tindrem etiquetes especials a discutir. 1113 01:00:27,000 --> 01:00:30,000 Tindrem un iOS, així que sens dubte no dubti en utilitzar això. 1114 01:00:30,000 --> 01:00:34,000 Per treballar amb els seus companys de classe en projectes 1115 01:00:34,000 --> 01:00:37,000 o ajudar a entendre algunes coses a l'atzar iOS 1116 01:00:37,000 --> 01:00:40,000 no dubti en enviar-me un correu electrònic, i sens dubte llegir tot el codi en línia perquè 1117 01:00:40,000 --> 01:00:43,000 només en interès de la classe de temps que passa per alt el més 1118 01:00:43,000 --> 01:00:45,000 de gra més fi detalls de les coses. 1119 01:00:45,000 --> 01:00:47,000 Però si no, llavors bona sort en els seus projectes per iOS, i espero que tinguem 1120 01:00:47,000 --> 01:00:53,000 una gran afluència d'aplicacions en l'App Store. 1121 01:00:53,000 --> 01:00:56,000 [CS50.TV]