1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminario] [IOS: Escribindo Aplicacións 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 [Esta é CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Todo ben, todos, benvidos para IOS: Escribindo Aplicacións como un xefe. 5 00:00:12,000 --> 00:00:16,000 Este seminario vai concentrarse en escribir aplicacións para o iPhone 6 00:00:16,000 --> 00:00:19,000 e á súa vez a escribir aplicacións para o iPad, e por iso estamos basicamente vai percorrer 7 00:00:19,000 --> 00:00:23,000 algúns exemplos diferentes de como facer unha aplicación, un xogo simple como Tic Tac Toe, 8 00:00:23,000 --> 00:00:26,000 ou se está máis interesado en facer un programa como unha especie de lector de noticias 9 00:00:26,000 --> 00:00:30,000 ou algo que interactúa con Internet vou falar sobre iso tamén. 10 00:00:30,000 --> 00:00:32,000 Aquí está a nosa axenda breve. 11 00:00:32,000 --> 00:00:36,000 >> Aplicacións do IOS son escritos nunha linguaxe chamada Objective-C, 12 00:00:36,000 --> 00:00:39,000 e por iso este é un pouco semellante a C, pero non realmente en todo, 13 00:00:39,000 --> 00:00:41,000 por iso imos estar falando un pouco sobre a propia linguaxe 14 00:00:41,000 --> 00:00:45,000 e como construír aplicacións para o iPhone usando este programa aplicación chamado Xcode, 15 00:00:45,000 --> 00:00:48,000 que se non ten baixo aínda Sinto-se libre para iniciar a descarga agora. 16 00:00:48,000 --> 00:00:50,000 É varios gigabytes. 17 00:00:50,000 --> 00:00:54,000 Debe ser libre na App Store, polo que ten que ter un Mac 18 00:00:54,000 --> 00:00:57,000 idealmente rodando a última versión do OS X. 19 00:00:57,000 --> 00:00:59,000 Se vostede non é, non hai problema. 20 00:00:59,000 --> 00:01:02,000 Temos Macs no Centro de Ciencias dispoñibles para o seu uso 21 00:01:02,000 --> 00:01:05,000 co Xcode instalado, e tan a gusto para usar os para o desenvolvemento. 22 00:01:05,000 --> 00:01:07,000 Se queres facer un app, pero non ten un Mac, non se preocupe. 23 00:01:07,000 --> 00:01:09,000 Hai unha abundancia de recursos do campus para iso. 24 00:01:09,000 --> 00:01:15,000 E entón nós estamos indo para cubrir 2 exemplos maiores de aplicacións diferentes que podes facer. 25 00:01:15,000 --> 00:01:19,000 Objective-C é técnicamente o que se chama un super set de C. 26 00:01:19,000 --> 00:01:24,000 Isto significa que calquera código C é tamén o código Objective-C válido. 27 00:01:24,000 --> 00:01:29,000 Isto significa que tipo de conducto gravadas algunhas características adicionais C. 28 00:01:29,000 --> 00:01:33,000 Algunhas destas características inclúen non ter que escribir sempre malloc novo, grazas a Deus, 29 00:01:33,000 --> 00:01:36,000 sen ter que se preocupar cos punteiros estúpidas e liberando-os e todas as cousas que 30 00:01:36,000 --> 00:01:40,000 vostede odiaba sobre C, e é unha especie de desaparecido en Objective-C. 31 00:01:40,000 --> 00:01:43,000 >> Agora, Objective-C tamén ten unha biblioteca estándar moito maior, 32 00:01:43,000 --> 00:01:47,000 por iso hai unha función moito máis comeza dentro libre de Objective-C. 33 00:01:47,000 --> 00:01:50,000 Lembre-se de cando estabamos escribindo PHP notamos que pasou de 34 00:01:50,000 --> 00:01:54,000 este pequeno linguaxe para a biblioteca xigante de todas estas cousas malucas que podes facer. 35 00:01:54,000 --> 00:01:56,000 A mesma cousa sucede no IOS. 36 00:01:56,000 --> 00:01:59,000 Hai obxectos para cousas como o calendario budista, e realmente nada 37 00:01:59,000 --> 00:02:05,000 pode pensar de, probablemente, xa está na implementación Objective-C. 38 00:02:05,000 --> 00:02:08,000 A parte obxectiva da Objective-C é referencia algo 39 00:02:08,000 --> 00:02:11,000 chamado Programación Orientada a Obxectos. 40 00:02:11,000 --> 00:02:14,000 Este é o tipo de un concepto novo, pero temos, en realidade a maioría aprendeu 41 00:02:14,000 --> 00:02:17,000 moitos deses conceptos xa. 42 00:02:17,000 --> 00:02:19,000 A idea detrás Programación Orientada a Obxectos que está indo a estruturar 43 00:02:19,000 --> 00:02:23,000 unha morea de código en torno destas cousas chamadas de clases, 44 00:02:23,000 --> 00:02:26,000 e esas clases son realmente glorificado estruturas. 45 00:02:26,000 --> 00:02:30,000 Dentro dunha estrutura que basicamente dixo aquí é unha cousa, 46 00:02:30,000 --> 00:02:32,000 e esta cousa pode ter membros. 47 00:02:32,000 --> 00:02:35,000 Por exemplo, un nó de lista ligada pode ter outras cousas 48 00:02:35,000 --> 00:02:38,000 como un valor, un punteiro para o próximo nó na lista, 49 00:02:38,000 --> 00:02:44,000 e, xuntos, ese punteiro e ese valor compuxo esta instancia dunha struct. 50 00:02:44,000 --> 00:02:47,000 As clases son moi semellantes, excepto 51 00:02:47,000 --> 00:02:50,000 clases tamén poden ter funcións dentro deles. 52 00:02:50,000 --> 00:02:54,000 Cando declaramos unha estrutura, podemos só dicir n int ou * vindeiro nodo. 53 00:02:54,000 --> 00:02:57,000 >> Agora, co Objective-C, podemos realmente poñer funcións 54 00:02:57,000 --> 00:02:59,000 dentro desas cousas. 55 00:02:59,000 --> 00:03:03,000 Outra cousa que as clases poden facer é que poden herdar datos de outras clases. 56 00:03:03,000 --> 00:03:07,000 Por exemplo, imos estar a ollar a unha morea de built-in clases Objective-C. 57 00:03:07,000 --> 00:03:11,000 Un deles podería ser a clase que representa o punto de vista dunha pantalla, 58 00:03:11,000 --> 00:03:14,000 e así por dicir quero aplicar meu propio punto de vista 59 00:03:14,000 --> 00:03:18,000 Nós basicamente dicir alguén na Apple, a xente probablemente moi legais, 60 00:03:18,000 --> 00:03:21,000 escribiu esta clase para min, e trata sobre as cousas como mostrar botóns 61 00:03:21,000 --> 00:03:25,000 ou facendo a pantalla, e sería moi triste 62 00:03:25,000 --> 00:03:28,000 para aplicar todas as funcións que nós mesmos, e así, simplemente 63 00:03:28,000 --> 00:03:31,000 herdar datos, podemos dicir que todo o que fixo na clase 64 00:03:31,000 --> 00:03:34,000 Eu tamén quero dentro da miña clase, e entón eu vou facer algunhas outras cousas, 65 00:03:34,000 --> 00:03:37,000 ou sexa, aplicar un programa. 66 00:03:37,000 --> 00:03:40,000 Isto é o que a herdanza palabra significa. Imos ver un exemplo máis concreto. 67 00:03:40,000 --> 00:03:42,000 >> E, finalmente, a clave con programación orientada a obxectos é que 68 00:03:42,000 --> 00:03:45,000 ela conduce a encapsulação de datos. 69 00:03:45,000 --> 00:03:48,000 En algúns dos noso problema define poderiamos ter estes grandes, variables globais 70 00:03:48,000 --> 00:03:51,000 e globais en todas partes, e é así que nós manter o control de estado. 71 00:03:51,000 --> 00:03:55,000 Con clases podemos comezar encapsulado información dentro dun obxecto. 72 00:03:55,000 --> 00:03:58,000 Se temos unha pantalla no noso app, nós realmente non precisa ter todos os datos de 73 00:03:58,000 --> 00:04:01,000 outra pantalla no noso interior app que, 74 00:04:01,000 --> 00:04:04,000 e así por encapsulado as cousas dentro de clases que realmente leva 75 00:04:04,000 --> 00:04:08,000 ao proxecto de código moito mellor, e iso é posible con algúns dos recursos adicionais 76 00:04:08,000 --> 00:04:11,000 de Objective-C. 77 00:04:11,000 --> 00:04:15,000 Aviso previo, a sintaxe para Objective-C e bananas. 78 00:04:15,000 --> 00:04:19,000 É como nada que xa vimos antes, 79 00:04:19,000 --> 00:04:22,000 por iso é un pouco de unha curva de aprendizaxe para acostumar 80 00:04:22,000 --> 00:04:24,000 o que diaños significa isto? 81 00:04:24,000 --> 00:04:27,000 Pero unha vez que pasar por esa curva de aprendizaxe inicial é realmente, realmente bo 82 00:04:27,000 --> 00:04:29,000 para comezar a escribir aplicacións. 83 00:04:29,000 --> 00:04:33,000 >> Para declarar unha clase, a dicir aquí é a miña clase, existe, 84 00:04:33,000 --> 00:04:35,000 e, quizais, aquí están algunhas cousas que eu estou indo a definir posteriormente, 85 00:04:35,000 --> 00:04:38,000 Eu vou dicir @ interface. 86 00:04:38,000 --> 00:04:41,000 Eu vou dicir @ interface. Vou dar a miña aula dun nome. 87 00:04:41,000 --> 00:04:43,000 E, máis tarde, en outro lugar que eu vou dicir @ final, 88 00:04:43,000 --> 00:04:46,000 e todo entre a interfaz eo @ @ end 89 00:04:46,000 --> 00:04:48,000 vai ser a miña clase. 90 00:04:48,000 --> 00:04:51,000 Isto vai ser o que está dentro dos nosos arquivos. H. 91 00:04:51,000 --> 00:04:55,000 Así como en C nosos arquivos. H basicamente dixo, aquí están algunhas cousas que existen. 92 00:04:55,000 --> 00:04:57,000 Eu non estou necesariamente dicindo o que eles fan, con todo, 93 00:04:57,000 --> 00:04:59,000 pero o compilador precisa saber que existen. 94 00:04:59,000 --> 00:05:04,000 Máis tarde, dentro da nosa m. Arquivos, porque m para Objective-C 95 00:05:04,000 --> 00:05:08,000 é onde estamos indo realmente para definir o que esas clases forman. 96 00:05:08,000 --> 00:05:11,000 Moi parecido cos nosos arquivos. C, fornecen unha implementación para funcións. 97 00:05:11,000 --> 00:05:15,000 Dentro do noso arquivo. M imos dicir aquí é que todas as funcións 98 00:05:15,000 --> 00:05:18,000 dentro da miña clase que todos fan. 99 00:05:18,000 --> 00:05:22,000 E, finalmente, dentro dunha estrutura poderiamos dicir dentro desas claves 100 00:05:22,000 --> 00:05:25,000 int, ou no n * próxima 101 00:05:25,000 --> 00:05:28,000 e en Objective-C, imos utilizar a palabra chave @ Property 102 00:05:28,000 --> 00:05:31,000 e isto é o que vai definir as propiedades, 103 00:05:31,000 --> 00:05:36,000 ou as funcións non que son unha parte das miñas clases. 104 00:05:36,000 --> 00:05:40,000 >> Chamando funcións en Objective-C é tamén bananas. 105 00:05:40,000 --> 00:05:43,000 Cando declarou funcións en C que dixo algo así como int foo 106 00:05:43,000 --> 00:05:46,000 e aberto paréntese e despois deulle unha lista de argumentos. 107 00:05:46,000 --> 00:05:51,000 Isto é o que declarar métodos ou funcións parece en Objective-C. 108 00:05:51,000 --> 00:05:54,000 Se eu queira declarar unha función ou un método 109 00:05:54,000 --> 00:05:58,000 onde eu estou dicindo método é realmente só unha función que é membro dunha clase, 110 00:05:58,000 --> 00:06:01,000 tan tipo de intercambiables, pero non realmente, 111 00:06:01,000 --> 00:06:03,000 tan dentro do meu método quero crear un novo método. 112 00:06:03,000 --> 00:06:06,000 Vai voltar nada, polo que vai ser do tipo void. 113 00:06:06,000 --> 00:06:08,000 Este é o tipo de retorno da miña función. 114 00:06:08,000 --> 00:06:11,000 Agora temos parénteses aquí porque eu non sei. 115 00:06:11,000 --> 00:06:14,000 A continuación será o nome da miña función, 116 00:06:14,000 --> 00:06:17,000 e, finalmente, temos un punto e coma como tivemos en C. 117 00:06:17,000 --> 00:06:19,000 O que é novo aquí é este cara aquí. 118 00:06:19,000 --> 00:06:22,000 Este trazo é realmente necesario, eo que iso di é que 119 00:06:22,000 --> 00:06:26,000 este método aquí debe ser chamado unha instancia dunha clase. 120 00:06:26,000 --> 00:06:29,000 >> Despois que declarou nosas estruturas que probablemente dixo algo así como 121 00:06:29,000 --> 00:06:32,000 n nodo struct, e que creou 122 00:06:32,000 --> 00:06:35,000 ou instanciado unha desas estruturas para que eu puidese realmente comezar a traballar 123 00:06:35,000 --> 00:06:38,000 co que está dentro del, de xeito que este trazo significa que temos que 124 00:06:38,000 --> 00:06:41,000 instanciar a clase así como nós instanciado que struct 125 00:06:41,000 --> 00:06:43,000 antes de nós pode chamar ese método nel. 126 00:06:43,000 --> 00:06:46,000 Se eu queira comezar a engadir argumentos para os meus métodos 127 00:06:46,000 --> 00:06:48,000 tórnase aínda máis bananas. 128 00:06:48,000 --> 00:06:50,000 Aquí está o meu nome do método. 129 00:06:50,000 --> 00:06:53,000 Entón eu vou ter dous puntos, e logo este colonos di aquí vén algúns argumentos. 130 00:06:53,000 --> 00:06:56,000 Este método ten un argumento. 131 00:06:56,000 --> 00:06:59,000 O tipo do argumento é un int, eo nome que o argumento 132 00:06:59,000 --> 00:07:03,000 ou a variable que eu vou comezar a usar dentro do método é chamado de i. 133 00:07:03,000 --> 00:07:05,000 De novo, este é o método. Ela ten un argumento. 134 00:07:05,000 --> 00:07:10,000 >> Se queres comezar a engadir máis argumentos queda máis bananas 135 00:07:10,000 --> 00:07:13,000 en que temos esta colonos que di aquí vén a miña lista de argumentos. 136 00:07:13,000 --> 00:07:15,000 Este primeiro argumento é un enteiro. 137 00:07:15,000 --> 00:07:17,000 Agora, este segundo argumento é interesante. 138 00:07:17,000 --> 00:07:20,000 A variable que eu vou estar usando dentro da miña función 139 00:07:20,000 --> 00:07:23,000 chámase f, na miña función eu podería dicir 140 00:07:23,000 --> 00:07:25,000 f + = 1 ou algo así. 141 00:07:25,000 --> 00:07:30,000 Iso aquí é basicamente unha chave para que o argumento ou parámetro. 142 00:07:30,000 --> 00:07:34,000 Así como tivemos pares de valores clave e algo JSON ou arrays asociativos 143 00:07:34,000 --> 00:07:37,000 Objective-C tomou a decisión de dicir, ben, só para que quede ben claro 144 00:07:37,000 --> 00:07:39,000 cando chamar un método que todos estes parámetros son 145 00:07:39,000 --> 00:07:41,000 Eu estou indo realmente para nomea-los todos. 146 00:07:41,000 --> 00:07:45,000 Cando chama un método, vai realmente dicir andFloat, 147 00:07:45,000 --> 00:07:47,000 e entón vai pasalo dentro 148 00:07:47,000 --> 00:07:50,000 >> Curiosamente, este non é nomeado, pero todos os outros parámetros, 149 00:07:50,000 --> 00:07:53,000 por iso, se tivésemos un argumento 3 que eu podería dicir andFloat 150 00:07:53,000 --> 00:07:56,000 e outra boia e así por diante. 151 00:07:56,000 --> 00:08:01,000 Cando chamar estes métodos é de bananas do curso, 152 00:08:01,000 --> 00:08:04,000 Entón, se eu teño un obxecto, e definido un método chamado foo, 153 00:08:04,000 --> 00:08:09,000 e quero chamalo, en vez de dicir foo aberto / parens próximos 154 00:08:09,000 --> 00:08:11,000 Vou abrir un paréntesis. 155 00:08:11,000 --> 00:08:13,000 Aquí está o nome do meu método. 156 00:08:13,000 --> 00:08:17,000 Vou pechar o soporte, e ese é o obxecto que eu estou chamando-o. 157 00:08:17,000 --> 00:08:20,000 Lembre, todos estes métodos existen dentro de clases 158 00:08:20,000 --> 00:08:23,000 porque as clases poden ter métodos definidos dentro deles. 159 00:08:23,000 --> 00:08:26,000 >> Aquí arbitrariamente creado un obxecto dalgunha clase, 160 00:08:26,000 --> 00:08:28,000 e esta é a sintaxe para facelo. 161 00:08:28,000 --> 00:08:31,000 Hai dous pasos para a creación dun obxecto. 162 00:08:31,000 --> 00:08:34,000 O primeiro paso é dicir que quero reservar espazo. 163 00:08:34,000 --> 00:08:37,000 Isto é o equivalente de un malloc. Non temos que dicir malloc máis. 164 00:08:37,000 --> 00:08:42,000 Nós derrubamos o m, fixo alloc, e substituíu o c. Com M. 165 00:08:42,000 --> 00:08:47,000 Despois de que algo alloc que necesita entón a arrincar. 166 00:08:47,000 --> 00:08:49,000 Basicamente, cando se crea obxectos que pode querer ter algunha lóxica 167 00:08:49,000 --> 00:08:53,000 que é executado cando son creados, así pode pasar algúns valores por defecto 168 00:08:53,000 --> 00:08:57,000 ou algo así, e por iso este método init é o que realmente crea o obxecto. 169 00:08:57,000 --> 00:08:59,000 Nós primeiro reservar espazo, así como fixemos en C, 170 00:08:59,000 --> 00:09:04,000 e, entón, iniciar, o que pode ou non pode facer moita cousa. 171 00:09:04,000 --> 00:09:07,000 Entón, nós estamos volvendo esa cousa nun obxecto. 172 00:09:07,000 --> 00:09:09,000 Hai unha estrela aquí porque este é, tecnicamente, un punteiro, 173 00:09:09,000 --> 00:09:12,000 pero non se preocupe, os punteiros non son gran cousa en Objective-C máis. 174 00:09:12,000 --> 00:09:15,000 >> Agora instanciado esta clase chamada NSObject, 175 00:09:15,000 --> 00:09:19,000 e esta é só unha clase aleatoria que Apple ten. 176 00:09:19,000 --> 00:09:22,000 Nós instanciado iso, e agora eu teño unha instancia da clase 177 00:09:22,000 --> 00:09:25,000 neste obxecto, o que significa que se eu definir 178 00:09:25,000 --> 00:09:29,000 estes métodos que eu podería chamalos así. 179 00:09:29,000 --> 00:09:31,000 Do mesmo xeito, se eu quixese chamar un método con un argumento, 180 00:09:31,000 --> 00:09:34,000 por iso este é o método de bar, que ten un argumento, 181 00:09:34,000 --> 00:09:38,000 e aquí é o Baz: método qux, entón iso leva 2 argumentos. 182 00:09:38,000 --> 00:09:44,000 Iso está chamando dunha función nesta obxecto. 183 00:09:44,000 --> 00:09:46,000 Ten sentido? 184 00:09:46,000 --> 00:09:50,000 A sintaxe debe ter sentido, pero medio que se acostumar con iso. 185 00:09:50,000 --> 00:09:54,000 >> Ok, imos falar sobre algunhas cousas que son construídos en Objective-C 186 00:09:54,000 --> 00:09:56,000 que non foron necesariamente construído en C. 187 00:09:56,000 --> 00:09:59,000 En que tipo de C tivo que xestione as secuencias como estas matrices de carácter estúpidas, 188 00:09:59,000 --> 00:10:01,000 e el quedou realmente irritante. 189 00:10:01,000 --> 00:10:04,000 Objective-C ten todos aqueles construído en para nós, e está construído en 190 00:10:04,000 --> 00:10:06,000 usando esta clase chamada NSString. 191 00:10:06,000 --> 00:10:10,000 Cando quero crear un NSString temos sintaxe máis misterioso. 192 00:10:10,000 --> 00:10:15,000 En vez de dicir "CS50", dicimos @ "CS50" 193 00:10:15,000 --> 00:10:17,000 e esta é só a sintaxe para declarar strings en Objective-C. 194 00:10:17,000 --> 00:10:21,000 Isto é moi doado de esquecer, por iso non. 195 00:10:21,000 --> 00:10:24,000 Agora, unha vez que teño iso, iso é unha secuencia, pero teña en conta 196 00:10:24,000 --> 00:10:26,000 é realmente só un obxecto. 197 00:10:26,000 --> 00:10:30,000 Eu dixen NSString, o que significa que a clase instanciada 198 00:10:30,000 --> 00:10:32,000 chamada NSString, que alguén escribiu para min, 199 00:10:32,000 --> 00:10:35,000 e eles foron moi agradable sobre el, e por iso agora 200 00:10:35,000 --> 00:10:37,000 Eu podo comezar a chamar métodos nel. 201 00:10:37,000 --> 00:10:40,000 Se eu chamar a lonxitude método nesta s obxecto 202 00:10:40,000 --> 00:10:43,000 vai volver para min a lonxitude da corda. 203 00:10:43,000 --> 00:10:45,000 Este é só como strlen en C. 204 00:10:45,000 --> 00:10:47,000 Este volvería 4. 205 00:10:47,000 --> 00:10:51,000 >> Do mesmo xeito, outro método que eu podería querer se preocupar con iso é characterAtIndex. 206 00:10:51,000 --> 00:10:54,000 Este é un método que di sobre este string s 207 00:10:54,000 --> 00:10:57,000 Eu quero vostede para obter o carácter 0, 208 00:10:57,000 --> 00:10:59,000 e así que este volvería para min o carácter C, 209 00:10:59,000 --> 00:11:02,000 e hai unha morea máis destes métodos que pode Google realmente fácil. 210 00:11:02,000 --> 00:11:07,000 Documentación de Apple é grande, e nós imos dar un ollo ao que a pouco. 211 00:11:07,000 --> 00:11:09,000 Esas son cordas. 212 00:11:09,000 --> 00:11:11,000 Temos tamén matrices de tamaño variable construído dentro 213 00:11:11,000 --> 00:11:13,000 Teña en conta que o C cando declaramos unha matriz 214 00:11:13,000 --> 00:11:16,000 tivemos que dicir que ten 5 elementos, fin da historia. 215 00:11:16,000 --> 00:11:18,000 Cando chegamos ao JavaScript e PHP poderiamos comezar 216 00:11:18,000 --> 00:11:20,000 facer as cousas como a adición de elementos ou movendo elementos. 217 00:11:20,000 --> 00:11:22,000 Podemos facer o mesmo en Objective-C. 218 00:11:22,000 --> 00:11:26,000 En vez de crear unha matriz no camiño C normal 219 00:11:26,000 --> 00:11:30,000 temos novo outra clase chamada NSMutableArray. 220 00:11:30,000 --> 00:11:33,000 Hai tamén NSArray, 221 00:11:33,000 --> 00:11:35,000 e iso vai basicamente encapsulado algúns matriz. 222 00:11:35,000 --> 00:11:38,000 Este di que o primeiro que quero facer é que quero para reservar 223 00:11:38,000 --> 00:11:41,000 espazo para unha nova matriz, e despois de que eu atribuílo lo 224 00:11:41,000 --> 00:11:43,000 Eu, entón, que inicia-lo. 225 00:11:43,000 --> 00:11:45,000 De novo, pode chamar estes dous métodos. 226 00:11:45,000 --> 00:11:48,000 Agora, isto significa que dentro deste obxecto dun 227 00:11:48,000 --> 00:11:50,000 Eu teño unha matriz baleira sentado alí. 228 00:11:50,000 --> 00:11:54,000 Se eu queira engadir algo a esa matriz, podo chamar o método addObject. 229 00:11:54,000 --> 00:11:59,000 Eu quero engadir un obxecto a matriz, e quero engadir a cadea CS50. 230 00:11:59,000 --> 00:12:02,000 Se eu quixese borrar inversamente que podo dicir que quero 231 00:12:02,000 --> 00:12:09,000 eliminar o obxecto en primeiro lugar na matriz ou un obxecto. 232 00:12:09,000 --> 00:12:11,000 >> Ten sentido? 233 00:12:11,000 --> 00:12:14,000 Ok, vostede medio que se acostumar con esa cousa colchete. 234 00:12:14,000 --> 00:12:18,000 A propósito, dentro de unha chea de librerías de Apple podes ver este NS. 235 00:12:18,000 --> 00:12:21,000 O NS está realmente a próxima etapa, que foi unha das empresas de Steve Jobs primeira, 236 00:12:21,000 --> 00:12:24,000 e é aí onde realmente comezou a escribir unha morea de código 237 00:12:24,000 --> 00:12:27,000 como unha especie de base para o Mac OS X e todas as outras cousas, 238 00:12:27,000 --> 00:12:32,000 e por iso este tipo de NS é ese legado bo berrar para unha das empresas máis antigas 239 00:12:32,000 --> 00:12:34,000 volta, cando a Apple foi a primeira partida. 240 00:12:34,000 --> 00:12:36,000 Está en todas partes. 241 00:12:36,000 --> 00:12:41,000 Imos dar un ollo a un exemplo máis holística Objective-C. 242 00:12:41,000 --> 00:12:44,000 Aquí estou dentro Xcode. 243 00:12:44,000 --> 00:12:47,000 Para chegar ata aquí, eu primeiro baixo Xcode da App Store, 244 00:12:47,000 --> 00:12:50,000 abriuse, e entón eu fun ata aquí para arquivo, 245 00:12:50,000 --> 00:12:54,000 acá para novo proxecto, e entón. 246 00:12:54,000 --> 00:12:57,000 Despois de facer isto eu teño todas esas opcións do que quero para crear, 247 00:12:57,000 --> 00:12:59,000 e así imos dar un ollo nesas opcións máis tarde, 248 00:12:59,000 --> 00:13:03,000 pero só para este exemplo, porque non estamos realmente vai ter unha aplicación, con todo, 249 00:13:03,000 --> 00:13:06,000 Eu vin aquí, e eu dixen ferramenta de liña de comandos, 250 00:13:06,000 --> 00:13:09,000 e este é unha aplicación que eu podería executar na liña de comandos 251 00:13:09,000 --> 00:13:12,000 como vimos execución de C. 252 00:13:12,000 --> 00:13:16,000 É así que eu creei este proxecto, e agora eu estou aquí, 253 00:13:16,000 --> 00:13:20,000 entón imos primeiro ollar para este ficheiro, e iso debe ollar moi familiar. 254 00:13:20,000 --> 00:13:24,000 Eu teño un nome int. Non é o meu argc amigo, meu outro amigo argv. 255 00:13:24,000 --> 00:13:30,000 E así podemos ver que este é o punto de entrada para a miña candidatura Objective-C primeiro. 256 00:13:30,000 --> 00:13:32,000 Aquí podemos ignorar isto por agora. 257 00:13:32,000 --> 00:13:35,000 Este é basicamente algunhas cousas manexo de memoria que non vai realmente 258 00:13:35,000 --> 00:13:37,000 sempre ten que se preocupar. 259 00:13:37,000 --> 00:13:39,000 >> Imos ollar para este primeiro bloque aquí. 260 00:13:39,000 --> 00:13:46,000 Esta primeira liña, se eu dixer Estudante * Alice = [[alloc Estudante] init] que é o que está facendo? 261 00:13:46,000 --> 00:13:50,000 Este primeiro alumno aquí, esta é probablemente unha clase. 262 00:13:50,000 --> 00:13:54,000 Esta non é unha clase que Apple escribiu, pero é unha clase que eu escribín. 263 00:13:54,000 --> 00:13:57,000 A primeira cousa que quero facer é que quero reservar espacio para un novo alumno, 264 00:13:57,000 --> 00:14:00,000 e entón eu quero para iniciar, entón iso me dá de volta 265 00:14:00,000 --> 00:14:05,000 este obxecto novo alumno, e eu son almacenar tanto nunha variable chamada Alicia. 266 00:14:05,000 --> 00:14:07,000 Onde foi que a clase vén? 267 00:14:07,000 --> 00:14:12,000 Ben, aquí ao lado esquerdo son todos os ficheiros distintos dentro do meu proxecto. 268 00:14:12,000 --> 00:14:16,000 Podemos ver aquí eu teño un Student.h e un Student.m. 269 00:14:16,000 --> 00:14:20,000 O. Arquivo h, lembre, é onde eu declaro todas as cousas 270 00:14:20,000 --> 00:14:22,000 que existirá dentro da clase. 271 00:14:22,000 --> 00:14:25,000 >> Imos dar un ollo niso. 272 00:14:25,000 --> 00:14:29,000 Todo ben, aquí temos esta interface @, e este di que aquí vén 273 00:14:29,000 --> 00:14:33,000 as declaracións de todo o que vai existir dentro da miña clase. 274 00:14:33,000 --> 00:14:36,000 Entón eu teño dous puntos. Entón eu teño esa cousa NSObject. 275 00:14:36,000 --> 00:14:40,000 Isto significa que pouco colonos herdanza estabamos discutindo un pouco máis cedo. 276 00:14:40,000 --> 00:14:43,000 Isto di todo o que un pode facer NSObject 277 00:14:43,000 --> 00:14:46,000 onde NSObject é esta clase escrito por outra persoa, 278 00:14:46,000 --> 00:14:50,000 todo o que pode facer NSObject Eu quero ser capaz de facer iso. 279 00:14:50,000 --> 00:14:54,000 Ao dicir: NSObject que significa que, basicamente, 280 00:14:54,000 --> 00:14:58,000 herdado toda a funcionalidade de outra clase. 281 00:14:58,000 --> 00:15:02,000 Isto realmente me deu unha morea de diferentes métodos e propiedades que eu poida usar. 282 00:15:02,000 --> 00:15:05,000 Aquí debaixo eu estou creando dúas propiedades. 283 00:15:05,000 --> 00:15:08,000 Isto significa que o meu alumno, se este fose unha estrutura, estes serían os 2 cousas 284 00:15:08,000 --> 00:15:11,000 dentro da miña estrutura, de xeito que cada alumno ten un nome 285 00:15:11,000 --> 00:15:14,000 que é unha cadea, e un estudante tamén ten un grao, 286 00:15:14,000 --> 00:15:17,000 que é un int. 287 00:15:17,000 --> 00:15:23,000 >> Finalmente, aquí eu vou crear un método para o meu alumno. 288 00:15:23,000 --> 00:15:26,000 Liguei para o meu método, initWithName, e leva un argumento, 289 00:15:26,000 --> 00:15:31,000 e ese argumento é unha cadea, e eu chamei el nomear. 290 00:15:31,000 --> 00:15:35,000 Agora imos ollar como nós realmente aplicado nesta clase. 291 00:15:35,000 --> 00:15:38,000 Aquí, agora eu estou dentro do meu arquivo m., 292 00:15:38,000 --> 00:15:40,000 m para a implantación, eu creo. 293 00:15:40,000 --> 00:15:44,000 Eu teño a miña aplicación, o meu fin, e aquí é onde eu estou, en realidade, a definición de 294 00:15:44,000 --> 00:15:47,000 o que fai initWithName. 295 00:15:47,000 --> 00:15:50,000 Teño initWithName, o nome do meu parámetro, e entón esta 296 00:15:50,000 --> 00:15:53,000 é onde eu estou, en realidade, a creación dun estudante, 297 00:15:53,000 --> 00:15:56,000 e por iso este é un pouco enigmático, pero este é o tipo de clichê 298 00:15:56,000 --> 00:15:58,000 que quere incluir nos seus construtores. 299 00:15:58,000 --> 00:16:02,000 Esta función de arranque aquí, initWithName, é un tipo de constructor. 300 00:16:02,000 --> 00:16:05,000 Vostede está basicamente a construción dun obxecto novo alumno 301 00:16:05,000 --> 00:16:07,000 e quizais o envío de algúns datos dentro dela. 302 00:16:07,000 --> 00:16:11,000 A primeira cousa que quero facer é que quero chamar o init nesta cousa super. 303 00:16:11,000 --> 00:16:15,000 >> Lembre que cando eu dixen aquí no arquivo h. 304 00:16:15,000 --> 00:16:21,000 que todo un NSObject ten un estudante tamén ten. 305 00:16:21,000 --> 00:16:24,000 Isto significa que cando creo un estudante que eu tamén teño que facer é 306 00:16:24,000 --> 00:16:28,000 asegúrese de que o NSObject que estou herdando todos os datos a partir de 307 00:16:28,000 --> 00:16:32,000 É tamén inicializar correctamente. 308 00:16:32,000 --> 00:16:36,000 O que eu teño que dicir é o super é realmente indo para referirse a clase pai 309 00:16:36,000 --> 00:16:39,000 que eu estou herdando así que quero asegurarme de que arrincar 310 00:16:39,000 --> 00:16:43,000 todo o que eu estou dependendo antes de comezar a tentar usalo. 311 00:16:43,000 --> 00:16:46,000 Entón, se isto inicializar correctamente este é só como dicir se malloc 312 00:16:46,000 --> 00:16:50,000 non voltar nulo, entón eu podo comezar a definir algunhas propiedades. 313 00:16:50,000 --> 00:16:54,000 >> En JavaScript e PHP tiñamos esta palabra clave chamada iso, 314 00:16:54,000 --> 00:16:58,000 e iso se refire á instancia actual dunha clase. 315 00:16:58,000 --> 00:17:00,000 En Objective-C chamamos iso de si mesmo. 316 00:17:00,000 --> 00:17:04,000 Cando digo self.name, o que significa que o obxecto 317 00:17:04,000 --> 00:17:07,000 Acaba de crear cando dixo alloc estudante init, 318 00:17:07,000 --> 00:17:09,000 que me vai dar de volta un obxecto. 319 00:17:09,000 --> 00:17:12,000 Isto significa que eu quero para definir o nome do obxecto 320 00:17:12,000 --> 00:17:15,000 para o que eu só pasou dentro 321 00:17:15,000 --> 00:17:18,000 Así como en C, temos acceso a membros con este punto, 322 00:17:18,000 --> 00:17:21,000 así self.name di o nome do obxecto de estudante 323 00:17:21,000 --> 00:17:24,000 agora vai ser o que acaba de pasar dentro 324 00:17:24,000 --> 00:17:28,000 E así, finalmente, podo devolve-lo así que eu realmente volver algo. 325 00:17:28,000 --> 00:17:30,000 >> Preguntas? 326 00:17:30,000 --> 00:17:34,000 Ok, entón esa auto = super-init, 327 00:17:34,000 --> 00:17:37,000 se non comprender totalmente o material herdanza non se preocupe. 328 00:17:37,000 --> 00:17:40,000 Só sei que se quere facer o seu propio método de arranque só 329 00:17:40,000 --> 00:17:42,000 facelo, e vai ser bo para ir. 330 00:17:42,000 --> 00:17:44,000 Si >> [Estudante] O que se auto media? 331 00:17:44,000 --> 00:17:49,000 Isto significa que cando nós malloc algo que sempre verificado se era igual a nulo, 332 00:17:49,000 --> 00:17:51,000 e era nulo, entón saímos. 333 00:17:51,000 --> 00:17:55,000 Esta é a mesma cousa, porque se este regresa nulo, entón probablemente imos culpa seg 334 00:17:55,000 --> 00:17:57,000 se comezar a tentar manipulala lo. 335 00:17:57,000 --> 00:18:01,000 Esa é a nosa clase estudantil. 336 00:18:01,000 --> 00:18:03,000 Isto significa que podemos iniciar nosos alumnos nunha de dous xeitos. 337 00:18:03,000 --> 00:18:08,000 Se eu dixer que o init alloc estudante eu non estou usando este método que eu escribín, 338 00:18:08,000 --> 00:18:11,000 e en canto podo simplemente dicir alice.name, 339 00:18:11,000 --> 00:18:14,000 e agora eu estou indo a definir o nome da propiedade. 340 00:18:14,000 --> 00:18:17,000 >> Do mesmo xeito, se eu queira utilizar este método initWithName 341 00:18:17,000 --> 00:18:20,000 Podo simplemente dicir alloc, e despois en vez de dicir o init 342 00:18:20,000 --> 00:18:24,000 Vou chamar ese método que acaba de crear, e eu vou pasar Bob. 343 00:18:24,000 --> 00:18:30,000 Neste punto, o Bob obxecto ten un nome igual ao Bob. 344 00:18:30,000 --> 00:18:35,000 Ok, aquí estou usando o que NSMutableArray que vimos anteriormente. 345 00:18:35,000 --> 00:18:38,000 Estou alocando space.Then estou inicializando unha nova matriz. 346 00:18:38,000 --> 00:18:40,000 Eu estou indo para engadir 2 cousas a el. 347 00:18:40,000 --> 00:18:43,000 Esta matriz agora ten obxectos estudantes. 348 00:18:43,000 --> 00:18:46,000 Repare que en ningún lugar que eu teño que dicir que este é un conxunto de alumnos. 349 00:18:46,000 --> 00:18:48,000 Eu dixen que é unha matriz, período. 350 00:18:48,000 --> 00:18:50,000 Entón eu podo poñer o que dentro del que quero. 351 00:18:50,000 --> 00:18:52,000 Aquí eu teño dous obxectos. 352 00:18:52,000 --> 00:18:56,000 >> Finalmente, teño un outro obxecto aquí, este TF. 353 00:18:56,000 --> 00:18:59,000 Aquí en TF.h basicamente a mesma cousa. 354 00:18:59,000 --> 00:19:01,000 Estou herdando de NSObject, e, a propósito, 355 00:19:01,000 --> 00:19:03,000 cando crear clases de todo isto está feito para ti, 356 00:19:03,000 --> 00:19:06,000 este tipo de clichê interface. 357 00:19:06,000 --> 00:19:08,000 El ten unha propiedade de estudantes. 358 00:19:08,000 --> 00:19:15,000 Eu teño un par de métodos aquí que realmente non facer moito, 359 00:19:15,000 --> 00:19:18,000 e entón isto significa que despois de eu crear este obxecto TF 360 00:19:18,000 --> 00:19:23,000 Podo chamar ese método en serie así. 361 00:19:23,000 --> 00:19:26,000 Calquera dúbida sobre Objective-C sintaxe antes de comezar a moverse un pouco máis de 362 00:19:26,000 --> 00:19:30,000 cousas desenvolvemento interesante aplicacións? 363 00:19:30,000 --> 00:19:34,000 >> Ok, entón imos realmente facer unha aplicación para iPhone. 364 00:19:34,000 --> 00:19:39,000 As clases do núcleo que vai empregar dentro do seu programa para iPhone son chamados controladores de vista, 365 00:19:39,000 --> 00:19:42,000 e un controlador de vista representa basicamente unha única pantalla 366 00:19:42,000 --> 00:19:46,000 dentro do seu programa, entón eu estou na aplicación de música, por exemplo, 367 00:19:46,000 --> 00:19:50,000 un controlador de vista pode representar o punto de vista en que podo ver todas as cancións no meu iPhone. 368 00:19:50,000 --> 00:19:53,000 Outro controlador de vista podería ser cando clic nunha música e comezar a xogar 369 00:19:53,000 --> 00:19:55,000 ou como eu estou perforación para abaixo en artistas. 370 00:19:55,000 --> 00:19:59,000 Cada unha desas pantallas diferentes poden ser representadas como un controlador de punto de vista, 371 00:19:59,000 --> 00:20:04,000 e un controlador de vista é realmente só unha clase que di como esta pantalla funciona. 372 00:20:04,000 --> 00:20:07,000 Cousas dentro dun controlador de vista, nós imos ter propiedades, 373 00:20:07,000 --> 00:20:10,000 para cousas como un botón que vai ser unha propiedade do noso controlador de vista. 374 00:20:10,000 --> 00:20:13,000 >> Tamén imos ter métodos, e estas son, basicamente, manipuladores de eventos. 375 00:20:13,000 --> 00:20:16,000 Este método di cando prema este botón 376 00:20:16,000 --> 00:20:19,000 Eu quero facer algo, e, finalmente, de novo, 377 00:20:19,000 --> 00:20:24,000 imos estar usando esta palabra clave auto para acceder a instancia actual. 378 00:20:24,000 --> 00:20:29,000 Para construír interfaces no IOS é realmente moi, moi fácil. 379 00:20:29,000 --> 00:20:32,000 Eles teñen esa resistencia agradable e interface caída chamada Interface Builder, 380 00:20:32,000 --> 00:20:37,000 e os dous conceptos fundamentais que o fío do seu Objective-C para Interface Builder 381 00:20:37,000 --> 00:20:40,000 son IBOutlet e IBAction. 382 00:20:40,000 --> 00:20:44,000 Un IBOutlet simplemente di que se declara unha propiedade que é un botón, 383 00:20:44,000 --> 00:20:47,000 e quere conectarse a algo na súa interfaz real, 384 00:20:47,000 --> 00:20:49,000 vai dicir que é unha saída. 385 00:20:49,000 --> 00:20:51,000 Do mesmo xeito, se quere representar un manipulador de eventos 386 00:20:51,000 --> 00:20:54,000 entón vai dicir que é unha acción. 387 00:20:54,000 --> 00:20:57,000 >> Para realmente conectar esta representación gráfica 388 00:20:57,000 --> 00:21:00,000 eo seu código é realmente, realmente sinxelo. 389 00:21:00,000 --> 00:21:03,000 Se desexa engadir un IBOutlet, todo o que tes que facer é controlar clic, 390 00:21:03,000 --> 00:21:05,000 e imos ver un exemplo diso realmente rápido. 391 00:21:05,000 --> 00:21:07,000 Vostede controla clic onde di View Controller. 392 00:21:07,000 --> 00:21:09,000 Vai arrastrar a interfaz, ou, inversamente, 393 00:21:09,000 --> 00:21:13,000 se quere conectar un manipulador de eventos que vai arrastrar a partir da interface 394 00:21:13,000 --> 00:21:15,000 na outra dirección. 395 00:21:15,000 --> 00:21:20,000 Imos dar un ollo a un exemplo IOS realmente sinxelo. 396 00:21:20,000 --> 00:21:23,000 >> Imos crear un novo proxecto. 397 00:21:23,000 --> 00:21:25,000 Vou vir aquí para aplicación, 398 00:21:25,000 --> 00:21:28,000 e eu vou prema en aplicación de visualización simple. 399 00:21:28,000 --> 00:21:31,000 Vou prema Seguinte. Eu vou dar o meu proxecto dun nome. 400 00:21:31,000 --> 00:21:33,000 Vou chamalo Olá 401 00:21:33,000 --> 00:21:36,000 Curiosamente, Apple asume que está creando un produto 402 00:21:36,000 --> 00:21:38,000 de modo que pode vendelo e poden facer diñeiro. 403 00:21:38,000 --> 00:21:41,000 Aquí debaixo vou dicir que este é un programa para iPhone. 404 00:21:41,000 --> 00:21:44,000 Pode crear unha aplicación para iPad, ou se quere crear un destes programas 405 00:21:44,000 --> 00:21:47,000 que soporta dous dispositivos que pode facelo tamén. 406 00:21:47,000 --> 00:21:49,000 Estes son o que quere que os seus checkmarks a aparencia. 407 00:21:49,000 --> 00:21:51,000 >> Quere usar storyboards, que imos ver máis adiante, 408 00:21:51,000 --> 00:21:54,000 e sempre quere usar o contador de referencia automática, 409 00:21:54,000 --> 00:21:58,000 o que é un bo recurso que impide que teña que dicir malloc e free. 410 00:21:58,000 --> 00:22:03,000 A menos que quere chamar malloc e free, eu deixaría o marcado. 411 00:22:03,000 --> 00:22:07,000 Vou prema Seguinte e, finalmente, que me vai preguntar onde eu quero salvalo. 412 00:22:07,000 --> 00:22:14,000 Vou bater crear, e aquí imos nós. 413 00:22:14,000 --> 00:22:16,000 Eu creei un novo proxecto. 414 00:22:16,000 --> 00:22:19,000 Aquí do lado esquerdo son todos os arquivos que están dentro do meu proxecto, 415 00:22:19,000 --> 00:22:22,000 e entender que eu teño unha morea, e eu non fixen nada. 416 00:22:22,000 --> 00:22:24,000 IOS é grande. 417 00:22:24,000 --> 00:22:27,000 >> Por exemplo, aquí ViewController.h iso, 418 00:22:27,000 --> 00:22:30,000 iso vai representar o meu controlador de primeira vista, 419 00:22:30,000 --> 00:22:32,000 para a primeira pantalla dentro do meu programa. 420 00:22:32,000 --> 00:22:34,000 Agora sabemos que isto está dicindo. 421 00:22:34,000 --> 00:22:36,000 Estamos dicindo que eu estou chamando este ViewController clase, 422 00:22:36,000 --> 00:22:40,000 e un ViewController fai todo o que un UIViewController fai, 423 00:22:40,000 --> 00:22:43,000 e iso, de novo, é unha clase que Apple escribiu que fai unha morea de cousas útiles para nós 424 00:22:43,000 --> 00:22:46,000 Como amosar a pantalla. 425 00:22:46,000 --> 00:22:50,000 Aquí é onde podo realmente comezar a definir o que o meu controlador de vista fai, 426 00:22:50,000 --> 00:22:52,000 e resulta que realmente non precisa de nada diso. 427 00:22:52,000 --> 00:22:55,000 Este é o código cliché de que Apple me dá de balde. 428 00:22:55,000 --> 00:22:59,000 Eu fixen precisa que a primeira liña, ou eu non teño unha clase, 429 00:22:59,000 --> 00:23:02,000 así podemos librar diso e se librar desa. 430 00:23:02,000 --> 00:23:05,000 Ok, entón esta é a miña pantalla baleira. 431 00:23:05,000 --> 00:23:08,000 >> Agora imos premer neste MainStoryboard.storyboard, 432 00:23:08,000 --> 00:23:11,000 e é aí onde comeza a estar interesante. 433 00:23:11,000 --> 00:23:14,000 Isto representa a primeira pantalla do meu programa. 434 00:23:14,000 --> 00:23:17,000 Se eu queira engadir un botón, HTML, eu tiven que crear unha marca de botón. 435 00:23:17,000 --> 00:23:20,000 En Android ten que crear unha etiqueta botón, 436 00:23:20,000 --> 00:23:23,000 pero no IOS se eu vir aquí para a parte inferior dereita 437 00:23:23,000 --> 00:23:27,000 e se eu facer clic nun presente 3 aquí onde di Obxectos, 438 00:23:27,000 --> 00:23:31,000 e podo desprazar para abaixo, ou podo comezar a buscar botón. 439 00:23:31,000 --> 00:23:35,000 E mira, un botón, entón eu realmente arrastrar e soltar ese dereito alí, 440 00:23:35,000 --> 00:23:38,000 Eu só engadiu un botón para esta pantalla no meu app. 441 00:23:38,000 --> 00:23:41,000 Se eu queira cambiar o texto, podo facer dobre clic nel, 442 00:23:41,000 --> 00:23:47,000 dicir algo atractivo como "Prema me." 443 00:23:47,000 --> 00:23:51,000 Ok, agora eu executar esta aplicación, de modo que recompila-lo, 444 00:23:51,000 --> 00:23:54,000 para executa-lo eu premer no botón play na esquina superior esquerda, e hai o meu programa. 445 00:23:54,000 --> 00:23:58,000 Eu non fixen nada, e eu teño unha aplicación para iPhone doce ollar. 446 00:23:58,000 --> 00:24:01,000 Se eu queira parar, pode facer clic no botón de parada 447 00:24:01,000 --> 00:24:03,000 porque é máis divertido. 448 00:24:03,000 --> 00:24:07,000 >> Imos dicir que eu realmente quere que algo aconteza cando premer este botón. 449 00:24:07,000 --> 00:24:09,000 Para facer que o que eu teño que facer é que eu teño para crear 450 00:24:09,000 --> 00:24:13,000 un manipulador novo evento ou unha acción. 451 00:24:13,000 --> 00:24:16,000 Isto significa que eu preciso crear un método que quero ser chamado 452 00:24:16,000 --> 00:24:18,000 cando presione o botón, entón imos crear un novo método. 453 00:24:18,000 --> 00:24:20,000 Eu estou dentro ViewController.h. 454 00:24:20,000 --> 00:24:22,000 Eu teño que dicir que un método existe. 455 00:24:22,000 --> 00:24:26,000 Eu teño un primeiro guión, porque eu vou estar chamando iso no controlador de vista. 456 00:24:26,000 --> 00:24:28,000 Eu teño dar un regalo tipo. 457 00:24:28,000 --> 00:24:31,000 O tipo de iso vai ser aquela cousa IBAction que vimos anteriormente. 458 00:24:31,000 --> 00:24:35,000 Este é un manipulador de eventos, así que vai voltar un IBAction, 459 00:24:35,000 --> 00:24:38,000 e esta é unha información para o Xcode para dicir que 460 00:24:38,000 --> 00:24:40,000 iso é algo que quero conectar algo. 461 00:24:40,000 --> 00:24:45,000 Podo dar-lle un nome, como comas, buttonPressed. 462 00:24:45,000 --> 00:24:48,000 >> Agora eu teño declarado un novo método dentro da miña clase. 463 00:24:48,000 --> 00:24:50,000 Eu xa dixen, este método ten que existir. 464 00:24:50,000 --> 00:24:53,000 Agora imos entrar en ViewController.m, 465 00:24:53,000 --> 00:24:56,000 e imos dicir o que este método pode facer. 466 00:24:56,000 --> 00:25:03,000 Se eu comezar a escribir, por exemplo, (void) buttonPressed 467 00:25:03,000 --> 00:25:06,000 aviso Xcode é moi bo e autocompletes para min. 468 00:25:06,000 --> 00:25:09,000 Isto é realmente marabilloso. 469 00:25:09,000 --> 00:25:12,000 Observe-se aquí que dentro do arquivo. M Eu tamén podo dicir nula, 470 00:25:12,000 --> 00:25:15,000 e iso é porque que IBAction non é realmente un tipo. 471 00:25:15,000 --> 00:25:19,000 É realmente hashtag definido en algún lugar para un baleiro, 472 00:25:19,000 --> 00:25:22,000 e, de novo, esta é só unha información para Xcode que di 473 00:25:22,000 --> 00:25:25,000 Eu quero que este sexa un manipulador de eventos, e imos ver por que, en só un segundo. 474 00:25:25,000 --> 00:25:28,000 Cando este botón é presionado eu vou facer algo aburrido 475 00:25:28,000 --> 00:25:30,000 gusto poñer unha emerxente. 476 00:25:30,000 --> 00:25:35,000 >> Para que podo crear unha nova instancia desta clase chamada UIAlertView, 477 00:25:35,000 --> 00:25:39,000 e esta é unha clase que Apple escribiu que vai mostrar ventás emerxentes irritantes. 478 00:25:39,000 --> 00:25:43,000 Imos chamar este aviso emerxente, e eu teño dous pasos, lembre, para crear este obxecto. 479 00:25:43,000 --> 00:25:46,000 A primeira cousa que cómpre facer é reservar espazo. 480 00:25:46,000 --> 00:25:48,000 Eu quero un UIAlertView. 481 00:25:48,000 --> 00:25:51,000 Quero reservar espazo. Ese é o meu primeiro método. 482 00:25:51,000 --> 00:25:53,000 O meu próximo método é que quero iniciar el, 483 00:25:53,000 --> 00:25:58,000 e por iso teño este método, grande e longo chamado initWithTitle. 484 00:25:58,000 --> 00:26:01,000 Iso é basicamente o que vai controlar ese pop-up di. 485 00:26:01,000 --> 00:26:04,000 O título do meu emerxente pode ser Olá 486 00:26:04,000 --> 00:26:08,000 A mensaxe deste emerxente pode ser "Este é o IOS." 487 00:26:08,000 --> 00:26:10,000 Delegado cousa, eu non sei o que é. 488 00:26:10,000 --> 00:26:13,000 Imos dicir que non é nada. 489 00:26:13,000 --> 00:26:18,000 Agora, o botón que aparecerá pode dicir algo como "Con certeza é", 490 00:26:18,000 --> 00:26:24,000 e eu realmente non quero outros botóns, entón imos eliminar ese e pechar o soporte. 491 00:26:24,000 --> 00:26:27,000 >> Ok, eu creei un extra. Alí imos nós. 492 00:26:27,000 --> 00:26:30,000 Isto é como podo crear un pop-up nova. 493 00:26:30,000 --> 00:26:35,000 Se quere realmente mostrar o pop-up que quero chamar o método show. 494 00:26:35,000 --> 00:26:38,000 Para facer o que podo dicir alerta e concerto, 495 00:26:38,000 --> 00:26:40,000 e, de novo, autocomplete foi super agradable. 496 00:26:40,000 --> 00:26:42,000 Se eu esquezo o que era, se eu escriba en s, 497 00:26:42,000 --> 00:26:45,000 Eu podo rolar por aquí para descubrir o que era, 498 00:26:45,000 --> 00:26:48,000 e filtra ben. 499 00:26:48,000 --> 00:26:52,000 Agora eu creei este pop-up nova. 500 00:26:52,000 --> 00:26:55,000 Nós imos volver ao que significa delegado despois, 501 00:26:55,000 --> 00:26:58,000 e agora quero dicir que quero que este método a ser despedido 502 00:26:58,000 --> 00:27:01,000 cando presione o botón, entón eu vou volver para o meu storyboard, 503 00:27:01,000 --> 00:27:04,000 e quero agora engadir este IBAction. 504 00:27:04,000 --> 00:27:06,000 A primeira cousa que quere facer é premer no botón. 505 00:27:06,000 --> 00:27:08,000 Ao premer este botón quero que algo aconteza. 506 00:27:08,000 --> 00:27:10,000 Eu non vou soster para baixo control. 507 00:27:10,000 --> 00:27:13,000 Eu estou indo para premer e arrastrar a partir do botón 508 00:27:13,000 --> 00:27:15,000 para aquí onde di View Controller. 509 00:27:15,000 --> 00:27:17,000 Podemos ver que ben se acende. 510 00:27:17,000 --> 00:27:22,000 >> Se eu deixar de ir co meu rato agora teño ese pop-up aquí onde eu teño algunhas opcións. 511 00:27:22,000 --> 00:27:24,000 Unha delas son os eventos que eu poida rexistrar. 512 00:27:24,000 --> 00:27:28,000 Estes son todos os métodos eu declarados no meu arquivo h como IBActions. 513 00:27:28,000 --> 00:27:31,000 Isto é debido a Xcode sabe o que debe aparecer nesta lista pequena, 514 00:27:31,000 --> 00:27:33,000 de xeito que é só unha suxestión. 515 00:27:33,000 --> 00:27:37,000 Se eu premer no botón premido, eu agora rexistrou o manipulador de eventos. 516 00:27:37,000 --> 00:27:41,000 En JavaScript que tiñamos que dicir que eu teño un código que rexistrou o manipulador de eventos. 517 00:27:41,000 --> 00:27:43,000 En Objective-C foi realmente así tan fácil. 518 00:27:43,000 --> 00:27:46,000 Se eu executar este novo 519 00:27:46,000 --> 00:27:49,000 agora cando presione o botón meu manipulador evento vai ó lume, 520 00:27:49,000 --> 00:27:51,000 e eu vou incorporarse este pop-up. 521 00:27:51,000 --> 00:27:54,000 Super, super sinxelo alí. 522 00:27:54,000 --> 00:27:57,000 >> Se queres ver todos os eventos que acontecen a ser rexistrado 523 00:27:57,000 --> 00:28:00,000 nun compoñente si premer neste botón 524 00:28:00,000 --> 00:28:02,000 e eu vin aquí para o lado dereito 525 00:28:02,000 --> 00:28:05,000 primeiro pode ver aquí o que podo facer cousas como o tipo de botón, 526 00:28:05,000 --> 00:28:08,000 entón se quere un deses, eu ou o botón Engadir contacto 527 00:28:08,000 --> 00:28:10,000 ou o que quere. 528 00:28:10,000 --> 00:28:13,000 Se queres ver todos os eventos que están neste botón 529 00:28:13,000 --> 00:28:16,000 se eu vir ata aquí para o lado dereito 530 00:28:16,000 --> 00:28:19,000 podemos ver aquí os eventos que teño todos eses eventos diferentes. 531 00:28:19,000 --> 00:28:23,000 Eu podo premer o botón, cando deixar de ir ao botón, cando dobre da billa ou o que sexa, 532 00:28:23,000 --> 00:28:26,000 e aquel que eu só rexistrado é este evento chamado Touch Up Inside, 533 00:28:26,000 --> 00:28:29,000 e este di que, así como o meu dedo sae o botón 534 00:28:29,000 --> 00:28:32,000 que o evento vai para o lume, e é exactamente iso o que aconteceu. 535 00:28:32,000 --> 00:28:36,000 Este é o tipo de evento de botón estándar presionado. 536 00:28:36,000 --> 00:28:39,000 >> Todas as preguntas ata agora? 537 00:28:39,000 --> 00:28:43,000 Ok, é así que podemos comezar a conectar as cousas no noso código 538 00:28:43,000 --> 00:28:46,000 en cousas dentro da nosa interface. 539 00:28:46,000 --> 00:28:49,000 Lembre, o primeiro que tiñamos que facer era atopar o código, 540 00:28:49,000 --> 00:28:54,000 e, entón, con fío a interface co código, 541 00:28:54,000 --> 00:28:57,000 e non é o noso primeiro programa. 542 00:28:57,000 --> 00:29:00,000 Ok, iso foi moi legal, e creamos este botón. 543 00:29:00,000 --> 00:29:03,000 O que non se quere ter para crear un grupo de propiedades 544 00:29:03,000 --> 00:29:05,000 representando estes botóns? 545 00:29:05,000 --> 00:29:08,000 Por exemplo, no Tic Tac Toe teño 9 botóns, 546 00:29:08,000 --> 00:29:11,000 e que sería super, super aburrido ter que arrastrar e soltar 9 veces 547 00:29:11,000 --> 00:29:14,000 ou se eu tivese que facer Tic Tac Toe con 81 en vez de 9 548 00:29:14,000 --> 00:29:17,000 e eu tiven que arrastrar e soltar 81 veces, e iso é ridículo. 549 00:29:17,000 --> 00:29:20,000 O que podemos facer é no canto moi como un HTML 550 00:29:20,000 --> 00:29:23,000 cando tivemos cousas como IDs e nomes e podemos buscar cousas 551 00:29:23,000 --> 00:29:27,000 pola súa identificación, hai unha noción similar no IOS chamados etiquetas. 552 00:29:27,000 --> 00:29:31,000 >> Unha cita é simplemente un identificador numérico único para un compoñente. 553 00:29:31,000 --> 00:29:34,000 Se eu dixer que este ten unha marca de 0, por exemplo, 554 00:29:34,000 --> 00:29:38,000 se eu crear un botón e darlle unha marca de 0, e imos ver como facelo en só un segundo, 555 00:29:38,000 --> 00:29:41,000 se eu queira obter ese botón podo simplemente dicir que eu quero chamar 556 00:29:41,000 --> 00:29:45,000 o, viewWithTag método no obxecto aquí 557 00:29:45,000 --> 00:29:48,000 o self.view, que representa a pantalla actual, por exemplo. 558 00:29:48,000 --> 00:29:53,000 Se eu chamar ese método viewWithTag, eu vou tirar o botón coa etiqueta 0. 559 00:29:53,000 --> 00:29:58,000 Imos dar un ollo neste edificio por Tic Tac Toe. 560 00:29:58,000 --> 00:30:01,000 En primeiro lugar, este é o meu storyboard. 561 00:30:01,000 --> 00:30:05,000 Eu creei estes 10 botóns da interface de usuario. 562 00:30:05,000 --> 00:30:07,000 Teña en conta que son todos do mesmo tamaño. 563 00:30:07,000 --> 00:30:11,000 Se eu premer nun deses e eu volvo aquí deste lado dereito 564 00:30:11,000 --> 00:30:15,000 vai ver que eu axustada a fonte aquí, entón eu fixen a fonte un pouco maior, 565 00:30:15,000 --> 00:30:19,000 pero o que eu tamén fixen foi axustar esa etiqueta. 566 00:30:19,000 --> 00:30:23,000 Eu dixen que iso ten unha marca de 1, e esa é a parte superior esquerda. 567 00:30:23,000 --> 00:30:26,000 >> Agora, se eu premer en outro botón, como este segundo aquí, 568 00:30:26,000 --> 00:30:29,000 agora vai ver que a miña marca é 2. 569 00:30:29,000 --> 00:30:32,000 Cada unha destas teclas só ten unha marca única, 570 00:30:32,000 --> 00:30:35,000 e por iso este é máis tarde como eu vou comezar a interactuar 571 00:30:35,000 --> 00:30:38,000 co meu programa. 572 00:30:38,000 --> 00:30:40,000 Isto todo é dentro dun controlador de vista, 573 00:30:40,000 --> 00:30:42,000 pero aquí é o que temos. 574 00:30:42,000 --> 00:30:44,000 Temos tres propiedades aquí. 575 00:30:44,000 --> 00:30:49,000 O primeiro e último van representar o estado do meu consello. 576 00:30:49,000 --> 00:30:53,000 Basicamente, este primeiro é unha matriz que representa, onde os Xs e Os son. 577 00:30:53,000 --> 00:30:57,000 Este outro aquí dinos quen é a quenda. 578 00:30:57,000 --> 00:31:01,000 Vostede vai entender que eu tamén teño estas cousas aquí. 579 00:31:01,000 --> 00:31:05,000 Antes, cando declarou propiedades que lles deu un nome e un tipo. 580 00:31:05,000 --> 00:31:08,000 Podemos tamén dar-lles unha información adicional aquí. 581 00:31:08,000 --> 00:31:11,000 Este primeiro di non atómica, eo que iso di 582 00:31:11,000 --> 00:31:16,000 é basicamente o único que nunca vai ser tentando acceder a este variable de cada vez. 583 00:31:16,000 --> 00:31:19,000 Vostede podería facer aplicacións máis complexas que son multi-Threaded, 584 00:31:19,000 --> 00:31:22,000 e así volta Scratch tivemos temas diferentes, 585 00:31:22,000 --> 00:31:25,000 e sprites diferentes podería facer cousas distintas ao mesmo tempo. 586 00:31:25,000 --> 00:31:29,000 >> Se ese non é o caso, que non é en calquera cousa que nós imos estar mirando, 587 00:31:29,000 --> 00:31:33,000 se dicimos que non atómica que realmente vai facer as cousas un pouco máis rápido. 588 00:31:33,000 --> 00:31:37,000 Tamén temos esa cousa chamada assign, forte ou débil. 589 00:31:37,000 --> 00:31:40,000 Esta asignar só di que este é un tipo de patrón. 590 00:31:40,000 --> 00:31:43,000 Este non é un obxecto ou un punteiro porque este é só un bool, 591 00:31:43,000 --> 00:31:46,000 para bool está construído en Objective-C. 592 00:31:46,000 --> 00:31:49,000 Este di que non tentar facer algo extravagante co punteiro aquí. 593 00:31:49,000 --> 00:31:51,000 É un Scale idade regular. 594 00:31:51,000 --> 00:31:54,000 Fortes e débiles, este feble di que, en realidade, 595 00:31:54,000 --> 00:31:57,000 Eu quero que isto sexa a apuntar cara algo no controlador de vista. 596 00:31:57,000 --> 00:32:00,000 Eu non estou indo para realmente reservar ou init iso mesmo. 597 00:32:00,000 --> 00:32:04,000 O constructor de interface, cando executar a aplicación, vai tratar con toda a inicialización iso. 598 00:32:04,000 --> 00:32:07,000 Se eu digo feble, que di que alguén vai estar creando iso. 599 00:32:07,000 --> 00:32:09,000 Se eu dixer forte, este di que eu vou ser o único 600 00:32:09,000 --> 00:32:12,000 que está creando ese obxecto bordo, 601 00:32:12,000 --> 00:32:14,000 e por iso aquí eu teño métodos máis algúns aquí, 602 00:32:14,000 --> 00:32:18,000 por exemplo, unha acción para que o botón é presionado novo xogo, 603 00:32:18,000 --> 00:32:20,000 unha acción para cando calquera dos outros botóns son presionados, 604 00:32:20,000 --> 00:32:23,000 e et cetera. 605 00:32:23,000 --> 00:32:26,000 >> Non imos entrar moito da lóxica de Tic Tac Toe, 606 00:32:26,000 --> 00:32:30,000 aínda que sexa moi emocionante, pero imos dar un ollo 607 00:32:30,000 --> 00:32:33,000 algunhas das cousas que podemos facer dentro do IOS. 608 00:32:33,000 --> 00:32:35,000 Este método novo xogo vai ser despedido 609 00:32:35,000 --> 00:32:37,000 cada vez que preme o botón novo xogo. 610 00:32:37,000 --> 00:32:41,000 Para conectar-se de que eu simplemente vir ao meu storyboard. 611 00:32:41,000 --> 00:32:43,000 Prema no novo xogo. 612 00:32:43,000 --> 00:32:47,000 Se eu vir aquí para a dereita podo ver que 613 00:32:47,000 --> 00:32:50,000 Preme Up Inside está conectado ao método NewGame. 614 00:32:50,000 --> 00:32:53,000 É por iso que este vai ser despedido. 615 00:32:53,000 --> 00:32:56,000 O método NewGame vai facer algunha configuración. 616 00:32:56,000 --> 00:32:59,000 Vai dicir que quero que limpar o estado da tarxeta. 617 00:32:59,000 --> 00:33:01,000 Este é un método agradable en mutables matrices. 618 00:33:01,000 --> 00:33:03,000 Isto vai dicir que é agora a quenda de X, 619 00:33:03,000 --> 00:33:07,000 e agora eu vou aproveitar esa cousa viewWithTag. 620 00:33:07,000 --> 00:33:11,000 >> Sei que os meus botóns teñen as marcas 1-9, 621 00:33:11,000 --> 00:33:13,000 e iso é algo que eu arbitrariamente escollido. 622 00:33:13,000 --> 00:33:15,000 Se eu queira facer que o texto de cada botón para estar baleiro 623 00:33:15,000 --> 00:33:17,000 porque eu comecei un novo xogo e eu non quero ningún 624 00:33:17,000 --> 00:33:20,000 XS ou os para sobrar podo facer iso. 625 00:33:20,000 --> 00:33:24,000 Eu podo dicir que quero a vista coa tag, 1, 2, 3, 4 etcétera. 626 00:33:24,000 --> 00:33:27,000 Isto vai tirar un botón diferente cada vez. 627 00:33:27,000 --> 00:33:30,000 Aquí eu vou lanzalo aos UIButton. 628 00:33:30,000 --> 00:33:33,000 Así como nós poderíamos lanzar ints para coches alegóricos e viceversa 629 00:33:33,000 --> 00:33:37,000 este di que quero lanzar a un UIButton. 630 00:33:37,000 --> 00:33:40,000 Isto significa que o tipo de esta será a * UIButton 631 00:33:40,000 --> 00:33:43,000 porque punteiros, pero non se preocupe, non son asustado máis. 632 00:33:43,000 --> 00:33:47,000 >> Unha vez que eu teño ese botón que eu vou chamar un método nel. 633 00:33:47,000 --> 00:33:50,000 Este método chámase setTitle forState, e por iso este di 634 00:33:50,000 --> 00:33:53,000 Eu quero configurar o texto do botón para ser a cadea baleira, 635 00:33:53,000 --> 00:33:57,000 e quero que sexa a cadea baleira cando non está presionado. 636 00:33:57,000 --> 00:34:01,000 Se eu estou usando este método, podo cambiar o texto do botón 637 00:34:01,000 --> 00:34:04,000 así que alguén chega, pero queremos dicir cando o botón é só sentado alí 638 00:34:04,000 --> 00:34:07,000 Eu quero que o texto en branco. 639 00:34:07,000 --> 00:34:10,000 Finalmente, imos iniciar o meu consello, 640 00:34:10,000 --> 00:34:12,000 e vou dicir que todo está actualmente a 0, 641 00:34:12,000 --> 00:34:15,000 de xeito que este membros do consello inmutable é unha matriz mutável, 642 00:34:15,000 --> 00:34:21,000 o que significa que podo chamar o método addObject e só dentro dun 0 del. 643 00:34:21,000 --> 00:34:23,000 Isto é o que acontece cando crear un novo xogo. 644 00:34:23,000 --> 00:34:25,000 >> Imos dar un ollo a outro. 645 00:34:25,000 --> 00:34:28,000 Este método aquí é o IBAction que vai ser presionado 646 00:34:28,000 --> 00:34:31,000 cada vez que un dos cadrados é presionado. 647 00:34:31,000 --> 00:34:33,000 Agora temos unha lóxica Tic Tac Toe aquí. 648 00:34:33,000 --> 00:34:36,000 Nós descubrir quen é a vez, 649 00:34:36,000 --> 00:34:39,000 e en base a que sexa definido un X ou un O, 650 00:34:39,000 --> 00:34:43,000 pero entendemos que estamos reutilizar este mesmo manipulador de eventos 651 00:34:43,000 --> 00:34:45,000 para cada un destes botóns. 652 00:34:45,000 --> 00:34:49,000 Isto significa que eu non teño un método para o botón superior esquerdo, 653 00:34:49,000 --> 00:34:52,000 un método diferente para o botón inferior dereito, a pesar de que eu podería ter feito isto. 654 00:34:52,000 --> 00:34:54,000 Isto non sería realmente un bo deseño. 655 00:34:54,000 --> 00:34:57,000 O que eu estou facendo aquí é que eu estou indo realmente para determinar 656 00:34:57,000 --> 00:35:00,000 o que a etiqueta do botón que foi presionado é. 657 00:35:00,000 --> 00:35:04,000 Vostede entende que este método de reprodución ten un argumento. 658 00:35:04,000 --> 00:35:07,000 É chamado de remitente, eo que é remitente é remitente vai 659 00:35:07,000 --> 00:35:10,000 representan exactamente o que foi tomado medidas enriba. 660 00:35:10,000 --> 00:35:15,000 Se eu premer un botón, este remitente será que UIButton 661 00:35:15,000 --> 00:35:18,000 I, en realidade, que preme, o que significa que esta UIButton 662 00:35:18,000 --> 00:35:20,000 ten unha marca porque eu creei unha etiqueta. 663 00:35:20,000 --> 00:35:23,000 >> Se eu queira chegar á marca que podo simplemente dicir 664 00:35:23,000 --> 00:35:26,000 Eu quero a etiqueta do remitente, 665 00:35:26,000 --> 00:35:28,000 e de novo, eu só fundido a un UIButton. 666 00:35:28,000 --> 00:35:32,000 Acontece que sei que o remitente será un UIButton. 667 00:35:32,000 --> 00:35:34,000 Non sempre ten que ser un UIButton. 668 00:35:34,000 --> 00:35:36,000 Eu podería, por exemplo, rexistrar o mesmo manipulador de eventos 669 00:35:36,000 --> 00:35:38,000  para un a un botón, unha por unha barra. 670 00:35:38,000 --> 00:35:40,000 Neste caso, eu sei que eles están todos os botóns, entón eu vou dicir 671 00:35:40,000 --> 00:35:43,000 Eu quero que este sexa un botón, e entón eu podo obter a marca, 672 00:35:43,000 --> 00:35:48,000 e da marca agora sei onde estou dentro do consello. 673 00:35:48,000 --> 00:35:51,000 Entón eu podo simplemente definir X ou O, pode virar a quenda, 674 00:35:51,000 --> 00:35:54,000 comprobar quen gañou, etcétera. 675 00:35:54,000 --> 00:35:59,000 >> Calquera dúbida sobre iso ata agora? 676 00:35:59,000 --> 00:36:02,000 Ok, todo o código que publicou online-non quero entrar moi 677 00:36:02,000 --> 00:36:06,000 da lóxica de Tic Tac Toe, pero agora podes ver que realmente 678 00:36:06,000 --> 00:36:09,000 todo o que estamos facendo é que estamos looping sobre esta matriz, 679 00:36:09,000 --> 00:36:13,000 por iso temos un par de loops aquí, e nós estamos só comparando a ver 680 00:36:13,000 --> 00:36:18,000 temos un partido en todas as liñas, un xogo nunha columna ou algo así. 681 00:36:18,000 --> 00:36:21,000 Para realmente executar este programa, se eu tocar nun dos botóns 682 00:36:21,000 --> 00:36:24,000 que o método de xogo foi despedido, o que significa que só definir 683 00:36:24,000 --> 00:36:31,000 o botón para ser un X, entón agora este botón será un O, e así por diante, 684 00:36:31,000 --> 00:36:35,000 e é así que estamos empezando a interactuar con esta aplicación única páxina. 685 00:36:35,000 --> 00:36:38,000 >> Imos publicar o código, entón Sinto-se libre para examinar que, 686 00:36:38,000 --> 00:36:43,000 pero imos agora falar sobre algunhas aplicacións que son máis que unha páxina. 687 00:36:43,000 --> 00:36:47,000 Tan emocionante como Tic Tac Toe foi, unha morea de aplicacións dentro do IOS 688 00:36:47,000 --> 00:36:50,000 son estes tipo de detalle cousas con múltiples pantallas. 689 00:36:50,000 --> 00:36:54,000 O primeiro concepto que imos ter que falar son protocolos, 690 00:36:54,000 --> 00:36:57,000 é un protocolo é simplemente un conxunto de métodos 691 00:36:57,000 --> 00:36:59,000 que pode prometer para definir. 692 00:36:59,000 --> 00:37:02,000 Se eu crear este novo protocolo con dous métodos, este primeiro, 693 00:37:02,000 --> 00:37:05,000 o tipo de retorno é void, eu chamei foo. 694 00:37:05,000 --> 00:37:07,000 El non ten argumentos. Eu teño un outro método. 695 00:37:07,000 --> 00:37:11,000 El retorna un int. Chamei-bar e ten un argumento. 696 00:37:11,000 --> 00:37:14,000 Todos protocolo é dicir que se chama SomeProtocol-se aquí, 697 00:37:14,000 --> 00:37:19,000 este é un xogo de cousas que alguén pode aplicar. 698 00:37:19,000 --> 00:37:22,000 Eu non dentro deste protocolo, dixo que foo fai. 699 00:37:22,000 --> 00:37:26,000 En vez diso, eu só estou dicindo que podería definir foo se queres. 700 00:37:26,000 --> 00:37:30,000 Se eu estou creando un controlador de vista ou a creación dunha clase 701 00:37:30,000 --> 00:37:33,000 Podo dentro desa promesa clase para aplicar 702 00:37:33,000 --> 00:37:40,000 algúns destes métodos, así, por exemplo, dicir 703 00:37:40,000 --> 00:37:43,000 iso agora di que eu estou facendo unha promesa a vostede que dentro 704 00:37:43,000 --> 00:37:50,000 desta clase controlador de vista eu vou ter definicións para ambos foo e bar. 705 00:37:50,000 --> 00:37:52,000 >> Por que iso é útil? 706 00:37:52,000 --> 00:37:55,000 Unha morea de compoñentes dentro do IOS aproveitar esta 707 00:37:55,000 --> 00:37:58,000 nivel de proxecto chamado delegación, e que di delegación 708 00:37:58,000 --> 00:38:01,000 é que, por exemplo, eu teño unha caixa de texto 709 00:38:01,000 --> 00:38:04,000 e existen algúns eventos que poderían ser rexistrados na miña caixa de texto, 710 00:38:04,000 --> 00:38:07,000 en vez de crear eventos separados que podo facer é o que podo dicir 711 00:38:07,000 --> 00:38:10,000 o delegado da caixa de texto será un obxecto. 712 00:38:10,000 --> 00:38:13,000 Cando digo que este é un delegado agora que significa que 713 00:38:13,000 --> 00:38:16,000 sempre que algún evento sería destituído no cadro de texto 714 00:38:16,000 --> 00:38:18,000 en vez de ter que rexistro-lo ou algo así 715 00:38:18,000 --> 00:38:21,000 el só vai chamar a un método no delegado. 716 00:38:21,000 --> 00:38:24,000 Por exemplo, dentro da miña caixa de texto Eu teño un método para cando prema 717 00:38:24,000 --> 00:38:27,000 que fixo botón no ángulo inferior dereito, 718 00:38:27,000 --> 00:38:30,000 e así, en vez de rexistrar manipulador de eventos o que podo dicir é 719 00:38:30,000 --> 00:38:34,000 cadro de texto, aquí é un obxecto que quero que chamar un método en 720 00:38:34,000 --> 00:38:37,000 Cada vez que alguén presione o botón Done, 721 00:38:37,000 --> 00:38:40,000 e iso significa que ese obxecto ten que aplicar algún protocolo 722 00:38:40,000 --> 00:38:45,000 que di que eu prometer para definir que acción do botón feito, 723 00:38:45,000 --> 00:38:47,000 porque se non define este método e que prima Completar 724 00:38:47,000 --> 00:38:49,000 a continuación, que vai ser confuso. 725 00:38:49,000 --> 00:38:55,000 >> Imos dar un ollo a un exemplo. 726 00:38:55,000 --> 00:38:58,000 Aquí eu simplemente ten unha caixa de texto, 727 00:38:58,000 --> 00:39:04,000 e unha das propiedades desta caixa de texto por aquí deste lado dereito é o delegado. 728 00:39:04,000 --> 00:39:06,000 Esta é unha propiedade da clase. 729 00:39:06,000 --> 00:39:09,000 O que eu fixen aquí é que eu controlar premendo, e eu arrastrei a partir deste punto aquí 730 00:39:09,000 --> 00:39:13,000 ao controlador do punto de vista, e que agora di o delegado da caixa de texto 731 00:39:13,000 --> 00:39:18,000 vai ser o controlador de vista. 732 00:39:18,000 --> 00:39:20,000 Isto significa que, cando algunhas accións acontecer, en vez de rexistrar 733 00:39:20,000 --> 00:39:25,000 manipuladores de eventos separados que quero que envíe ao delegado. 734 00:39:25,000 --> 00:39:28,000 Agora imos dar un ollo no meu controlador de vista. 735 00:39:28,000 --> 00:39:32,000 Dentro do arquivo h. Fixen unha promesa. 736 00:39:32,000 --> 00:39:36,000 Eu prometín para aplicar algúns métodos dentro deste protocolo 737 00:39:36,000 --> 00:39:38,000 chamado UITextFieldDelegate, e de novo, 738 00:39:38,000 --> 00:39:42,000 esta é só unha lista de algunhas cousas que podo escoller para aplicar. 739 00:39:42,000 --> 00:39:46,000 >> Se eu vir aquí no meu arquivo. M, eu apliquei un tal método. 740 00:39:46,000 --> 00:39:49,000 Eu chamei el textFieldShouldReturn 741 00:39:49,000 --> 00:39:52,000 porque iso é que el foi chamado dentro do protocolo. 742 00:39:52,000 --> 00:39:57,000 E agora cada vez que preme o botón feito dentro do campo de texto 743 00:39:57,000 --> 00:40:00,000 iso é o que vai pagar, entón eu non rexistrar un manipulador de eventos. 744 00:40:00,000 --> 00:40:03,000 Liguei o delegado e sempre que este evento é disparado 745 00:40:03,000 --> 00:40:08,000 Este é o método que será chamado, entón eu vir aquí ao meu storyboard e executa-o- 746 00:40:08,000 --> 00:40:11,000 mentres que a está cargando podemos ver que iso fai. 747 00:40:11,000 --> 00:40:13,000 Na miña pantalla eu teño 2 cousas. 748 00:40:13,000 --> 00:40:16,000 Eu teño ese campo de texto, e eu teño este rótulo. 749 00:40:16,000 --> 00:40:19,000 Estou simplemente dicindo que quere que o texto deste rótulo 750 00:40:19,000 --> 00:40:23,000 ser igual a calquera que sexa o usuario escriba no interior do campo de texto. 751 00:40:23,000 --> 00:40:26,000 Esta liña aquí é simplemente un método que eu estou chamando 752 00:40:26,000 --> 00:40:29,000 no campo de texto que di que quero que ocultar o teclado. 753 00:40:29,000 --> 00:40:33,000 Este é só o método arbitrario que Apple escolleu. 754 00:40:33,000 --> 00:40:38,000 >> Unha vez máis, antes de facer calquera cousa que eu tiña que conectar todo, entón eu cheguei aquí. 755 00:40:38,000 --> 00:40:42,000 Do controlador de vista eu arrastrar ata a caixa de texto. 756 00:40:42,000 --> 00:40:46,000 Eu deixar de ir, e eu podo ver aquí que podo facer iso a propiedade de campo de texto 757 00:40:46,000 --> 00:40:49,000 dende aquí no controlador de vista eu define unha propiedade 758 00:40:49,000 --> 00:40:52,000 que é un IBOutlet dun campo de texto. 759 00:40:52,000 --> 00:40:55,000 Este di que podo conectar esta propiedade se 760 00:40:55,000 --> 00:40:59,000 a un campo de texto no meu UI. 761 00:40:59,000 --> 00:41:03,000 Agora, cando clic iso podo comezar a escribir. 762 00:41:03,000 --> 00:41:06,000 Agora, se eu premer no botón feito isto vai disparar 763 00:41:06,000 --> 00:41:08,000 un evento que agora podo responder. 764 00:41:08,000 --> 00:41:10,000 Non manipuladores de eventos. 765 00:41:10,000 --> 00:41:13,000 É así que eu só respondeu a ese botón feito. 766 00:41:13,000 --> 00:41:15,000 Ten sentido? 767 00:41:15,000 --> 00:41:20,000 >> Este non é un patrón de deseño que-non pode nunca atopar-se 768 00:41:20,000 --> 00:41:23,000 crear o seu propio protocolo, pero só sei que algúns 769 00:41:23,000 --> 00:41:27,000 distintos compoñentes IOS rexistrar eventos de diferentes xeitos. 770 00:41:27,000 --> 00:41:29,000 Botóns, por exemplo, usar esas IBActions. 771 00:41:29,000 --> 00:41:32,000 Campos de texto, por outra banda, van usar delegados. 772 00:41:32,000 --> 00:41:36,000 Podemos ver e pode ollar todo isto dentro da documentación. 773 00:41:36,000 --> 00:41:41,000 A propósito, hai realmente unha tonelada de cousas UI construído no IOS para ti, 774 00:41:41,000 --> 00:41:46,000 así, por exemplo, a forma que eu fixen que din feito na parte inferior dereita 775 00:41:46,000 --> 00:41:48,000 é Selecionei este campo de texto. 776 00:41:48,000 --> 00:41:50,000 Eu vin para aquí. 777 00:41:50,000 --> 00:41:53,000 Eu rolada para abaixo un pouco para voltar clave, 778 00:41:53,000 --> 00:41:56,000 e podo realmente facer iso unha morea de cousas, como se eu quero que dicir 779 00:41:56,000 --> 00:42:00,000 chamada de emerxencia cando podo facer iso, que é totalmente aleatoria, 780 00:42:00,000 --> 00:42:02,000 e eu non sei por que non hai un built-in botón de chamada de emerxencia, 781 00:42:02,000 --> 00:42:06,000 pero alí, el di que chamada de emerxencia en letras moi pequenas. 782 00:42:06,000 --> 00:42:08,000 Alí vai. 783 00:42:08,000 --> 00:42:12,000 >> Definitivamente explotar todos eses diferentes opcións no IOS. 784 00:42:12,000 --> 00:42:14,000 Calquera dúbida sobre os delegados? 785 00:42:14,000 --> 00:42:18,000 Unha vez máis, só un patrón de deseño interesante que ten que ser consciente. 786 00:42:18,000 --> 00:42:22,000 Ok, imos dar un ollo xunto coa vista da táboa. 787 00:42:22,000 --> 00:42:26,000 A vista de táboa é basicamente que a lista de elementos que está en todo o lugar no IOS. 788 00:42:26,000 --> 00:42:29,000 Cando está follas todos os seus contactos, está mirando 789 00:42:29,000 --> 00:42:34,000 a páxina de configuración, e este tipo de lista de cousas é chamado de visualización de táboa. 790 00:42:34,000 --> 00:42:37,000 Implantación dunha exhibición de táboa no IOS é ben sinxelo. 791 00:42:37,000 --> 00:42:41,000 En vez de facer unha clase que descende do que UIViewController 792 00:42:41,000 --> 00:42:44,000 como xa fixemos antes, nós simplemente necesitamos dicir, en vez de 793 00:42:44,000 --> 00:42:46,000 todo o que un UIViewController non quero facer, 794 00:42:46,000 --> 00:42:50,000 Digo todo o que un UITableViewController non quero facer, 795 00:42:50,000 --> 00:42:54,000 de xeito que simplemente engade algunhas cousas adicional que son totalmente feito por nós. 796 00:42:54,000 --> 00:42:58,000 Necesitamos facer moi pouco para, basicamente, encher os espazos en branco dentro da táboa. 797 00:42:58,000 --> 00:43:02,000 >> Co fin de presentar unha táboa que eu teño responder algunhas preguntas. 798 00:43:02,000 --> 00:43:06,000 A primeira pregunta que eu teño responder é cantos puntos están sobre a mesa? 799 00:43:06,000 --> 00:43:08,000 Cando está follas o seu programa de contactos notarás que é unha especie de 800 00:43:08,000 --> 00:43:12,000 organizado polo Como, entón tes o BS, e ten que cabeceira pouco sub. 801 00:43:12,000 --> 00:43:14,000 Cada un destes é chamado dunha sección. 802 00:43:14,000 --> 00:43:16,000 Pode ou non ter destes. 803 00:43:16,000 --> 00:43:19,000 A primeira cousa que cómpre facer é aplicar un método 804 00:43:19,000 --> 00:43:22,000 chamado tableView: numberOfSectionsInTableView. 805 00:43:22,000 --> 00:43:25,000 Que simplemente amosa cantas seccións que ten, 806 00:43:25,000 --> 00:43:29,000 de xeito que este puidese dicir voltar un, se ten unha vista de táboa grande. 807 00:43:29,000 --> 00:43:33,000 A seguinte pregunta que o IOS precisa saber é cantas liñas ten? 808 00:43:33,000 --> 00:43:36,000 Por exemplo, se está follas unha exhibición de táboa. 809 00:43:36,000 --> 00:43:39,000 Vostede ten un número fixo de música que está mirando ou un número fixo de contactos. 810 00:43:39,000 --> 00:43:41,000 Se vostede é eu, por suposto, non é moito, 811 00:43:41,000 --> 00:43:44,000 e é así que o IOS sabe cantas células que amosar. 812 00:43:44,000 --> 00:43:46,000 >> Unha vez máis, isto podería dicir algo así como retorno 3. 813 00:43:46,000 --> 00:43:49,000 A miña visión táboa ten tres liñas. 814 00:43:49,000 --> 00:43:52,000 Finalmente, o IOS precisa saber o que cada célula parece, 815 00:43:52,000 --> 00:43:54,000 Entón, o que realmente vai facer é chamar ese método aquí, 816 00:43:54,000 --> 00:43:57,000 este tableView: cellForRowAtIndexPath. 817 00:43:57,000 --> 00:44:01,000 Vai chamar ese método en cada célula dentro da súa táboa. 818 00:44:01,000 --> 00:44:03,000 Como el sabe cantas veces a chamalo? 819 00:44:03,000 --> 00:44:06,000 Ben, dixo que dentro do número de liñas en sección. 820 00:44:06,000 --> 00:44:08,000 Imos chamar iso en cada unha das nosas células, 821 00:44:08,000 --> 00:44:11,000 e dentro deste é onde pode realmente facer cousas como 822 00:44:11,000 --> 00:44:16,000 definir o texto ou dicir-lle o que iso pequeno botón azul no lado dereito fai. 823 00:44:16,000 --> 00:44:19,000 O estándar para a obtención destas células, imos usar este método 824 00:44:19,000 --> 00:44:22,000 chamado dequeueReusableCellWithIdentifier. 825 00:44:22,000 --> 00:44:29,000 >> Objective-C é realmente moi coñecido para a duración ridícula dos seus nomes de método, 826 00:44:29,000 --> 00:44:32,000 e este é realmente un caso agradable no exemplo punto. 827 00:44:32,000 --> 00:44:37,000 O que este método fai é este só di que quero que me dea unha célula. 828 00:44:37,000 --> 00:44:39,000 Só unha cousa IOS. 829 00:44:39,000 --> 00:44:41,000 Se tes algo como 100 mil cancións no seu iPod 830 00:44:41,000 --> 00:44:45,000 o IOS non quere facer é reservar 100.000 células, 831 00:44:45,000 --> 00:44:48,000 porque se está na parte superior da súa lista, realmente precisa para reservar memoria 832 00:44:48,000 --> 00:44:51,000 para a célula que é 99.000 liñas para abaixo? 833 00:44:51,000 --> 00:44:55,000 Non, porque como está rolando pode tipo de reservar como vaia xunto. 834 00:44:55,000 --> 00:44:57,000 Isto é feito para ti. 835 00:44:57,000 --> 00:44:59,000 Non ten que preocuparse con todo o material de rendemento que estúpido. 836 00:44:59,000 --> 00:45:02,000 Todo o que di é que chamar este método dequeueReusableCellWithIdentifier, 837 00:45:02,000 --> 00:45:06,000 e este di, todo ben, se precisa eu vou crear unha nova célula para ti. 838 00:45:06,000 --> 00:45:09,000 >> Pero se está no fondo da táboa e xa alocados algunhas células 839 00:45:09,000 --> 00:45:12,000 na parte superior da táboa que realmente non vai ter tan cedo 840 00:45:12,000 --> 00:45:15,000 Vou dar-lle un destes de volta en vez de reservar un novo, 841 00:45:15,000 --> 00:45:17,000 e por iso esta é unha preocupación rendemento agradable. 842 00:45:17,000 --> 00:45:21,000 Non ten que reservar as células-se. 843 00:45:21,000 --> 00:45:23,000 Isto vai dar de volta dunha célula. 844 00:45:23,000 --> 00:45:25,000 El vai voltar a vostede un obxecto de célula. 845 00:45:25,000 --> 00:45:28,000 Despois de ter o obxecto de célula que podes facer cousas para el. 846 00:45:28,000 --> 00:45:32,000 Pode configurar o texto de cela con esa propiedade chamada etiqueta de texto. 847 00:45:32,000 --> 00:45:36,000 Podes engadir a frecha á dereita ou algunhas outras cousas aleatorias 848 00:45:36,000 --> 00:45:41,000 con esta outra propiedade chamada accessoryType, e así por diante e así por diante. 849 00:45:41,000 --> 00:45:46,000 >> Imos dar un ollo a realidade implementar unha exhibición de táboa agora. 850 00:45:46,000 --> 00:45:49,000 Cando creei este proxecto 851 00:45:49,000 --> 00:45:53,000 en vez de dicir aplicación única visión que realmente vin aquí 852 00:45:53,000 --> 00:45:57,000 a mestra-detalle de aplicación, e por iso, basicamente o que corresponde ao programa de correo electrónico 853 00:45:57,000 --> 00:46:01,000 no iPad coa exhibición de táboa á esquerda e, a continuación, o contido da dereita. 854 00:46:01,000 --> 00:46:07,000 No iPod ou iPhone que vai corresponder a unha visión única táboa. 855 00:46:07,000 --> 00:46:10,000 É onde eu teño o meu código de inicio. 856 00:46:10,000 --> 00:46:13,000 >> Imos primeiro un ollo no storyboard. 857 00:46:13,000 --> 00:46:15,000 Todo iso foi feito por min, basicamente creado. 858 00:46:15,000 --> 00:46:18,000 Esta barra de navegación me mostrou o que unha célula exemplo pode parecer, 859 00:46:18,000 --> 00:46:22,000 e eu facer clic dúas veces tanto, cambiar o título. 860 00:46:22,000 --> 00:46:25,000 Os problemas UI outros podo tratar alí. 861 00:46:25,000 --> 00:46:27,000 O ficheiro de cabeceira parece moi sinxelo. 862 00:46:27,000 --> 00:46:30,000 En vez de dicir isto é UIViewController agora estamos dicindo que este é un 863 00:46:30,000 --> 00:46:35,000 TableViewController, polo que sabemos que queremos chamar todos os métodos da táboa. 864 00:46:35,000 --> 00:46:38,000 Seguinte Quero crear unha propiedade que vai representar 865 00:46:38,000 --> 00:46:40,000 as cousas dentro da miña mesa. 866 00:46:40,000 --> 00:46:43,000 Esta táboa será amosar arbitrariamente 867 00:46:43,000 --> 00:46:46,000 unha lista de froitas, e entón eu preciso crear algunha matriz 868 00:46:46,000 --> 00:46:49,000 en que eu poida engadir froitas. 869 00:46:49,000 --> 00:46:52,000 Dentro do meu arquivo de aplicación, a primeira cousa que quero facer 870 00:46:52,000 --> 00:46:55,000 é que quero que seguro que eu arrincar esta matriz. 871 00:46:55,000 --> 00:46:58,000 >> Eu dixen alloc init, creei a miña matriz de froitas, 872 00:46:58,000 --> 00:47:03,000 e eu estou engadindo 4 cousas para el, un dos cales é moito máis controvertido do que os outros 3. 873 00:47:03,000 --> 00:47:06,000 E agora eu teño unha matriz de tamaño 4. 874 00:47:06,000 --> 00:47:08,000 Estamos axitando-se no CS50. 875 00:47:08,000 --> 00:47:11,000 Agora teño unha matriz de tamaño 4. 876 00:47:11,000 --> 00:47:13,000 Agora eu vou comezar a responder a estas cuestións, e en realidade, 877 00:47:13,000 --> 00:47:16,000 cando eu creei esta aplicación todo isto xa foi feito por min. 878 00:47:16,000 --> 00:47:19,000 Eu non teño que escribir o número de seccións en vista de táboa. 879 00:47:19,000 --> 00:47:22,000 El xa estaba alí, e eu estou cubrindo os espazos en branco. 880 00:47:22,000 --> 00:47:24,000 Cantas seccións que eu teño? 881 00:47:24,000 --> 00:47:26,000 Un Todo feito. 882 00:47:26,000 --> 00:47:28,000 Cantas liñas que eu teño? 883 00:47:28,000 --> 00:47:31,000 Ben, eu teño unha liña para cada froita para esta conta 884 00:47:31,000 --> 00:47:34,000 é unha propiedade de calquera matriz que di o quão grande é isto? 885 00:47:34,000 --> 00:47:36,000 Ese é o número de liñas que eu teño. 886 00:47:36,000 --> 00:47:42,000 Finalmente, eu teño que dicir que é o que cada célula se parece? 887 00:47:42,000 --> 00:47:46,000 Eu vou dicir dequeueReusableCellWithIdentifier. 888 00:47:46,000 --> 00:47:48,000 >> De novo, iso xa estaba escrito para min. 889 00:47:48,000 --> 00:47:51,000 Eu non teño que facer iso mesmo, e quero volver 890 00:47:51,000 --> 00:47:54,000 Esta célula neste lugar. 891 00:47:54,000 --> 00:47:57,000 Lembre que estamos chamando este mesmo método en todas as células, 892 00:47:57,000 --> 00:48:01,000 e este argumento aquí, ese argumento indexPath, 893 00:48:01,000 --> 00:48:03,000 di o que eu estou dentro da liña 894 00:48:03,000 --> 00:48:05,000 Se eu dixer indexPath.row aquí 895 00:48:05,000 --> 00:48:09,000 Isto pode 0, entón el ha ser 1, entón el ha ser 2, e este é entón sei 896 00:48:09,000 --> 00:48:11,000 o que eu estou célula que está mostrando. 897 00:48:11,000 --> 00:48:15,000 Eu quero configurar o texto de cela usando esta propiedade TextLabel 898 00:48:15,000 --> 00:48:19,000 para ir dentro da miña matriz froitas e obter 899 00:48:19,000 --> 00:48:21,000 o obxecto correspondente a cada liña. 900 00:48:21,000 --> 00:48:24,000 Se esta é unha secuencia, agora estou definindo 901 00:48:24,000 --> 00:48:28,000 a propiedade de texto para unha cadea. 902 00:48:28,000 --> 00:48:30,000 Eu podo facer outra cousa. 903 00:48:30,000 --> 00:48:32,000 I tamén pode rexistrar-se un procesador de eventos en cada unha das células, 904 00:48:32,000 --> 00:48:35,000 entón cando tocar cada unha desas células 905 00:48:35,000 --> 00:48:39,000 este didSelectRowAtIndexPath, iso vai ser chamado para min, 906 00:48:39,000 --> 00:48:42,000 tan simplemente definindo iso eu agora pode manexar o que acontece 907 00:48:42,000 --> 00:48:46,000 cando toca unha célula, e, de novo, estamos pasando cal célula foi aproveitado 908 00:48:46,000 --> 00:48:50,000 para que poidamos reutilizar ese mesmo manipulador de eventos para todas as nosas células. 909 00:48:50,000 --> 00:48:53,000 >> Unha vez máis, iso é algo que o IOS está facendo por min. 910 00:48:53,000 --> 00:48:55,000 Imos mostrar un outro pop-up irritantes 911 00:48:55,000 --> 00:48:59,000 que simplemente di que colleu algo en algo que 912 00:48:59,000 --> 00:49:04,000 vai ser o obxecto de liña. 913 00:49:04,000 --> 00:49:10,000 Cando executo iso, eu vou ter esa visión boa mesa 914 00:49:10,000 --> 00:49:14,000 cunha liña para cada un deses froitos, e eu tocar un 915 00:49:14,000 --> 00:49:16,000 dime o que pasou. 916 00:49:16,000 --> 00:49:21,000 Ten sentido? 917 00:49:21,000 --> 00:49:24,000 Imos construír un pouco máis complexa dunha aplicación, 918 00:49:24,000 --> 00:49:28,000 tanto como escolleu premendo tomate é. 919 00:49:28,000 --> 00:49:31,000 A parte agradable sobre o storyboard 920 00:49:31,000 --> 00:49:35,000 é que non só vai axudar-nos a proxectar pantallas individualmente, 921 00:49:35,000 --> 00:49:38,000 Tamén vai axudarnos a unir a nosa aplicación enteira 922 00:49:38,000 --> 00:49:42,000 de xeito que a aplicación final que vai ser este edificio é agradable deportes lector de noticias, 923 00:49:42,000 --> 00:49:45,000 e así vai ter varias pantallas, e para que eu poida realmente representar 924 00:49:45,000 --> 00:49:48,000 cada unha desas pantallas múltiples no storyboard, 925 00:49:48,000 --> 00:49:52,000 e podo diminuír o zoom e ver o meu programa a partir dun nivel elevado. 926 00:49:52,000 --> 00:49:55,000 >> Co fin de crear un novo elemento dentro do meu storyboard 927 00:49:55,000 --> 00:49:59,000 é realmente sinxelo dentro Interface Builder. 928 00:49:59,000 --> 00:50:01,000 Se eu queira engadir outra pantalla para iso, por exemplo, 929 00:50:01,000 --> 00:50:06,000 Podo primeiro zoom co zoom pitada de que Apple tanto ama, 930 00:50:06,000 --> 00:50:09,000 e aquí antes de buscar un botón 931 00:50:09,000 --> 00:50:12,000 e eu arrastrar e soltar un botón 932 00:50:12,000 --> 00:50:15,000 se eu queira crear unha nova pantalla que eu poida realmente pode arrastrar e soltar 933 00:50:15,000 --> 00:50:19,000 un controlador de vista enteira, entón se eu incorporarse iso, puxe-aquí, 934 00:50:19,000 --> 00:50:23,000 hey, hai outra pantalla, e agora usando este ficheiro storyboard mesmo 935 00:50:23,000 --> 00:50:26,000 Eu podo ter todas as pantallas dentro do meu programa, e podo reducir 936 00:50:26,000 --> 00:50:28,000 e ver como interactúan. 937 00:50:28,000 --> 00:50:32,000 Estes non van interactuar aínda. 938 00:50:32,000 --> 00:50:36,000 A forma en que estas dúas pantallas interactúan é definir relacións. 939 00:50:36,000 --> 00:50:39,000 Basicamente pode dicir que esta pantalla, ao premer este botón, 940 00:50:39,000 --> 00:50:42,000 Eu quero que deslice cara esta nova pantalla. 941 00:50:42,000 --> 00:50:44,000 Isto significa que non hai este tipo de relación entre 942 00:50:44,000 --> 00:50:46,000  a primeira pantalla e na segunda pantalla. 943 00:50:46,000 --> 00:50:49,000 Ten basicamente unha frecha que o botón para a segunda pantalla 944 00:50:49,000 --> 00:50:53,000 dicindo que cando prema este botón que é onde quero ir. 945 00:50:53,000 --> 00:50:57,000 Así coma nós controlamos premendo e arrastrado para definir eses establecementos 946 00:50:57,000 --> 00:51:01,000 imos facer o mesmo para definir eses segues. 947 00:51:01,000 --> 00:51:05,000 >> Imos ver un exemplo para que, e antes de que a transición de feito 948 00:51:05,000 --> 00:51:08,000 a partir dunha pantalla a outra IOS é bo o suficiente para chamar ese método 949 00:51:08,000 --> 00:51:11,000 prepareForSegue chamado, e é aí onde podemos empezar 950 00:51:11,000 --> 00:51:14,000 o envío de datos a partir dun programa a outro. 951 00:51:14,000 --> 00:51:17,000 No exemplo que estamos a piques de ollar para el, basicamente, permitir-nos 952 00:51:17,000 --> 00:51:20,000 para filtrar equipos de béisbol polas ligas e divisións. 953 00:51:20,000 --> 00:51:23,000 Cando selecciona unha liga, por exemplo, quero facer a transición 954 00:51:23,000 --> 00:51:25,000 a miña seguinte pantalla onde eu poida amosar todas as divisións 955 00:51:25,000 --> 00:51:27,000 nesa liga ou todos os equipos diferentes. 956 00:51:27,000 --> 00:51:31,000 Eu teño enviar á pantalla o que os equipos que debe amosar. 957 00:51:31,000 --> 00:51:35,000 Para iso vou aproveitar este método aquí. 958 00:51:35,000 --> 00:51:39,000 >> Por fin, só un punto ao chou no IOS. 959 00:51:39,000 --> 00:51:41,000 Se desexa almacenar datos hai esa cousa chamada de datos básicos, 960 00:51:41,000 --> 00:51:44,000 que en realidade é medio complicado de traballar. 961 00:51:44,000 --> 00:51:47,000 Tamén pode usar SQL para almacenar datos, 962 00:51:47,000 --> 00:51:51,000 que, de novo, é bo, pero o tipo de no lado máis complicado de traballar, 963 00:51:51,000 --> 00:51:55,000 pero IOS tamén soporta estas cousas moi legal chamado listas de propiedades, 964 00:51:55,000 --> 00:52:00,000 e unha lista de propiedades é só un ficheiro que representa pares de valores clave. 965 00:52:00,000 --> 00:52:03,000 Vostede define unha lista de chaves, e di esta chave vai ser un array. 966 00:52:03,000 --> 00:52:06,000 Esta chave vai ser unha cadea, e basicamente calquera cousa que podes facer 967 00:52:06,000 --> 00:52:10,000 en JSON que podes facer dentro dunha lista de propiedades, 968 00:52:10,000 --> 00:52:14,000 e por iso está realmente moi ben nos permite traballar con algúns datos. 969 00:52:14,000 --> 00:52:18,000 Por exemplo, eu teño esa Teams.plist que eu creei. 970 00:52:18,000 --> 00:52:22,000 Eu creei un arquivo plist novo, e podo detallar. 971 00:52:22,000 --> 00:52:26,000 Trátase de un dicionario, este é un dicionario, son cadeas de caracteres, 972 00:52:26,000 --> 00:52:30,000 e por iso esta é unha boa representación gráfica dun documento JSON 973 00:52:30,000 --> 00:52:33,000 ou só un conxunto de pares de valores clave, 974 00:52:33,000 --> 00:52:37,000 e por iso este é o dato que eu vou estar traballando co interior do meu programa. 975 00:52:37,000 --> 00:52:40,000 >> Imos primeiro en chegar aquí. Temos arquivos moito máis agora. 976 00:52:40,000 --> 00:52:44,000 Pero primeiro imos vir aquí para o storyboard. 977 00:52:44,000 --> 00:52:48,000 O storyboard aquí, se podo afastarme 978 00:52:48,000 --> 00:52:51,000 agora podemos ver que este é o fluxo do meu programa. 979 00:52:51,000 --> 00:52:53,000 Estou indo primeiro para comezar nesta pantalla. 980 00:52:53,000 --> 00:52:55,000 Vou detallar a este pantalla, 981 00:52:55,000 --> 00:52:58,000 e eu estou indo a detallar a esta pantalla, e podemos ver aquí que eu tipo de 982 00:52:58,000 --> 00:53:04,000 mover un deles en torno a nós esas frechas vai aquí ata aquí, 983 00:53:04,000 --> 00:53:08,000 e do xeito que eu definir a frecha era eu ampliar un pouco, 984 00:53:08,000 --> 00:53:12,000 e se eu vir a este controlador de vista, 985 00:53:12,000 --> 00:53:16,000 e aquí está unha célula, e quero dicir que cando toque dunha célula 986 00:53:16,000 --> 00:53:18,000 Eu quero que desprazar sobre a outra pantalla. 987 00:53:18,000 --> 00:53:21,000 Podo simplemente Manteña o control, 988 00:53:21,000 --> 00:53:26,000 rolar un pouco, manteña o control, arrastrar esta célula máis e deixar ir. 989 00:53:26,000 --> 00:53:30,000 >> E aquí podemos dicir que é a transición que quere usar? 990 00:53:30,000 --> 00:53:32,000 Quere usar esa cousa diapositiva que se chama impulso? 991 00:53:32,000 --> 00:53:34,000 Queres desprazar cara arriba a partir do fondo? 992 00:53:34,000 --> 00:53:36,000 Iso é chamado de modalidade. 993 00:53:36,000 --> 00:53:40,000 E unha vez que eu premer nun deles, que vai sacar esa frecha para min, 994 00:53:40,000 --> 00:53:44,000 e iso significa que eu realmente tratado o que ocorre cando premer este botón graficamente. 995 00:53:44,000 --> 00:53:48,000 Eu non escribir calquera código para realmente desprazar unha pantalla para a próxima. 996 00:53:48,000 --> 00:53:51,000 Eu define iso visualmente dentro Interface Builder. 997 00:53:51,000 --> 00:53:55,000 Se eu premer nesta frecha, podemos ver que eu dei esa cousa dun nome. 998 00:53:55,000 --> 00:53:59,000 Chameino showDivisions, e iso é para que eu poida saber 999 00:53:59,000 --> 00:54:03,000 que a transición está a piques de ocorrer, e imos ver por que, en só un segundo. 1000 00:54:03,000 --> 00:54:06,000 É así que eu teño con fío ata as distintas pantallas no meu programa. 1001 00:54:06,000 --> 00:54:09,000 Se este fose un botón, por exemplo, en vez de unha vista de táboa, 1002 00:54:09,000 --> 00:54:11,000 Eu podería controlar prema no botón, arrastra ata a seguinte pantalla, 1003 00:54:11,000 --> 00:54:16,000 e é así que eu poida facer camiño de navegación que. 1004 00:54:16,000 --> 00:54:19,000 >> Moi rapidamente, se nós entrarmos na MasterViewController, 1005 00:54:19,000 --> 00:54:22,000 de novo, nós estamos indo simplemente para definir unha lista de cousas 1006 00:54:22,000 --> 00:54:26,000 que será amosado na pantalla de táboa. 1007 00:54:26,000 --> 00:54:29,000 Aquí estou dicindo que eu quero que tome este ficheiro plist, 1008 00:54:29,000 --> 00:54:32,000 e quero que poña o nun dicionario, 1009 00:54:32,000 --> 00:54:35,000 e unha vez que ten que dicionario, eu vou responder a esas mesmas preguntas novo. 1010 00:54:35,000 --> 00:54:37,000 Aquí está o número de seccións. 1011 00:54:37,000 --> 00:54:41,000 Un, hai unha liña para cada liga, eo texto de cada célula 1012 00:54:41,000 --> 00:54:46,000 ou debería ser a primeira, a primeira liga, a segunda liga, e así por diante. 1013 00:54:46,000 --> 00:54:51,000 Finalmente, eu vou usar este método que acabamos de ver chamado prepareForSegue, 1014 00:54:51,000 --> 00:54:54,000 e este é o método que vai ser accionado cando clic 1015 00:54:54,000 --> 00:54:57,000 nunha desas liñas e, polo tanto, activando esta transición 1016 00:54:57,000 --> 00:54:59,000 que eu crear as frechas. 1017 00:54:59,000 --> 00:55:02,000 Isto está dicindo que eu podo ter varios 1018 00:55:02,000 --> 00:55:05,000 relacións de unha pantalla a outra. 1019 00:55:05,000 --> 00:55:08,000 Se eu tivera dous botóns e cada botón leva a unha pantalla diferente 1020 00:55:08,000 --> 00:55:10,000 Vou ter dous segues, un para cada botón. 1021 00:55:10,000 --> 00:55:14,000 Pero esta prepareForSegue é, de novo, vai ser reutilizada 1022 00:55:14,000 --> 00:55:17,000 para cada unha das diferentes relacións, o que significa que precisan dunha maneira 1023 00:55:17,000 --> 00:55:21,000 de identificar se prema o botón primeiro ou prema o segundo botón. 1024 00:55:21,000 --> 00:55:25,000 >> Lembre-se de que cando eu dei Segue un nome, este showDivisions, 1025 00:55:25,000 --> 00:55:29,000 é así que eu agora sei que este é o Séguese que foi activado. 1026 00:55:29,000 --> 00:55:32,000 Todo o que quero facer é que quero dicir 1027 00:55:32,000 --> 00:55:35,000 Eu quero descubrir o que eu bater, 1028 00:55:35,000 --> 00:55:38,000 e así conseguir isto, podo dicir que quero o indexPath para a liña seleccionada, 1029 00:55:38,000 --> 00:55:42,000 lembrar o indexPath só di onde prema, 1030 00:55:42,000 --> 00:55:47,000 e entón eu quero dicir que quero descubrir onde estou indo. 1031 00:55:47,000 --> 00:55:50,000 Este destinationViewController, que é unha propiedade do xeito. 1032 00:55:50,000 --> 00:55:53,000 Esta é a pantalla que eu vou, 1033 00:55:53,000 --> 00:55:56,000 entón eu sei que a pantalla vou chámase DivisionsViewController 1034 00:55:56,000 --> 00:55:59,000 porque eu creei esta clase, 1035 00:55:59,000 --> 00:56:02,000 e agora eu dixer d.divisions 1036 00:56:02,000 --> 00:56:06,000 Estou agora a definición dunha propiedade do controlador de vista que estou a piques de ir. 1037 00:56:06,000 --> 00:56:10,000 Isto é como eu estou enviando datos dunha pantalla a outra pantalla. 1038 00:56:10,000 --> 00:56:13,000 >> Basta ollar para esta DivisionsViewController 1039 00:56:13,000 --> 00:56:16,000 podes ver aquí que no arquivo h. 1040 00:56:16,000 --> 00:56:20,000 hai que as divisións de propiedade, e é iso que eu estou basicamente cubrir, 1041 00:56:20,000 --> 00:56:25,000 entón é así que eu sei que eu estou mostrando as divisións que corresponden a 1042 00:56:25,000 --> 00:56:28,000 a liga que prema, e de novo, 1043 00:56:28,000 --> 00:56:31,000 o punto de vista da táboa actual parece practicamente o mesmo, só respondendo 1044 00:56:31,000 --> 00:56:34,000 3 preguntas sinxelas, así como a identificación 1045 00:56:34,000 --> 00:56:37,000 o que ocorre cando se move á seguinte pantalla. 1046 00:56:37,000 --> 00:56:40,000 Só un par de outras cousas aquí. 1047 00:56:40,000 --> 00:56:43,000 Vostede entende arriba aquí que en vez de dicir # include 1048 00:56:43,000 --> 00:56:45,000 Estou dicindo agora # importar. 1049 00:56:45,000 --> 00:56:47,000 Esta é só unha cousa Objective-C. 1050 00:56:47,000 --> 00:56:52,000 A importación é basicamente unha versión máis agradable de inclusión, 1051 00:56:52,000 --> 00:56:57,000 e, por exemplo, necesitamos saber o que esta clase é, 1052 00:56:57,000 --> 00:57:00,000 por iso non podo só dicir DivisionsViewController. 1053 00:57:00,000 --> 00:57:05,000 Se non hashtag dentro standardio.c do noso arquivo c. 1054 00:57:05,000 --> 00:57:07,000 o compilador non tiña idea do que era printf. 1055 00:57:07,000 --> 00:57:12,000 Do mesmo xeito, se non me importar o DivisionsViewController 1056 00:57:12,000 --> 00:57:16,000 o compilador realmente non ten idea do que é un DivisionsViewController. 1057 00:57:16,000 --> 00:57:19,000 Só asegúrese de que dentro dos seus arquivos diferentes. M que garantir a importación 1058 00:57:19,000 --> 00:57:25,000 os arquivos correspondentes. h para que o compilador sabe o que está a suceder. 1059 00:57:25,000 --> 00:57:31,000 >> Finalmente, o que Apple finalmente fai é presentar algúns datos usando unha visión web 1060 00:57:31,000 --> 00:57:35,000 e así unha visión da web é un obxecto no que pode introducir 1061 00:57:35,000 --> 00:57:37,000 un navegador pouco dentro da súa aplicación. 1062 00:57:37,000 --> 00:57:40,000 Todo o que cómpre facer é fornecer un URL para o seu navegador, 1063 00:57:40,000 --> 00:57:43,000 entón eu quero ir a mlb.mlb.com, 1064 00:57:43,000 --> 00:57:46,000 e é así que eu podo acceder á páxina de inicio de cada equipo, 1065 00:57:46,000 --> 00:57:49,000 e entón polo paso neste URL 1066 00:57:49,000 --> 00:57:52,000 a exhibición da web pode amosar isto para min, e podo navegar ao redor, 1067 00:57:52,000 --> 00:58:01,000 e simulador está en uso por aquel. 1068 00:58:01,000 --> 00:58:03,000 Agora, iso veu da miña plist. 1069 00:58:03,000 --> 00:58:07,000 Se eu premer nese presente tamén veu do meu plist, e este deslizamento foi tratado 1070 00:58:07,000 --> 00:58:09,000 definindo os segues. 1071 00:58:09,000 --> 00:58:12,000 Clic iso e máis, 1072 00:58:12,000 --> 00:58:15,000 e agora aquí está a miña UIWebView, así como que 1073 00:58:15,000 --> 00:58:19,000 aquí está o sitio para a URL que eu só incorporado, 1074 00:58:19,000 --> 00:58:21,000 e eu non ter que tratar con calquera cousa tola. 1075 00:58:21,000 --> 00:58:24,000 Esta é a forma de mostrar unha páxina web. 1076 00:58:24,000 --> 00:58:27,000 Cousas como este botón volta aquí tamén se dan a min 1077 00:58:27,000 --> 00:58:33,000 totalmente de balde, porque eu xa definiu estas relacións mediante segues. 1078 00:58:33,000 --> 00:58:37,000 >> Algunha pregunta? Si 1079 00:58:37,000 --> 00:58:40,000 [Estudante] Entón, cando usa alloc, vostede non ten a nada libre? 1080 00:58:40,000 --> 00:58:43,000 Exactamente, cando chamar alloc e init non ten para liberalo la. 1081 00:58:43,000 --> 00:58:46,000 IOS vai tratar con todo isto para ti. 1082 00:58:46,000 --> 00:58:51,000 É marabilloso, e non está batendo ningunha regra. Si 1083 00:58:51,000 --> 00:58:54,000 [Estudante] Se fose para incluír máis equipos que poderían caber na pantalla, 1084 00:58:54,000 --> 00:58:58,000 sería automaticamente ten unha opción de desprazamento, ou é algo que precisa engadir? 1085 00:58:58,000 --> 00:59:01,000 Exactamente, se eu tivese máis equipos, por exemplo, sería tratar automaticamente 1086 00:59:01,000 --> 00:59:04,000 a rolagem para min, e todos os problemas de rendemento 1087 00:59:04,000 --> 00:59:08,000 coa enorme mesa tamén están feitos totalmente por min. 1088 00:59:08,000 --> 00:59:11,000 >> Outras preguntas? 1089 00:59:11,000 --> 00:59:13,000 Todo este código vai ser posta. 1090 00:59:13,000 --> 00:59:16,000 Nós medio que encuberto un pouco dos detalles máis pequenos, 1091 00:59:16,000 --> 00:59:19,000 pero cousas como establecer algunhas propiedades para a exhibición da web 1092 00:59:19,000 --> 00:59:22,000 son só cousas que podes obter a través do seu navegador de documentación de Apple, 1093 00:59:22,000 --> 00:59:24,000 o que é realmente, realmente moi ben definidos. 1094 00:59:24,000 --> 00:59:27,000 Teñen unha chea de aplicacións de mostra e exemplo usos 1095 00:59:27,000 --> 00:59:34,000 de APIs diferente, entón definitivamente ler os se poida. 1096 00:59:34,000 --> 00:59:36,000 Só algúns enlaces útiles que pode querer dar un ollo. 1097 00:59:36,000 --> 00:59:38,000 Estas son algunhas guías de documentación á man. 1098 00:59:38,000 --> 00:59:41,000 As URLs son enormes, polo que son acurtados. 1099 00:59:41,000 --> 00:59:44,000 Este primeiro é toda a biblioteca de documentación. 1100 00:59:44,000 --> 00:59:46,000 Hai barras de investigación pequenos, entón comezar a escribir o botón 1101 00:59:46,000 --> 00:59:50,000 vai comezar a dar-lle toda a información sobre todas as cousas que podes facer con un botón. 1102 00:59:50,000 --> 00:59:53,000 Eu tamén incluíu a Táboa de guía de programación View. 1103 00:59:53,000 --> 00:59:56,000 El trata sobre vistas de táboa moito máis detalle, 1104 00:59:56,000 --> 01:00:00,000 como facer as cousas como engadir dinámicamente ou células editar ou borrar. 1105 01:00:00,000 --> 01:00:02,000 >> Hai moitos programas de mostra de Apple que vai amosar como facelo, 1106 01:00:02,000 --> 01:00:05,000 e, finalmente, este último é o Human Interface Guidelines, 1107 01:00:05,000 --> 01:00:09,000 e iso é basicamente unha discusión de compoñentes de interface de usuario, 1108 01:00:09,000 --> 01:00:12,000 cousas como non facer un botón que é 4 píxeles por 4 píxeles. 1109 01:00:12,000 --> 01:00:15,000 Iso é unha mala idea, e outras cousas que Apple quere que faga 1110 01:00:15,000 --> 01:00:18,000 fomentar a boa concepción. 1111 01:00:18,000 --> 01:00:23,000 >> Calquera dúbida últimas antes de rematar? 1112 01:00:23,000 --> 01:00:27,000 Todo ben, Sinto-se a liberdade definitiva para-nós estamos indo ter etiquetas especiais para discutir. 1113 01:00:27,000 --> 01:00:30,000 Nós imos ter un IOS un, para sempre sentirse libre para usar isto. 1114 01:00:30,000 --> 01:00:34,000 Se queres traballar cos seus compañeiros de clase en proxectos 1115 01:00:34,000 --> 01:00:37,000 ou axudar a descubrir algunhas cousas IOS aleatoria 1116 01:00:37,000 --> 01:00:40,000 Sinto-se libre para me e-mail, e, en definitiva, ler todo en liña o código porque 1117 01:00:40,000 --> 01:00:43,000 só no interese de tempo que tipo de encuberto máis 1118 01:00:43,000 --> 01:00:45,000 detalles máis finos grans de cousas. 1119 01:00:45,000 --> 01:00:47,000 Pero se non, entón boa sorte nos seus proxectos de IOS, e espero que teñamos 1120 01:00:47,000 --> 01:00:53,000 un gran fluxo de aplicacións na App Store. 1121 01:00:53,000 --> 01:00:56,000 [CS50.TV]