1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminario] [iOS: Escritura de aplicaciones 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 es CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Muy bien, todos, bienvenidos a iOS: Escritura de aplicaciones como un jefe. 5 00:00:12,000 --> 00:00:16,000 Este seminario va a centrarse en la escritura de aplicaciones para el iPhone 6 00:00:16,000 --> 00:00:19,000 ya su vez escribir aplicaciones para el iPad, y por lo que estamos básicamente va a caminar a través de 7 00:00:19,000 --> 00:00:23,000 un par de ejemplos diferentes de cómo hacer una aplicación, un juego tan simple como Tic Tac Toe, 8 00:00:23,000 --> 00:00:26,000 o si usted está más interesado en hacer una aplicación como una especie de lector de noticias 9 00:00:26,000 --> 00:00:30,000 o algo que interactúa con el Internet voy a hablar de eso también. 10 00:00:30,000 --> 00:00:32,000 Aquí está nuestra agenda breve. 11 00:00:32,000 --> 00:00:36,000 >> Aplicaciones IOS están escritos en un lenguaje llamado Objective-C, 12 00:00:36,000 --> 00:00:39,000 por lo que este es un poco similar a C, pero en realidad no en todos, 13 00:00:39,000 --> 00:00:41,000 por lo que vamos a hablar un poco sobre el lenguaje en sí mismo 14 00:00:41,000 --> 00:00:45,000 y luego cómo construir aplicaciones para el iPhone usando este programa aplicación llamada XCode, 15 00:00:45,000 --> 00:00:48,000 que si no lo has descargado aún no dude en iniciar la descarga ahora mismo. 16 00:00:48,000 --> 00:00:50,000 Es varios gigabytes. 17 00:00:50,000 --> 00:00:54,000 Debe estar libre en la App Store, así que usted tendrá que tener un Mac 18 00:00:54,000 --> 00:00:57,000 idealmente ejecutando la última versión de OS X. 19 00:00:57,000 --> 00:00:59,000 Si no es así, no hay problema. 20 00:00:59,000 --> 00:01:02,000 Contamos con equipos Mac en el centro de la ciencia disponible para su uso 21 00:01:02,000 --> 00:01:05,000 con XCode instalado, por lo que no dude en utilizar los de desarrollo. 22 00:01:05,000 --> 00:01:07,000 Si quieres hacer una aplicación, pero no tienen una Mac, no te preocupes. 23 00:01:07,000 --> 00:01:09,000 Hay un montón de recursos del campus para eso. 24 00:01:09,000 --> 00:01:15,000 Y entonces vamos a cubrir dos grandes ejemplos de aplicaciones diferentes que usted puede hacer. 25 00:01:15,000 --> 00:01:19,000 Objective-C es técnicamente lo que se llama un superconjunto de C. 26 00:01:19,000 --> 00:01:24,000 Eso significa que cualquier código C es también válido Objective-C código. 27 00:01:24,000 --> 00:01:29,000 Eso quiere decir que tipo de conducto hiciera en algunas características adicionales a C. 28 00:01:29,000 --> 00:01:33,000 Algunas de estas características incluyen no tener que escribir siempre malloc nuevo, gracias a Dios, 29 00:01:33,000 --> 00:01:36,000 sin tener que preocuparse acerca de los punteros estúpidas y liberarlos y todo eso 30 00:01:36,000 --> 00:01:40,000 que odiaba de C, y es una especie de pasado en Objective-C. 31 00:01:40,000 --> 00:01:43,000 >> Ahora, Objective-C también tiene una biblioteca estándar mucho más grande, 32 00:01:43,000 --> 00:01:47,000 por lo que hay mucha más funcionalidad que te pasa por dentro libres de Objective-C. 33 00:01:47,000 --> 00:01:50,000 ¿Recuerdas cuando estábamos escribiendo PHP nos dimos cuenta de que hemos pasado de 34 00:01:50,000 --> 00:01:54,000 este pequeño lenguaje para la biblioteca gigante de todas estas cosas locas que puede hacer. 35 00:01:54,000 --> 00:01:56,000 Lo mismo sucede en iOS. 36 00:01:56,000 --> 00:01:59,000 Hay objetos para cosas como el calendario budista, y nada realmente 37 00:01:59,000 --> 00:02:05,000 que posiblemente puede pensar probablemente ya existe en la aplicación de Objective-C. 38 00:02:05,000 --> 00:02:08,000 La parte objetiva de Objective-C hace referencia a algo 39 00:02:08,000 --> 00:02:11,000 llamado Programación orientada a objetos. 40 00:02:11,000 --> 00:02:14,000 Esto es un poco de un concepto nuevo, pero en realidad hemos aprendido en su mayoría 41 00:02:14,000 --> 00:02:17,000 muchos de estos conceptos ya. 42 00:02:17,000 --> 00:02:19,000 La idea detrás de Programación orientada a objetos es que usted va a estructurar 43 00:02:19,000 --> 00:02:23,000 una gran parte de su código en torno a estas cosas llamadas clases, 44 00:02:23,000 --> 00:02:26,000 y estas clases son realmente glorificado estructuras. 45 00:02:26,000 --> 00:02:30,000 En el interior de una estructura que básicamente dice aquí es una cosa, 46 00:02:30,000 --> 00:02:32,000 y esto puede tener miembros. 47 00:02:32,000 --> 00:02:35,000 Por ejemplo, un nodo en una lista enlazada podría tener otras cosas 48 00:02:35,000 --> 00:02:38,000 como un valor, un puntero al siguiente nodo en la lista, 49 00:02:38,000 --> 00:02:44,000 y juntos ese puntero y el valor que compone esta instancia de una estructura. 50 00:02:44,000 --> 00:02:47,000 Las clases son muy similares, excepto 51 00:02:47,000 --> 00:02:50,000 clases también pueden tener funciones dentro de ellos. 52 00:02:50,000 --> 00:02:54,000 Cuando declaramos una estructura, sólo podríamos decir int n o * siguiente nodo. 53 00:02:54,000 --> 00:02:57,000 >> Ahora con Objective-C se puede poner realmente las funciones 54 00:02:57,000 --> 00:02:59,000 dentro de esas cosas. 55 00:02:59,000 --> 00:03:03,000 Otra cosa que puedes hacer es clases pueden heredar de otras clases de datos. 56 00:03:03,000 --> 00:03:07,000 Por ejemplo, vamos a estar buscando en un montón de clases incorporadas de Objective-C. 57 00:03:07,000 --> 00:03:11,000 Una de ellas podría ser la clase que representa la visión de una pantalla, 58 00:03:11,000 --> 00:03:14,000 y así, diciendo que quiero aplicar mi propio punto de vista 59 00:03:14,000 --> 00:03:18,000 que básicamente dice a alguien en Apple, la gente probablemente muy agradable, 60 00:03:18,000 --> 00:03:21,000 escribió esta clase para mí, y maneja las cosas como mostrar botones 61 00:03:21,000 --> 00:03:25,000 o la prestación de la pantalla, y que sería muy dolorosa 62 00:03:25,000 --> 00:03:28,000 aplicar toda la funcionalidad que nosotros mismos, y así simplemente 63 00:03:28,000 --> 00:03:31,000 heredando datos podemos decir todo lo que hiciste en esa clase 64 00:03:31,000 --> 00:03:34,000 Yo también quiero dentro de mi clase, y luego me voy a hacer algunas otras cosas, 65 00:03:34,000 --> 00:03:37,000 es decir, implementar una aplicación. 66 00:03:37,000 --> 00:03:40,000 Eso es lo que significa la palabra herencia. Vamos a ver un ejemplo más concreto. 67 00:03:40,000 --> 00:03:42,000 >> Y, por último, la clave de programación orientada a objetos es que 68 00:03:42,000 --> 00:03:45,000 que conduce a la encapsulación de datos. 69 00:03:45,000 --> 00:03:48,000 En algunos de nuestros boletines de problemas que podríamos tener estas grandes variables globales, 70 00:03:48,000 --> 00:03:51,000 y globales en todas partes, y así es como nos gustaría llevar un registro de estado. 71 00:03:51,000 --> 00:03:55,000 Con las clases podemos empezar encapsular información dentro de un objeto. 72 00:03:55,000 --> 00:03:58,000 Si tenemos una pantalla en nuestra aplicación, que en realidad no necesita tener ningún dato de 73 00:03:58,000 --> 00:04:01,000 otra pantalla en el interior de nuestra aplicación de que, 74 00:04:01,000 --> 00:04:04,000 por lo que al encapsular las cosas dentro de las clases de esta realidad conduce 75 00:04:04,000 --> 00:04:08,000 para diseño de código mucho mejor, y esto es posible con algunas de las características adicionales 76 00:04:08,000 --> 00:04:11,000 de Objective-C. 77 00:04:11,000 --> 00:04:15,000 Aviso previo, la sintaxis para Objective-C es el banano. 78 00:04:15,000 --> 00:04:19,000 Esto se parece a nada que hayamos visto antes, 79 00:04:19,000 --> 00:04:22,000 por lo que es un poco de una curva de aprendizaje para acostumbrarse 80 00:04:22,000 --> 00:04:24,000 ¿qué diablos significa esto? 81 00:04:24,000 --> 00:04:27,000 Pero una vez que pasas esa curva de aprendizaje inicial es muy, muy suave 82 00:04:27,000 --> 00:04:29,000 para empezar a escribir aplicaciones. 83 00:04:29,000 --> 00:04:33,000 >> Para declarar una clase, por no decir esta es mi clase, existe, 84 00:04:33,000 --> 00:04:35,000 y tal vez aquí hay algunas cosas que voy a definir más adelante, 85 00:04:35,000 --> 00:04:38,000 Voy a decir @ interface. 86 00:04:38,000 --> 00:04:41,000 Voy a decir @ interface. Voy a dar mi clase un nombre. 87 00:04:41,000 --> 00:04:43,000 Y más tarde en otro lugar voy a decir @ end, 88 00:04:43,000 --> 00:04:46,000 y todo en medio de la interfaz y el extremo @ @ 89 00:04:46,000 --> 00:04:48,000 va a ser mi clase. 90 00:04:48,000 --> 00:04:51,000 Eso va a ser lo que hay dentro de nuestros archivos. H. 91 00:04:51,000 --> 00:04:55,000 Al igual que en C los archivos. H básicamente dijo aquí hay algunas cosas que existirán. 92 00:04:55,000 --> 00:04:57,000 No estoy diciendo necesariamente lo que hacen, sin embargo, 93 00:04:57,000 --> 00:04:59,000 pero el compilador necesita saber que ellos existen. 94 00:04:59,000 --> 00:05:04,000 Más tarde, en el interior de nuestra. Archivos m-m porque para Objective-C 95 00:05:04,000 --> 00:05:08,000 es donde estamos en realidad va a definir lo que estas clases lo hacen. 96 00:05:08,000 --> 00:05:11,000 Al igual que nuestros archivos. C, proporcionamos una implementación para las funciones. 97 00:05:11,000 --> 00:05:15,000 Dentro de nuestra. M fichero que vamos a decir aquí es lo que todas las funciones 98 00:05:15,000 --> 00:05:18,000 dentro de mi clase-lo que todos hacen. 99 00:05:18,000 --> 00:05:22,000 Y, por último, en el interior de una estructura que podríamos decir dentro de las llaves 100 00:05:22,000 --> 00:05:25,000 int, n o nodo siguiente * 101 00:05:25,000 --> 00:05:28,000 y en Objective-C que vamos a utilizar la palabra clave @ property, 102 00:05:28,000 --> 00:05:31,000 y esto es lo que va a definir las propiedades, 103 00:05:31,000 --> 00:05:36,000 o las funciones no-que son una parte de mis clases. 104 00:05:36,000 --> 00:05:40,000 >> Llamar a funciones en Objective-C es también plátanos. 105 00:05:40,000 --> 00:05:43,000 Cuando declaramos funciones en C que decía algo así como int foo 106 00:05:43,000 --> 00:05:46,000 y abierto paren y luego le dio una lista de argumentos. 107 00:05:46,000 --> 00:05:51,000 Esto es lo que declara los métodos o funciones se ve como en Objective-C. 108 00:05:51,000 --> 00:05:54,000 Si quiero declarar una función o un método 109 00:05:54,000 --> 00:05:58,000 donde yo estoy diciendo método es en realidad una función que es un miembro de una clase, 110 00:05:58,000 --> 00:06:01,000 tan amable de intercambiables, pero no realmente, 111 00:06:01,000 --> 00:06:03,000 tan dentro de mi método que desea crear un nuevo método. 112 00:06:03,000 --> 00:06:06,000 Se va a devolver ningún valor, así que va a ser de tipo void. 113 00:06:06,000 --> 00:06:08,000 Este es el tipo de retorno de mi función. 114 00:06:08,000 --> 00:06:11,000 Ahora tenemos paréntesis aquí porque-no lo sé. 115 00:06:11,000 --> 00:06:14,000 A continuación va a ser el nombre de mi función, 116 00:06:14,000 --> 00:06:17,000 y, finalmente, tenemos un punto y coma al igual que tuvimos en C. 117 00:06:17,000 --> 00:06:19,000 Lo que es nuevo aquí es que este tipo aquí. 118 00:06:19,000 --> 00:06:22,000 Este guión es realmente necesario, y es lo que este dice que 119 00:06:22,000 --> 00:06:26,000 Este método debe ser llamado aquí en una instancia de una clase. 120 00:06:26,000 --> 00:06:29,000 >> Después declaramos nuestras estructuras es probable que decía algo así como 121 00:06:29,000 --> 00:06:32,000 n struct nodo, y que en realidad creó 122 00:06:32,000 --> 00:06:35,000 o instancias de una de esas estructuras a fin de que yo podía empezar a trabajar 123 00:06:35,000 --> 00:06:38,000 con lo que hay dentro de ella, por lo que este guión significa que tenemos que 124 00:06:38,000 --> 00:06:41,000 instancia de la clase al igual que nosotros instancia que struct 125 00:06:41,000 --> 00:06:43,000 antes de que podamos llamar a este método en él. 126 00:06:43,000 --> 00:06:46,000 Si quiero empezar a añadir argumentos a mis métodos 127 00:06:46,000 --> 00:06:48,000 se vuelve aún más plátanos. 128 00:06:48,000 --> 00:06:50,000 Aquí está mi nombre de método. 129 00:06:50,000 --> 00:06:53,000 Entonces me voy a tener dos puntos, y después de esto que dice aquí dos puntos viene algunos argumentos. 130 00:06:53,000 --> 00:06:56,000 Este método toma un argumento. 131 00:06:56,000 --> 00:06:59,000 El tipo de su argumento es un entero, y el nombre de ese argumento 132 00:06:59,000 --> 00:07:03,000 o la variable que voy a empezar a usar dentro del método se llama i. 133 00:07:03,000 --> 00:07:05,000 Una vez más, este es el método. Toma un argumento. 134 00:07:05,000 --> 00:07:10,000 >> Si quieres empezar a añadir más argumentos se pone más bananas 135 00:07:10,000 --> 00:07:13,000 en que tenemos este colon que dice aquí viene mi lista de argumentos. 136 00:07:13,000 --> 00:07:15,000 Este primer argumento es un número entero. 137 00:07:15,000 --> 00:07:17,000 Ahora bien, este segundo argumento es interesante. 138 00:07:17,000 --> 00:07:20,000 La variable que voy a usar dentro de mi función 139 00:07:20,000 --> 00:07:23,000 se llama f, tan dentro de mi función que podría decir 140 00:07:23,000 --> 00:07:25,000 f + = 1 o algo así. 141 00:07:25,000 --> 00:07:30,000 Esta cosa aquí es, básicamente, una clave para que el argumento o parámetro. 142 00:07:30,000 --> 00:07:34,000 Al igual que hemos tenido pares de clave-valor y algo como JSON o arrays asociativos 143 00:07:34,000 --> 00:07:37,000 Objective-C tomó la decisión de decir, bueno, sólo para que sea realmente transparente 144 00:07:37,000 --> 00:07:39,000 cuando se llama a un método que todos estos parámetros son 145 00:07:39,000 --> 00:07:41,000 De hecho voy a nombrarlos a todos. 146 00:07:41,000 --> 00:07:45,000 Cuando se llama a un método, que realmente va a decir andFloat, 147 00:07:45,000 --> 00:07:47,000 y entonces te va a pasar pulg 148 00:07:47,000 --> 00:07:50,000 >> Curiosamente, este no se nombra, pero son todos de los otros parámetros, 149 00:07:50,000 --> 00:07:53,000 por lo que si teníamos un argumento tercero que pudiera decir andFloat 150 00:07:53,000 --> 00:07:56,000 y otro flotador y así sucesivamente. 151 00:07:56,000 --> 00:08:01,000 Al llamar a estos métodos es de plátanos de los cursos, 152 00:08:01,000 --> 00:08:04,000 por lo que si tengo un objeto, y se define un método llamado foo, 153 00:08:04,000 --> 00:08:09,000 y quiero llamarlo, en lugar de decir foo abrir / cerrar paréntesis 154 00:08:09,000 --> 00:08:11,000 Voy a abrir un soporte. 155 00:08:11,000 --> 00:08:13,000 Este es el nombre de mi método. 156 00:08:13,000 --> 00:08:17,000 Voy a cerrar el soporte, y este es el objeto que estoy llamando a encenderlo. 157 00:08:17,000 --> 00:08:20,000 Recuerde, todos estos métodos existen dentro de las clases 158 00:08:20,000 --> 00:08:23,000 ya que las clases pueden tener métodos definidos dentro de ellos. 159 00:08:23,000 --> 00:08:26,000 >> Aquí he arbitrariamente creado un objeto de una clase, 160 00:08:26,000 --> 00:08:28,000 y esta es la sintaxis para hacerlo. 161 00:08:28,000 --> 00:08:31,000 Hay dos pasos para crear un objeto. 162 00:08:31,000 --> 00:08:34,000 El primer paso es decir que desea asignar el espacio. 163 00:08:34,000 --> 00:08:37,000 Este es el equivalente de un malloc. No tenemos que decir malloc nunca más. 164 00:08:37,000 --> 00:08:42,000 Nos dejó la m, hizo alloc, y sustituyó a la c. Con. M. 165 00:08:42,000 --> 00:08:47,000 Después de algo alloc que entonces tenga que inicializar. 166 00:08:47,000 --> 00:08:49,000 Básicamente, cuando se crean objetos es posible que desee tener algo de lógica 167 00:08:49,000 --> 00:08:53,000 que se ejecuta cuando se crea, por lo que puede pasar en algunos valores por defecto 168 00:08:53,000 --> 00:08:57,000 o algo así, por lo que este método init es lo que realmente crea el objeto. 169 00:08:57,000 --> 00:08:59,000 En primer lugar, asignar el espacio, tal como lo hicimos en C, 170 00:08:59,000 --> 00:09:04,000 y luego inicializarlo, que puede o no puede hacer mucho. 171 00:09:04,000 --> 00:09:07,000 Entonces estamos volviendo esta cosa en un objeto o. 172 00:09:07,000 --> 00:09:09,000 Hay una estrella aquí porque esto es técnicamente un puntero, 173 00:09:09,000 --> 00:09:12,000 pero no te preocupes, los punteros no son gran cosa en Objective-C más. 174 00:09:12,000 --> 00:09:15,000 >> Ahora hemos instancia esta clase llamada NSObject, 175 00:09:15,000 --> 00:09:19,000 y esto es sólo una clase al azar que Apple tiene. 176 00:09:19,000 --> 00:09:22,000 Hemos instancia esto, y ahora tengo una instancia de esta clase 177 00:09:22,000 --> 00:09:25,000 en este objeto o, lo que significa que si se define 178 00:09:25,000 --> 00:09:29,000 estos métodos les podía llamar así. 179 00:09:29,000 --> 00:09:31,000 Del mismo modo, si quería llamar a un método con un argumento, 180 00:09:31,000 --> 00:09:34,000 por lo que este es el método de bar, que toma un argumento, 181 00:09:34,000 --> 00:09:38,000 y aquí está el baz: Método qux, por lo que esto toma 2 argumentos. 182 00:09:38,000 --> 00:09:44,000 Esto se llama una función de este o de objetos. 183 00:09:44,000 --> 00:09:46,000 Tiene sentido? 184 00:09:46,000 --> 00:09:50,000 La sintaxis debe tener sentido, pero que tipo de acostumbrarse a él. 185 00:09:50,000 --> 00:09:54,000 >> Bueno, vamos a hablar de algunas cosas que se construyen en Objective-C 186 00:09:54,000 --> 00:09:56,000 que no necesariamente se construyeron en C. 187 00:09:56,000 --> 00:09:59,000 En C que de alguna manera tenía que lidiar con estas cadenas como matrices de caracteres estúpidos, 188 00:09:59,000 --> 00:10:01,000 y se puso muy molesto. 189 00:10:01,000 --> 00:10:04,000 Objective-C tiene todos los construidos en para nosotros, y está construido en 190 00:10:04,000 --> 00:10:06,000 uso de esta clase NSString llamado. 191 00:10:06,000 --> 00:10:10,000 Cuando quiero crear un NSString tenemos sintaxis más arcano. 192 00:10:10,000 --> 00:10:15,000 En vez de decir "CS50", decimos @ "CS50" 193 00:10:15,000 --> 00:10:17,000 y esto es sólo la sintaxis para declarar cadenas en Objective-C. 194 00:10:17,000 --> 00:10:21,000 Esto es muy fácil de olvidar, así que no lo hagas. 195 00:10:21,000 --> 00:10:24,000 Ahora, una vez que tengo esto, esto es una cadena, pero note 196 00:10:24,000 --> 00:10:26,000 no deja de ser un objeto. 197 00:10:26,000 --> 00:10:30,000 Dije NSString, lo que significa que una instancia de la clase 198 00:10:30,000 --> 00:10:32,000 llamado NSString, que alguien escribió para mí, 199 00:10:32,000 --> 00:10:35,000 y que era muy agradable sobre él, y por eso ahora 200 00:10:35,000 --> 00:10:37,000 Puedo empezar a llamar a los métodos en él. 201 00:10:37,000 --> 00:10:40,000 Si llamo a la longitud de este método s objeto 202 00:10:40,000 --> 00:10:43,000 que va a volver a mí la longitud de la cadena. 203 00:10:43,000 --> 00:10:45,000 Esto es igual que strlen en C. 204 00:10:45,000 --> 00:10:47,000 Esto devuelve 4. 205 00:10:47,000 --> 00:10:51,000 >> Asimismo, otro método que puede ser que desee tener en cuenta es esta characterAtIndex. 206 00:10:51,000 --> 00:10:54,000 Este es un método que dice en esta cadena s 207 00:10:54,000 --> 00:10:57,000 Quiero que para obtener el carácter cero, 208 00:10:57,000 --> 00:10:59,000 por lo que este volviera a mí el carácter c, 209 00:10:59,000 --> 00:11:02,000 y hay un montón más de estos métodos que usted puede buscar en Google con mucha facilidad. 210 00:11:02,000 --> 00:11:07,000 Documentación de Apple es grande, y vamos a echar un vistazo a eso en un momento. 211 00:11:07,000 --> 00:11:09,000 Los que son cadenas. 212 00:11:09,000 --> 00:11:11,000 También hemos arrays de tamaño variable construido adentro 213 00:11:11,000 --> 00:11:13,000 Recuerde que en C cuando declaramos un arreglo 214 00:11:13,000 --> 00:11:16,000 que teníamos que decir tiene 5 elementos, fin de la historia. 215 00:11:16,000 --> 00:11:18,000 Cuando llegamos a JavaScript y PHP podríamos empezar 216 00:11:18,000 --> 00:11:20,000 hacer las cosas como la adición de elementos o elementos móviles. 217 00:11:20,000 --> 00:11:22,000 Podemos hacer lo mismo en Objective-C. 218 00:11:22,000 --> 00:11:26,000 En lugar de crear una matriz en la forma normal de C 219 00:11:26,000 --> 00:11:30,000 tenemos de nuevo otra clase llamada NSMutableArray. 220 00:11:30,000 --> 00:11:33,000 También hay NSArray, 221 00:11:33,000 --> 00:11:35,000 y esto va a encapsular básicamente algunos matriz. 222 00:11:35,000 --> 00:11:38,000 Esto nos dice que lo primero que quiero hacer es que quiero asignar 223 00:11:38,000 --> 00:11:41,000 espacio para una nueva matriz, y después de que se asignen 224 00:11:41,000 --> 00:11:43,000 Entonces necesitamos para inicializarlo. 225 00:11:43,000 --> 00:11:45,000 Una vez más, sólo llamar a estos dos métodos. 226 00:11:45,000 --> 00:11:48,000 Ahora bien, esto significa que dentro de este objeto un 227 00:11:48,000 --> 00:11:50,000 Tengo una matriz vacía sentado allí. 228 00:11:50,000 --> 00:11:54,000 Si quiero añadir algo a esta matriz, me puede llamar al método AddObject. 229 00:11:54,000 --> 00:11:59,000 Quiero agregar un objeto a la matriz a, y quiero agregar la cadena CS50. 230 00:11:59,000 --> 00:12:02,000 Si quisiera eliminar el contrario, que puedo decir que me quieres 231 00:12:02,000 --> 00:12:09,000 eliminar el objeto en primer lugar en la matriz o un objeto. 232 00:12:09,000 --> 00:12:11,000 >> Tiene sentido? 233 00:12:11,000 --> 00:12:14,000 Está bien, que tipo de acostumbrarse a esto corchetes. 234 00:12:14,000 --> 00:12:18,000 Por cierto, en el interior de una gran cantidad de bibliotecas de Apple verá esta DR. 235 00:12:18,000 --> 00:12:21,000 El NS realmente significa para el paso siguiente, que era una de las primeras empresas Steve Jobs, 236 00:12:21,000 --> 00:12:24,000 y ahí es donde realmente empecé a escribir un montón de código 237 00:12:24,000 --> 00:12:27,000 como una especie de base para Mac OS X y todas las otras cosas, 238 00:12:27,000 --> 00:12:32,000 por lo que este tipo de NS es este legado agradable gritar a una de las empresas anteriores 239 00:12:32,000 --> 00:12:34,000 vuelta cuando Apple estaba empezando. 240 00:12:34,000 --> 00:12:36,000 Está en todas partes. 241 00:12:36,000 --> 00:12:41,000 Echemos un vistazo a un enfoque más holístico Objective-C ejemplo. 242 00:12:41,000 --> 00:12:44,000 Aquí estoy dentro de XCode. 243 00:12:44,000 --> 00:12:47,000 Para llegar hasta aquí, lo primero que XCode descargado de la App Store, 244 00:12:47,000 --> 00:12:50,000 lo abrió, y luego subí aquí al expediente, 245 00:12:50,000 --> 00:12:54,000 aquí a nuevo proyecto, y luego. 246 00:12:54,000 --> 00:12:57,000 Después de hacer eso tengo todas estas opciones de lo que quiero crear, 247 00:12:57,000 --> 00:12:59,000 por lo que vamos a echar un vistazo a estas opciones más adelante, 248 00:12:59,000 --> 00:13:03,000 pero sólo para este ejemplo, porque no estamos realmente va a tener una aplicación, sin embargo, 249 00:13:03,000 --> 00:13:06,000 Vine aquí y me dijo herramienta de línea de comandos, 250 00:13:06,000 --> 00:13:09,000 y esta es una aplicación que podría correr en la línea de comandos 251 00:13:09,000 --> 00:13:12,000 al igual que hemos estado huyendo de C. 252 00:13:12,000 --> 00:13:16,000 Así es como he creado este proyecto, y por eso ahora que estoy aquí, 253 00:13:16,000 --> 00:13:20,000 así que vamos a ver por primera vez en este archivo, y esto debería ser bastante familiar. 254 00:13:20,000 --> 00:13:24,000 Tengo un nombre int. Ahí está mi amigo argc, argv mi otro amigo. 255 00:13:24,000 --> 00:13:30,000 Y así podemos ver que este es el punto de partida de mi primer Objective-C de la aplicación. 256 00:13:30,000 --> 00:13:32,000 Aquí podemos ignorar esto por ahora. 257 00:13:32,000 --> 00:13:35,000 Esto es básicamente un poco de materia de gestión de memoria que se quiere en realidad no 258 00:13:35,000 --> 00:13:37,000 nunca tiene que preocuparse. 259 00:13:37,000 --> 00:13:39,000 >> Echemos un vistazo a este primer bloque aquí. 260 00:13:39,000 --> 00:13:46,000 Esta primera línea, si digo Estudiante * alice = [[Estudiante alloc] init] qué hace eso? 261 00:13:46,000 --> 00:13:50,000 Este estudiante por primera vez aquí, esta es probablemente una clase. 262 00:13:50,000 --> 00:13:54,000 Esto no es una clase que Apple escribió, pero es una clase que escribí. 263 00:13:54,000 --> 00:13:57,000 Lo primero que quiero hacer es que quiero asignar espacio para un nuevo estudiante, 264 00:13:57,000 --> 00:14:00,000 y luego quiero que lo inicie, así que esto me da la espalda 265 00:14:00,000 --> 00:14:05,000 este objeto nuevo estudiante, y estoy almacenar esto en una variable llamada Alice. 266 00:14:05,000 --> 00:14:07,000 ¿De dónde vino esa clase viene? 267 00:14:07,000 --> 00:14:12,000 Bueno, aquí en el lado izquierdo son todos los archivos diferentes en el interior de mi proyecto. 268 00:14:12,000 --> 00:14:16,000 Podemos ver aquí tengo un Student.h y Student.m a. 269 00:14:16,000 --> 00:14:20,000 El archivo. H, recuerde, es donde yo declaro todas las cosas 270 00:14:20,000 --> 00:14:22,000 que existen dentro de la clase. 271 00:14:22,000 --> 00:14:25,000 >> Vamos a echar un vistazo a eso. 272 00:14:25,000 --> 00:14:29,000 Muy bien, aquí tenemos esta interfaz @, y esto dice que aquí viene 273 00:14:29,000 --> 00:14:33,000 las declaraciones de todo lo que existe dentro de mi clase. 274 00:14:33,000 --> 00:14:36,000 Entonces tengo dos puntos. Entonces tengo esta cosa NSObject. 275 00:14:36,000 --> 00:14:40,000 Esto significa que dos puntos bit de herencia que estábamos discutiendo un poco antes. 276 00:14:40,000 --> 00:14:43,000 Esto nos dice todo lo que un NSObject puede hacer 277 00:14:43,000 --> 00:14:46,000 donde NSObject es esta clase escrita por alguien más, 278 00:14:46,000 --> 00:14:50,000 todo esto se puede hacer NSObject Quiero ser capaz de hacer eso. 279 00:14:50,000 --> 00:14:54,000 Al decir: NSObject que significa que, básicamente, 280 00:14:54,000 --> 00:14:58,000 heredado toda la funcionalidad de otra clase. 281 00:14:58,000 --> 00:15:02,000 Eso me dio un montón de diferentes métodos y propiedades que se pueden utilizar. 282 00:15:02,000 --> 00:15:05,000 Aquí abajo estoy creando dos propiedades. 283 00:15:05,000 --> 00:15:08,000 Eso significa que mi estudiante, si se tratara de una estructura, éstas serían las 2 cosas 284 00:15:08,000 --> 00:15:11,000 dentro de mi estructura, por lo que cada estudiante tiene un nombre 285 00:15:11,000 --> 00:15:14,000 que es una cadena, y el estudiante también tiene un grado, 286 00:15:14,000 --> 00:15:17,000 que es un int. 287 00:15:17,000 --> 00:15:23,000 >> Por último, aquí voy a crear un método para mi estudiante. 288 00:15:23,000 --> 00:15:26,000 Llamé a mi método, initWithName, y se necesita un argumento, 289 00:15:26,000 --> 00:15:31,000 y ese argumento es una cadena, y me llamó de todo. 290 00:15:31,000 --> 00:15:35,000 Ahora echemos un vistazo a la forma en que realmente implementado esta clase. 291 00:15:35,000 --> 00:15:38,000 Aquí, ahora estoy dentro de mi. Archivo m, 292 00:15:38,000 --> 00:15:40,000 m para la implementación, supongo. 293 00:15:40,000 --> 00:15:44,000 Tengo mi aplicación, mi fin, y aquí es donde realmente estoy definiendo 294 00:15:44,000 --> 00:15:47,000 initWithName lo hace. 295 00:15:47,000 --> 00:15:50,000 Tengo initWithName, el nombre de mi parámetro, y entonces este 296 00:15:50,000 --> 00:15:53,000 es donde en realidad estoy creando un estudiante, 297 00:15:53,000 --> 00:15:56,000 por lo que este es un poco críptico, pero esto es un poco repetitivo 298 00:15:56,000 --> 00:15:58,000 que desea incluir en sus constructores. 299 00:15:58,000 --> 00:16:02,000 Esta función de inicialización aquí, initWithName, es un tipo de constructor. 300 00:16:02,000 --> 00:16:05,000 Básicamente, se está construyendo un objeto nuevo estudiante 301 00:16:05,000 --> 00:16:07,000 y tal vez el envío de algunos datos dentro de la misma. 302 00:16:07,000 --> 00:16:11,000 Lo primero que quiero hacer es que quiero llamar a init en esta cosa super. 303 00:16:11,000 --> 00:16:15,000 >> Recuerde que cuando le dije de nuevo aquí en el expediente. H 304 00:16:15,000 --> 00:16:21,000 que todo lo que un estudiante tiene una NSObject también lo ha hecho. 305 00:16:21,000 --> 00:16:24,000 Esto significa que cuando creo un estudiante lo que también tiene que hacer es 306 00:16:24,000 --> 00:16:28,000 asegúrese de que el NSObject que estoy heredando todos los datos de 307 00:16:28,000 --> 00:16:32,000 También se ha inicializado correctamente. 308 00:16:32,000 --> 00:16:36,000 ¿Qué tengo que decir es que este súper es en realidad va a hacer referencia a la clase padre 309 00:16:36,000 --> 00:16:39,000 que estoy heredando de, así que quiero asegurarme de que inicializar 310 00:16:39,000 --> 00:16:43,000 todo lo que estoy dependiendo de antes de empezar a tratar de usarlo. 311 00:16:43,000 --> 00:16:46,000 Luego, si ese inicializado correctamente esto es como decir si malloc 312 00:16:46,000 --> 00:16:50,000 no volvió nulo entonces puedo empezar a configurar algunas propiedades. 313 00:16:50,000 --> 00:16:54,000 >> En JavaScript y PHP habíamos esta palabra clave se llama esto, 314 00:16:54,000 --> 00:16:58,000 y esto hace referencia a la instancia actual de una clase. 315 00:16:58,000 --> 00:17:00,000 En Objective-C llamamos a esto mismo. 316 00:17:00,000 --> 00:17:04,000 Cuando digo self.name, que significa que el objeto 317 00:17:04,000 --> 00:17:07,000 Acabo de crear cuando dije alloc estudiante init, 318 00:17:07,000 --> 00:17:09,000 que me va a devolver un objeto. 319 00:17:09,000 --> 00:17:12,000 Eso significa que desea establecer el nombre de ese objeto 320 00:17:12,000 --> 00:17:15,000 a lo que me acaba de pasar pulg 321 00:17:15,000 --> 00:17:18,000 Al igual que en C, tenemos acceso a los miembros de este punto, 322 00:17:18,000 --> 00:17:21,000 así self.name dice el nombre del objeto de estudiante 323 00:17:21,000 --> 00:17:24,000 ahora va a ser lo que acaba de pasar pulg 324 00:17:24,000 --> 00:17:28,000 Y así, por fin, puedo volver así que en realidad recuperar algo. 325 00:17:28,000 --> 00:17:30,000 >> ¿Preguntas? 326 00:17:30,000 --> 00:17:34,000 Bueno, por lo que este auto = super init, 327 00:17:34,000 --> 00:17:37,000 si usted no entiende totalmente las cosas herencia no se preocupe. 328 00:17:37,000 --> 00:17:40,000 Sólo sé que si alguna vez quieres hacer tu propio método init sólo 329 00:17:40,000 --> 00:17:42,000 hacer eso, y usted estará listo para salir. 330 00:17:42,000 --> 00:17:44,000 Si. >> [Estudiante] ¿Qué significa si mismo? 331 00:17:44,000 --> 00:17:49,000 Esto significa que cuando malloc algo que siempre se comprueba si era igual a null, 332 00:17:49,000 --> 00:17:51,000 y si era nulo, entonces salimos. 333 00:17:51,000 --> 00:17:55,000 Esta es la misma cosa, porque si esto devuelve null, entonces probablemente va a culpa seg 334 00:17:55,000 --> 00:17:57,000 si comenzamos a tratar de manipular. 335 00:17:57,000 --> 00:18:01,000 Esa es nuestra clase estudiantil. 336 00:18:01,000 --> 00:18:03,000 Eso significa que podemos iniciar a nuestros alumnos en una de dos maneras. 337 00:18:03,000 --> 00:18:08,000 Si digo alloc estudiante init no estoy usando ese método que acabo de escribir, 338 00:18:08,000 --> 00:18:11,000 y en lugar de simplemente puedo decir alice.name, 339 00:18:11,000 --> 00:18:14,000 y ahora me voy a poner ese nombre de propiedad. 340 00:18:14,000 --> 00:18:17,000 >> Del mismo modo, si quiero usar ese método initWithName 341 00:18:17,000 --> 00:18:20,000 Simplemente puedo decir alloc, a continuación, en lugar de decir init 342 00:18:20,000 --> 00:18:24,000 Voy a llamar a ese método que acaba de crear, y lo voy a pasar en Bob. 343 00:18:24,000 --> 00:18:30,000 En este punto, este objeto Bob tiene un nombre igual a Bob. 344 00:18:30,000 --> 00:18:35,000 Bueno, aquí estoy usando que NSMutableArray que vimos anteriormente. 345 00:18:35,000 --> 00:18:38,000 Estoy asignando space.Then Estoy inicializar una nueva matriz. 346 00:18:38,000 --> 00:18:40,000 Voy a añadir dos cosas a la misma. 347 00:18:40,000 --> 00:18:43,000 Esta matriz tiene ahora objetos estudiantiles. 348 00:18:43,000 --> 00:18:46,000 Tenga en cuenta que en ninguna parte he de decir que es un conjunto de estudiantes. 349 00:18:46,000 --> 00:18:48,000 He dicho que es un array, y punto. 350 00:18:48,000 --> 00:18:50,000 Entonces puedo poner lo interior de lo que yo quiero. 351 00:18:50,000 --> 00:18:52,000 Aquí tengo dos objetos. 352 00:18:52,000 --> 00:18:56,000 >> Por último, tengo otro objeto aquí, este TF. 353 00:18:56,000 --> 00:18:59,000 Aquí en TF.h básicamente la misma cosa. 354 00:18:59,000 --> 00:19:01,000 Estoy heredando de NSObject, y por cierto, 355 00:19:01,000 --> 00:19:03,000 al crear clases de todo esto es hecho por ti, 356 00:19:03,000 --> 00:19:06,000 este tipo de interfaz repetitivo. 357 00:19:06,000 --> 00:19:08,000 Tiene una propiedad de los estudiantes. 358 00:19:08,000 --> 00:19:15,000 Tengo un par de métodos que aquí realmente no hacen mucho, 359 00:19:15,000 --> 00:19:18,000 y por lo que significa que después de crear este objeto TF 360 00:19:18,000 --> 00:19:23,000 Me puede llamar a este método de grado sobre el mismo de esta manera. 361 00:19:23,000 --> 00:19:26,000 ¿Tiene preguntas sobre sintaxis de Objective-C antes de empezar a pasar a algo más 362 00:19:26,000 --> 00:19:30,000 cosas interesantes desarrollo de aplicaciones? 363 00:19:30,000 --> 00:19:34,000 >> Está bien, así que vamos a hacer realidad una aplicación para el iPhone. 364 00:19:34,000 --> 00:19:39,000 Las clases principales que usted va a utilizar dentro de su aplicación para el iPhone se llaman controladores de vista, 365 00:19:39,000 --> 00:19:42,000 y un controlador de vista representa básicamente una sola pantalla 366 00:19:42,000 --> 00:19:46,000 dentro de su aplicación, por lo que si estoy en la aplicación de música, por ejemplo, 367 00:19:46,000 --> 00:19:50,000 un controlador de vista podría representar la vista en la que puedo ver todas las canciones en mi iPhone. 368 00:19:50,000 --> 00:19:53,000 Otro controlador de vista podría ser cuando hago clic en una canción y empezar a jugar 369 00:19:53,000 --> 00:19:55,000 o como me estoy profundizando en los artistas. 370 00:19:55,000 --> 00:19:59,000 Cada una de esas pantallas diferentes puede ser representada como un controlador de vista diferente, 371 00:19:59,000 --> 00:20:04,000 y un controlador de vista es en realidad una clase que dice cómo funciona esta pantalla. 372 00:20:04,000 --> 00:20:07,000 Las cosas en el interior de un controlador de vista, vamos a tener propiedades, 373 00:20:07,000 --> 00:20:10,000 así que cosas como un botón que va a ser una característica de nuestro controlador de vista. 374 00:20:10,000 --> 00:20:13,000 >> También vamos a disponer de métodos, y estas son, básicamente, los controladores de eventos. 375 00:20:13,000 --> 00:20:16,000 Este método dice que cuando se pulsa este botón 376 00:20:16,000 --> 00:20:19,000 Quiero hacer algo, y finalmente, de nuevo, 377 00:20:19,000 --> 00:20:24,000 vamos a utilizar esta palabra clave auto para acceder a la instancia actual. 378 00:20:24,000 --> 00:20:29,000 Para construir interfaces en iOS es realmente muy, muy fácil. 379 00:20:29,000 --> 00:20:32,000 Tienen esta drag drop interfaz agradable y llamó Interface Builder, 380 00:20:32,000 --> 00:20:37,000 y los 2 conceptos básicos que cablear su Objective-C a Interface Builder 381 00:20:37,000 --> 00:20:40,000 son IBOutlet y IBAction. 382 00:20:40,000 --> 00:20:44,000 Un IBOutlet simplemente dice que si se declara una propiedad que es un botón, 383 00:20:44,000 --> 00:20:47,000 y desea conectarlo a algo en la interfaz de usuario actual, 384 00:20:47,000 --> 00:20:49,000 vas a decir que es una salida. 385 00:20:49,000 --> 00:20:51,000 Del mismo modo, si se quiere representar un controlador de eventos 386 00:20:51,000 --> 00:20:54,000 entonces usted va a decir que es una acción. 387 00:20:54,000 --> 00:20:57,000 >> Para cablear en realidad esta representación gráfica 388 00:20:57,000 --> 00:21:00,000 y su código es muy, muy simple. 389 00:21:00,000 --> 00:21:03,000 Si desea adjuntar un IBOutlet, todo lo que tienes que hacer es controlar click, 390 00:21:03,000 --> 00:21:05,000 y vamos a ver un ejemplo de esto muy rápido. 391 00:21:05,000 --> 00:21:07,000 Usted controla click donde dice View Controller. 392 00:21:07,000 --> 00:21:09,000 Usted va a arrastrar a la interfaz, o por el contrario, 393 00:21:09,000 --> 00:21:13,000 si desea conectar un controlador de eventos que va a arrastrar desde la interfaz 394 00:21:13,000 --> 00:21:15,000 en la otra dirección. 395 00:21:15,000 --> 00:21:20,000 Echemos un vistazo a un ejemplo iOS realmente simple. 396 00:21:20,000 --> 00:21:23,000 >> Vamos a crear un nuevo proyecto. 397 00:21:23,000 --> 00:21:25,000 Voy a venir aquí a la aplicación, 398 00:21:25,000 --> 00:21:28,000 y yo voy a haga clic en Aplicación de vista simple. 399 00:21:28,000 --> 00:21:31,000 Voy a hacer clic en Siguiente. Voy a dar mi proyecto un nombre. 400 00:21:31,000 --> 00:21:33,000 Voy a llamar Hola. 401 00:21:33,000 --> 00:21:36,000 Curiosamente, Apple da por hecho que va a crear un producto 402 00:21:36,000 --> 00:21:38,000 de modo que usted puede vender y que pueden ganar dinero. 403 00:21:38,000 --> 00:21:41,000 Aquí abajo os voy a decir que se trata de una aplicación para el iPhone. 404 00:21:41,000 --> 00:21:44,000 Puede crear una aplicación para el iPad, o si desea crear una de esas aplicaciones 405 00:21:44,000 --> 00:21:47,000 que soporta tanto dispositivos que usted puede hacer eso también. 406 00:21:47,000 --> 00:21:49,000 Esto es lo que usted quiere que sus marcas de verificación para que parezca. 407 00:21:49,000 --> 00:21:51,000 >> Usted desea utilizar guiones gráficos, que veremos más adelante, 408 00:21:51,000 --> 00:21:54,000 y que debe de utilizar el recuento de referencias automática, 409 00:21:54,000 --> 00:21:58,000 que es una buena característica que le impide tener que decir malloc y libre. 410 00:21:58,000 --> 00:22:03,000 A menos que quieras llamar malloc y libre, me deja seleccionada. 411 00:22:03,000 --> 00:22:07,000 Voy a hacer clic en Siguiente y, por último, este me va a preguntar dónde desea guardarlo. 412 00:22:07,000 --> 00:22:14,000 Voy a golpear crear, y aquí vamos. 413 00:22:14,000 --> 00:22:16,000 He creado un nuevo proyecto. 414 00:22:16,000 --> 00:22:19,000 Por aquí a la izquierda están todos los archivos que hay dentro de mi proyecto, 415 00:22:19,000 --> 00:22:22,000 y note que tengo un montón, y yo ni siquiera hacer nada. 416 00:22:22,000 --> 00:22:24,000 IOS es grande. 417 00:22:24,000 --> 00:22:27,000 >> Por ejemplo, aquí esta ViewController.h, 418 00:22:27,000 --> 00:22:30,000 esto va a representar a mi controlador de vista en primer lugar, 419 00:22:30,000 --> 00:22:32,000 por lo que la primera pantalla dentro de mi app. 420 00:22:32,000 --> 00:22:34,000 Ahora sabemos lo que esto está diciendo. 421 00:22:34,000 --> 00:22:36,000 Estamos diciendo que estoy llamando a este ViewController clase, 422 00:22:36,000 --> 00:22:40,000 y un ViewController hace todo lo que hace un UIViewController, 423 00:22:40,000 --> 00:22:43,000 y esto, de nuevo, es una clase que Apple escribió que hace un montón de cosas útiles para nosotros 424 00:22:43,000 --> 00:22:46,000 gustaría mostrar la pantalla. 425 00:22:46,000 --> 00:22:50,000 Aquí es donde realmente puede empezar a definir lo que mi controlador de vista hace, 426 00:22:50,000 --> 00:22:52,000 y resulta que yo realmente no necesita nada de esto. 427 00:22:52,000 --> 00:22:55,000 Esto es código repetitivo que Apple me da de forma gratuita. 428 00:22:55,000 --> 00:22:59,000 Me hacía falta esa primera línea, o no tengo una clase, 429 00:22:59,000 --> 00:23:02,000 para que podamos deshacernos de eso y librarse de esto. 430 00:23:02,000 --> 00:23:05,000 Bien, esta es mi pantalla en blanco. 431 00:23:05,000 --> 00:23:08,000 >> Ahora vamos a hacer clic en este MainStoryboard.storyboard, 432 00:23:08,000 --> 00:23:11,000 y aquí es donde empieza a ponerse interesante. 433 00:23:11,000 --> 00:23:14,000 Esto representa la primera pantalla en mi aplicación. 434 00:23:14,000 --> 00:23:17,000 Si desea agregar un botón, en HTML que tuve que crear una etiqueta de botón. 435 00:23:17,000 --> 00:23:20,000 En Android tienes que crear una etiqueta de botón, 436 00:23:20,000 --> 00:23:23,000 pero en iOS si sólo vienen aquí a la esquina inferior derecha 437 00:23:23,000 --> 00:23:27,000 y si hago clic en esta tercera aquí donde dice objetos, 438 00:23:27,000 --> 00:23:31,000 y que puede desplazarse hacia abajo, o puedo iniciar la búsqueda de botón. 439 00:23:31,000 --> 00:23:35,000 Y mira, un botón, así que si realmente arrastrar y soltar esta ahí, 440 00:23:35,000 --> 00:23:38,000 He añadido un botón para esta pantalla de mi app. 441 00:23:38,000 --> 00:23:41,000 Si quiero cambiar el texto, puede hacer doble clic en él, 442 00:23:41,000 --> 00:23:47,000 decir algo tentador como "Press me". 443 00:23:47,000 --> 00:23:51,000 Bien, ahora si me quedo esta aplicación, por lo que compilarlo, 444 00:23:51,000 --> 00:23:54,000 por lo que para ejecutar hago clic en el botón de reproducción en la parte superior izquierda, y ahí está mi aplicación. 445 00:23:54,000 --> 00:23:58,000 Yo no he hecho nada, y me dieron un dulce mirar aplicación iPhone. 446 00:23:58,000 --> 00:24:01,000 Si quiero pararlo, puede hacer clic en el botón de parada 447 00:24:01,000 --> 00:24:03,000 porque es más divertido. 448 00:24:03,000 --> 00:24:07,000 >> Digamos que yo realmente quiero que pase algo al pulsar este botón. 449 00:24:07,000 --> 00:24:09,000 Para hacer eso lo que tengo que hacer es lo que necesito para crear 450 00:24:09,000 --> 00:24:13,000 un nuevo controlador de eventos o una acción. 451 00:24:13,000 --> 00:24:16,000 Eso significa que tengo que crear algún método que yo quiero ser llamado 452 00:24:16,000 --> 00:24:18,000 cuando se presiona el botón, así que vamos a crear un nuevo método. 453 00:24:18,000 --> 00:24:20,000 Yo estoy dentro de ViewController.h. 454 00:24:20,000 --> 00:24:22,000 Tengo que decir que existe un método. 455 00:24:22,000 --> 00:24:26,000 Necesito un guión primero, porque voy a estar llamando a esto en el controlador de vista. 456 00:24:26,000 --> 00:24:28,000 Tengo que dar a este un tipo. 457 00:24:28,000 --> 00:24:31,000 El tipo de este va a ser esa cosa IBAction que hemos visto anteriormente. 458 00:24:31,000 --> 00:24:35,000 Se trata de un controlador de eventos, por lo que va a devolver un IBAction, 459 00:24:35,000 --> 00:24:38,000 y esto es un indicio para XCode decir que 460 00:24:38,000 --> 00:24:40,000 esto es algo que quiero conectar algo. 461 00:24:40,000 --> 00:24:45,000 Puedo darle un nombre, como punto y coma buttonPressed,. 462 00:24:45,000 --> 00:24:48,000 >> Ahora he declarado un nuevo método dentro de la clase. 463 00:24:48,000 --> 00:24:50,000 Lo he dicho método tiene que existir. 464 00:24:50,000 --> 00:24:53,000 Ahora vamos a entrar en ViewController.m, 465 00:24:53,000 --> 00:24:56,000 y digamos que lo que este método puede hacer. 466 00:24:56,000 --> 00:25:03,000 Si me pongo a escribir, por ejemplo, (void) buttonPressed 467 00:25:03,000 --> 00:25:06,000 Aviso XCode es realmente agradable y completa automáticamente para mí. 468 00:25:06,000 --> 00:25:09,000 Eso es realmente maravilloso. 469 00:25:09,000 --> 00:25:12,000 Nótese aquí que dentro del archivo. M También puedo decir nula, 470 00:25:12,000 --> 00:25:15,000 y esto se debe a que IBAction no es realmente un tipo. 471 00:25:15,000 --> 00:25:19,000 De hecho, es hashtag definido en alguna parte que un vacío, 472 00:25:19,000 --> 00:25:22,000 y de nuevo, esto es sólo una sugerencia para XCode que dice 473 00:25:22,000 --> 00:25:25,000 Yo quiero que esto sea un controlador de eventos, y vamos a ver por qué en tan sólo un segundo. 474 00:25:25,000 --> 00:25:28,000 Cuando se pulsa este botón Voy a hacer algo molesto 475 00:25:28,000 --> 00:25:30,000 desea mostrar una ventana emergente. 476 00:25:30,000 --> 00:25:35,000 >> Para que yo pueda crear una nueva instancia de esta clase llamada UIAlertView, 477 00:25:35,000 --> 00:25:39,000 y esta es una clase que Apple escribió que va a mostrar popups molestos. 478 00:25:39,000 --> 00:25:43,000 Llamaremos a esta alerta emergente, y tengo 2 pasos, recuerda, a la creación de este objeto. 479 00:25:43,000 --> 00:25:46,000 Lo primero que hay que hacer es asignar el espacio. 480 00:25:46,000 --> 00:25:48,000 Quiero un UIAlertView. 481 00:25:48,000 --> 00:25:51,000 Quiero asignar espacio. Ese es mi primer método. 482 00:25:51,000 --> 00:25:53,000 Mi método siguiente es que quiero ser inicializada, 483 00:25:53,000 --> 00:25:58,000 y por lo que tengo este método grande y larga llamada initWithTitle. 484 00:25:58,000 --> 00:26:01,000 Eso es básicamente lo que va a controlar esta emergente dice. 485 00:26:01,000 --> 00:26:04,000 El título de mi ventana emergente se puede saludar. 486 00:26:04,000 --> 00:26:08,000 El mensaje de esta ventana emergente puede estar "Esta es iOS." 487 00:26:08,000 --> 00:26:10,000 Lo Delegado, no sé qué es eso. 488 00:26:10,000 --> 00:26:13,000 Digamos que no es nada. 489 00:26:13,000 --> 00:26:18,000 Ahora el botón que va a aparecer puede decir algo así como "Claro que lo es", 490 00:26:18,000 --> 00:26:24,000 y yo realmente no quiero ningún otro botón, así que vamos a borrar eso y cerrar el paréntesis. 491 00:26:24,000 --> 00:26:27,000 >> Bueno, he creado uno extra. Ahí vamos. 492 00:26:27,000 --> 00:26:30,000 Así es como puedo crear una nueva ventana emergente. 493 00:26:30,000 --> 00:26:35,000 Si desea mostrar la ventana emergente en realidad quiero llamar al método show. 494 00:26:35,000 --> 00:26:38,000 Para hacer lo que puedo decir de alerta y mostrar, 495 00:26:38,000 --> 00:26:40,000 y otra vez, autocomplete era súper agradable. 496 00:26:40,000 --> 00:26:42,000 Si me olvidé de lo que era, si me acaba de escribir en s, 497 00:26:42,000 --> 00:26:45,000 Puedo recorrer aquí para saber lo que era, 498 00:26:45,000 --> 00:26:48,000 y se filtra muy bien. 499 00:26:48,000 --> 00:26:52,000 Ahora he creado esta nueva ventana emergente. 500 00:26:52,000 --> 00:26:55,000 Volveremos a lo que significa delegado después, 501 00:26:55,000 --> 00:26:58,000 y ahora quiero decir que quiero a este método para ser despedido 502 00:26:58,000 --> 00:27:01,000 cuando se presiona el botón, así que voy a volver a mi storyboard, 503 00:27:01,000 --> 00:27:04,000 y quiero fijar ahora esta IBAction. 504 00:27:04,000 --> 00:27:06,000 Lo primero que quiero hacer es hacer clic en el botón. 505 00:27:06,000 --> 00:27:08,000 Al pulsar este botón, quiero que pase algo. 506 00:27:08,000 --> 00:27:10,000 Yo no voy a mantener pulsada la tecla Control. 507 00:27:10,000 --> 00:27:13,000 Voy a hacer clic y arrastrar con el botón 508 00:27:13,000 --> 00:27:15,000 para acá donde dice View Controller. 509 00:27:15,000 --> 00:27:17,000 Podemos ver que bien se enciende. 510 00:27:17,000 --> 00:27:22,000 >> Si te dejo ir con mi ratón ahora tengo esa ventana por aquí donde tengo algunas opciones. 511 00:27:22,000 --> 00:27:24,000 Uno de ellos son los eventos que pueden registrarse. 512 00:27:24,000 --> 00:27:28,000 Estos son todos los métodos declarados yo en mi archivo como IBActions h. 513 00:27:28,000 --> 00:27:31,000 Así es como XCode sabe lo que debe aparecer en esta lista poco, 514 00:27:31,000 --> 00:27:33,000 así que eso es sólo una sugerencia. 515 00:27:33,000 --> 00:27:37,000 Si hago clic en el botón presionado, ahora he registrado el controlador de eventos. 516 00:27:37,000 --> 00:27:41,000 En JavaScript tuvimos que decir que tengo algo de código que registra el controlador de eventos. 517 00:27:41,000 --> 00:27:43,000 En Objective-C es realmente tan fácil. 518 00:27:43,000 --> 00:27:46,000 Si me encuentro de nuevo 519 00:27:46,000 --> 00:27:49,000 Ahora al pulsar el botón de mi controlador de eventos se va a despedir, 520 00:27:49,000 --> 00:27:51,000 y me voy a poner esta emergente. 521 00:27:51,000 --> 00:27:54,000 Super, super simple allí. 522 00:27:54,000 --> 00:27:57,000 >> Si alguna vez quieres ver todos los eventos que están registrados 523 00:27:57,000 --> 00:28:00,000 en un componente si hago clic en este botón 524 00:28:00,000 --> 00:28:02,000 y vengo aquí a la derecha 525 00:28:02,000 --> 00:28:05,000 primero que puedes ver aquí lo que puedo hacer cosas como el tipo de botón, 526 00:28:05,000 --> 00:28:08,000 así que si quieres uno de esos yoes o el botón de Agregar contacto 527 00:28:08,000 --> 00:28:10,000 o lo que sea. 528 00:28:10,000 --> 00:28:13,000 Si desea ver todos los eventos que están en este botón 529 00:28:13,000 --> 00:28:16,000 si yo voy todo el camino hasta aquí a la derecha 530 00:28:16,000 --> 00:28:19,000 podemos ver aquí en los eventos que tienen todos estos eventos. 531 00:28:19,000 --> 00:28:23,000 Me puede presionar el botón, cuando me soltó el botón, cuando hago doble toque o lo que sea, 532 00:28:23,000 --> 00:28:26,000 y el que me acabo de registrar este evento es llamado Touch Up Inside, 533 00:28:26,000 --> 00:28:29,000 y este dice que tan pronto como mi dedo sale el botón 534 00:28:29,000 --> 00:28:32,000 ese evento va a fuego, y eso es exactamente lo que acaba de suceder. 535 00:28:32,000 --> 00:28:36,000 Este es el tipo de evento de botón predeterminado presionado. 536 00:28:36,000 --> 00:28:39,000 >> Cualquier pregunta hasta ahora? 537 00:28:39,000 --> 00:28:43,000 Bueno, así es como podemos empezar a cablear las cosas en nuestro código 538 00:28:43,000 --> 00:28:46,000 en las cosas dentro de nuestra interfaz. 539 00:28:46,000 --> 00:28:49,000 Recuerde que lo primero que tenía que hacer era encontrar el código, 540 00:28:49,000 --> 00:28:54,000 y luego hasta el cable de interfaz al código, 541 00:28:54,000 --> 00:28:57,000 y ahí está nuestra primera aplicación. 542 00:28:57,000 --> 00:29:00,000 Bien, eso fue realmente genial, y hemos creado este botón. 543 00:29:00,000 --> 00:29:03,000 ¿Y si no lo hacemos quiero tener que crear un montón de propiedades 544 00:29:03,000 --> 00:29:05,000 representando estos botones? 545 00:29:05,000 --> 00:29:08,000 Por ejemplo, en Tic Tac Toe Tengo 9 botones, 546 00:29:08,000 --> 00:29:11,000 y que sería super, súper molesto tener que arrastrar y soltar 9 veces 547 00:29:11,000 --> 00:29:14,000 o si tuviera que hacer tres en raya con 81 en lugar de 9 548 00:29:14,000 --> 00:29:17,000 y tuve que arrastrar y soltar 81 veces, y eso es cojo. 549 00:29:17,000 --> 00:29:20,000 Lo que podemos hacer en su lugar es como un HTML 550 00:29:20,000 --> 00:29:23,000 cuando teníamos cosas como identificadores y nombres y podemos buscar las cosas 551 00:29:23,000 --> 00:29:27,000 por su ID, hay un concepto similar en iOS llamadas etiquetas. 552 00:29:27,000 --> 00:29:31,000 >> Una etiqueta es simplemente un identificador numérico único para un componente. 553 00:29:31,000 --> 00:29:34,000 Si digo esto tiene una etiqueta de 0, por ejemplo, 554 00:29:34,000 --> 00:29:38,000 si creo un botón y darle una etiqueta de 0, y vamos a ver cómo hacer eso en un segundo, 555 00:29:38,000 --> 00:29:41,000 si quiere conseguir que el botón que se puede decir simplemente quiero llamar 556 00:29:41,000 --> 00:29:45,000 la, viewWithTag método en el objeto aquí 557 00:29:45,000 --> 00:29:48,000 la self.view, que representa la pantalla actual, por ejemplo. 558 00:29:48,000 --> 00:29:53,000 Si llamo a ese método viewWithTag, me voy a tirar del botón con la etiqueta 0. 559 00:29:53,000 --> 00:29:58,000 Vamos a echar un vistazo a este edificio por Tic Tac Toe. 560 00:29:58,000 --> 00:30:01,000 En primer lugar, este es mi storyboard. 561 00:30:01,000 --> 00:30:05,000 He creado estos 10 botones de interfaz de usuario. 562 00:30:05,000 --> 00:30:07,000 Tenga en cuenta que son todos del mismo tamaño. 563 00:30:07,000 --> 00:30:11,000 Si hago clic en uno de estos y vuelvo por aquí en este lado derecho 564 00:30:11,000 --> 00:30:15,000 verás que ajustar el tipo de letra aquí, así que hice la fuente un poco más grande, 565 00:30:15,000 --> 00:30:19,000 pero lo que yo también hice fue establecer esta etiqueta. 566 00:30:19,000 --> 00:30:23,000 Le dije que esto tiene una etiqueta de 1, y esa es la parte superior izquierda. 567 00:30:23,000 --> 00:30:26,000 >> Ahora bien, si hago clic en otro botón, como este segundo aquí, 568 00:30:26,000 --> 00:30:29,000 ahora vas a ver que mi etiqueta es 2. 569 00:30:29,000 --> 00:30:32,000 Cada uno de estos botones sólo tiene una etiqueta única, 570 00:30:32,000 --> 00:30:35,000 por lo que esta tarde se como voy a empezar a interactuar 571 00:30:35,000 --> 00:30:38,000 con mi aplicación. 572 00:30:38,000 --> 00:30:40,000 Todo esto está dentro de un controlador de vista, 573 00:30:40,000 --> 00:30:42,000 pero esto es lo que tenemos. 574 00:30:42,000 --> 00:30:44,000 Tenemos 3 propiedades aquí. 575 00:30:44,000 --> 00:30:49,000 El primero y el último se va a representar el estado de mi tabla. 576 00:30:49,000 --> 00:30:53,000 Básicamente, este primero es una matriz que representa en la Xs y Os lo son. 577 00:30:53,000 --> 00:30:57,000 Este otro aquí nos dice a quién le toca. 578 00:30:57,000 --> 00:31:01,000 Se dará cuenta de que yo también tengo esas cosas aquí. 579 00:31:01,000 --> 00:31:05,000 Antes, cuando declaramos propiedades que les dio un nombre y un tipo. 580 00:31:05,000 --> 00:31:08,000 También se les puede dar alguna información adicional aquí. 581 00:31:08,000 --> 00:31:11,000 La primera dice que no atómica, y lo que dice este 582 00:31:11,000 --> 00:31:16,000 es, básicamente, una sola cosa cada vez se intenta acceder a esta variable a la vez. 583 00:31:16,000 --> 00:31:19,000 Usted podría hacer aplicaciones más complejas que son multi-hilo, 584 00:31:19,000 --> 00:31:22,000 y así de nuevo en Scratch teníamos diferentes hilos, 585 00:31:22,000 --> 00:31:25,000 y sprites diferentes podrían estar haciendo cosas diferentes al mismo tiempo. 586 00:31:25,000 --> 00:31:29,000 >> Si ese no es el caso, lo cual no es nada de lo que vamos a estar mirando, 587 00:31:29,000 --> 00:31:33,000 si decimos que no atómica en realidad va a hacer las cosas un poco más rápido. 588 00:31:33,000 --> 00:31:37,000 También tenemos esta cosa llamada asignación, fuerte o débil. 589 00:31:37,000 --> 00:31:40,000 Esta asignar sólo dice que se trata de un modelo estándar. 590 00:31:40,000 --> 00:31:43,000 Esto no es un objeto o un puntero, porque esto es sólo un bool, 591 00:31:43,000 --> 00:31:46,000 así bool está integrado en Objective-C. 592 00:31:46,000 --> 00:31:49,000 Este dice que no se trata de hacer algo de fantasía con punteros aquí. 593 00:31:49,000 --> 00:31:51,000 Es un habitual escalador de edad. 594 00:31:51,000 --> 00:31:54,000 Fuerte y débil, tan débil dice que en realidad 595 00:31:54,000 --> 00:31:57,000 Quiero que esto se apunta a algo en el controlador de vista. 596 00:31:57,000 --> 00:32:00,000 Yo no voy a asignar init real o yo mismo. 597 00:32:00,000 --> 00:32:04,000 El constructor de interfaz, al ejecutar la aplicación, se va a manejar todo lo que la inicialización. 598 00:32:04,000 --> 00:32:07,000 Si digo débil, que dice que alguien más va a ser la creación de este. 599 00:32:07,000 --> 00:32:09,000 Si digo fuerte, esto dice que yo voy a ser el que 600 00:32:09,000 --> 00:32:12,000 que está creando este objeto bordo, 601 00:32:12,000 --> 00:32:14,000 y aquí tengo algunos otros métodos aquí, 602 00:32:14,000 --> 00:32:18,000 por ejemplo, una acción para cuando el botón se pulsa nuevo juego, 603 00:32:18,000 --> 00:32:20,000 una acción de cuando cualquiera de los otros botones se presionan, 604 00:32:20,000 --> 00:32:23,000 y etcétera. 605 00:32:23,000 --> 00:32:26,000 >> No vamos a entrar en demasiado de la lógica de Tic Tac Toe, 606 00:32:26,000 --> 00:32:30,000 aunque es muy emocionante, pero vamos a echar un vistazo a 607 00:32:30,000 --> 00:32:33,000 algunas de las cosas que podemos hacer dentro de iOS. 608 00:32:33,000 --> 00:32:35,000 Este método nuevo juego va a ser despedido 609 00:32:35,000 --> 00:32:37,000 cada vez que pulse el botón de nuevo juego. 610 00:32:37,000 --> 00:32:41,000 Para conectar hasta que yo simplemente venir a mi storyboard. 611 00:32:41,000 --> 00:32:43,000 He hecho clic en nuevo juego. 612 00:32:43,000 --> 00:32:47,000 Si vengo aquí a la derecha puedo ver que 613 00:32:47,000 --> 00:32:50,000 Toque en el interior está conectado con el método newGame. 614 00:32:50,000 --> 00:32:53,000 Es por eso que esto va a ser despedido. 615 00:32:53,000 --> 00:32:56,000 El método newGame va a hacer un poco de puesta a punto. 616 00:32:56,000 --> 00:32:59,000 Va a decir que quiero que borrar el estado de la junta. 617 00:32:59,000 --> 00:33:01,000 Este es un buen método de matrices mutables. 618 00:33:01,000 --> 00:33:03,000 Esto va a decir ahora es el turno de X, 619 00:33:03,000 --> 00:33:07,000 y ahora me voy a tomar ventaja de esto viewWithTag. 620 00:33:07,000 --> 00:33:11,000 >> Sé que mis botones tienen las etiquetas 1-9, 621 00:33:11,000 --> 00:33:13,000 y eso es algo que arbitrariamente elegido. 622 00:33:13,000 --> 00:33:15,000 Si desea ajustar el texto de cada botón que está vacío 623 00:33:15,000 --> 00:33:17,000 porque acabo de empezar un nuevo juego y yo no quiero 624 00:33:17,000 --> 00:33:20,000 Os X o quedarse más de lo que puedo hacer esto. 625 00:33:20,000 --> 00:33:24,000 Puedo decir que desea que la vista con la etiqueta, 1, 2, 3, 4 et cetera. 626 00:33:24,000 --> 00:33:27,000 Esto hará que un botón diferente cada vez. 627 00:33:27,000 --> 00:33:30,000 Aquí me voy a echar a UIButton. 628 00:33:30,000 --> 00:33:33,000 Al igual que podríamos echar a ints carrozas y viceversa 629 00:33:33,000 --> 00:33:37,000 esto dice que me quiere echar a un UIButton. 630 00:33:37,000 --> 00:33:40,000 Eso significa que el tipo de este será un * UIButton 631 00:33:40,000 --> 00:33:43,000 porque de punteros, pero no te preocupes, no es miedo nunca más. 632 00:33:43,000 --> 00:33:47,000 >> Una vez que tengo este botón Voy a llamar a un método en él. 633 00:33:47,000 --> 00:33:50,000 Este método se llama setTitle forState, y así lo dice 634 00:33:50,000 --> 00:33:53,000 Quiero configurar el texto del botón a ser la cadena vacía, 635 00:33:53,000 --> 00:33:57,000 y yo quiero que sea una cadena vacía cuando no está presionado. 636 00:33:57,000 --> 00:34:01,000 Si estoy usando este método, puede cambiar el texto del botón 637 00:34:01,000 --> 00:34:04,000 tan pronto como alguien lo golpea, pero queremos decir cuando el botón está allí sentado 638 00:34:04,000 --> 00:34:07,000 Quiero que el texto en blanco. 639 00:34:07,000 --> 00:34:10,000 Por último, vamos a iniciar mi tabla, 640 00:34:10,000 --> 00:34:12,000 y yo voy a decir que todo está en 0, 641 00:34:12,000 --> 00:34:15,000 por lo que este los miembros del consejo inmutable es una matriz mutable, 642 00:34:15,000 --> 00:34:21,000 lo que significa que puede llamar al método AddObject y un interior 0 de él. 643 00:34:21,000 --> 00:34:23,000 Eso es lo que ocurre cuando se crea una nueva partida. 644 00:34:23,000 --> 00:34:25,000 >> Echemos un vistazo a otro. 645 00:34:25,000 --> 00:34:28,000 Este método aquí es la IBAction que va a ser presionado 646 00:34:28,000 --> 00:34:31,000 cada vez que uno de esos cuadrados se presiona. 647 00:34:31,000 --> 00:34:33,000 Ahora tenemos algo de lógica Tic Tac Toe aquí. 648 00:34:33,000 --> 00:34:36,000 Hemos de averiguar quién le toca, 649 00:34:36,000 --> 00:34:39,000 y sobre la base de que, o bien establecer una X o una O, 650 00:34:39,000 --> 00:34:43,000 pero nos damos cuenta de que estamos reutilizando el mismo controlador de eventos 651 00:34:43,000 --> 00:34:45,000 para cada uno de esos botones. 652 00:34:45,000 --> 00:34:49,000 Esto significa que no tienen un método para el botón de arriba a la izquierda, 653 00:34:49,000 --> 00:34:52,000 un método diferente para el botón de abajo a la derecha, a pesar de que podría haber hecho. 654 00:34:52,000 --> 00:34:54,000 Eso no sería realmente un buen diseño. 655 00:34:54,000 --> 00:34:57,000 Lo que estoy haciendo aquí es que estoy realmente va a determinar 656 00:34:57,000 --> 00:35:00,000 lo que la etiqueta del botón que se ha pulsado es. 657 00:35:00,000 --> 00:35:04,000 Te das cuenta de que este método de reproducción toma un argumento. 658 00:35:04,000 --> 00:35:07,000 Se llama remitente, remitente y lo que se está remitente va a 659 00:35:07,000 --> 00:35:10,000 representar exactamente lo que se tomó acción sobre. 660 00:35:10,000 --> 00:35:15,000 Si se presiona un botón, este remitente va a ser que UIButton 661 00:35:15,000 --> 00:35:18,000 que realmente presionado, lo que significa que esa UIButton 662 00:35:18,000 --> 00:35:20,000 tiene una etiqueta porque he creado una etiqueta. 663 00:35:20,000 --> 00:35:23,000 >> Si quiero llegar a la etiqueta simplemente puedo decir 664 00:35:23,000 --> 00:35:26,000 Quiero que la etiqueta del remitente, 665 00:35:26,000 --> 00:35:28,000 y de nuevo, acabo de casted a una UIButton. 666 00:35:28,000 --> 00:35:32,000 Me he enterado de que el remitente será un UIButton. 667 00:35:32,000 --> 00:35:34,000 No siempre tiene que ser un UIButton. 668 00:35:34,000 --> 00:35:36,000 Podría, por ejemplo, registrar el mismo controlador de eventos 669 00:35:36,000 --> 00:35:38,000  para un para un botón, una para un control deslizante. 670 00:35:38,000 --> 00:35:40,000 En este caso, sé que están todos los botones, así que voy a decir 671 00:35:40,000 --> 00:35:43,000 Yo quiero que esto sea un botón, y entonces puedo obtener la etiqueta, 672 00:35:43,000 --> 00:35:48,000 y de la etiqueta que ahora sé donde estoy dentro de la tabla. 673 00:35:48,000 --> 00:35:51,000 Entonces sólo tiene que fijar bien la X o en la O, puede voltear la vez, 674 00:35:51,000 --> 00:35:54,000 comprobar que ha ganado, etcétera. 675 00:35:54,000 --> 00:35:59,000 >> ¿Tiene preguntas sobre esto hasta ahora? 676 00:35:59,000 --> 00:36:02,000 Bueno, todo el código que publican en línea-no quiero entrar en demasiado 677 00:36:02,000 --> 00:36:06,000 de la lógica del dedo del pie de Tic Tac, pero ahora se puede ver que realmente 678 00:36:06,000 --> 00:36:09,000 todo lo que estamos haciendo es que estamos recorrer este array, 679 00:36:09,000 --> 00:36:13,000 así que tenemos un par de bucles para aquí, y estamos comparando para ver 680 00:36:13,000 --> 00:36:18,000 tenemos un partido en todas las filas, un partido en una columna o algo así. 681 00:36:18,000 --> 00:36:21,000 Para ejecutar esta aplicación en realidad, si me toca en uno de estos botones 682 00:36:21,000 --> 00:36:24,000 que el método de juego fue despedido, lo que significa que acaba de establecer 683 00:36:24,000 --> 00:36:31,000 el botón para ser un X, por lo que ahora este botón será un O, y así sucesivamente, 684 00:36:31,000 --> 00:36:35,000 y así es como estamos empezando a interactuar con esta aplicación única página. 685 00:36:35,000 --> 00:36:38,000 >> Vamos a publicar el código, así que siéntase libre para leer que, 686 00:36:38,000 --> 00:36:43,000 pero ahora vamos a hablar de algunas aplicaciones que son algo más que una página. 687 00:36:43,000 --> 00:36:47,000 Tan emocionante como Tic Tac Toe fue, un montón de aplicaciones dentro de iOS 688 00:36:47,000 --> 00:36:50,000 son una especie de estos drill down cosas con múltiples pantallas. 689 00:36:50,000 --> 00:36:54,000 El primer concepto que tendremos que hablar son los protocolos, 690 00:36:54,000 --> 00:36:57,000 y un protocolo es simplemente un conjunto de métodos 691 00:36:57,000 --> 00:36:59,000 que te puedo prometer de definir. 692 00:36:59,000 --> 00:37:02,000 Si creo este nuevo protocolo con 2 métodos, este primero, 693 00:37:02,000 --> 00:37:05,000 si el tipo de retorno es nulo, lo llamé foo. 694 00:37:05,000 --> 00:37:07,000 Esto no tiene argumentos. Tengo otro método. 695 00:37:07,000 --> 00:37:11,000 Se devuelve un int. Llamé Bar, y se necesita un argumento. 696 00:37:11,000 --> 00:37:14,000 Todo este protocolo es que se llama SomeProtocol aquí, 697 00:37:14,000 --> 00:37:19,000 Este es un conjunto de cosas que alguien puede implementar. 698 00:37:19,000 --> 00:37:22,000 No he dentro de este protocolo, dijo que foo hace. 699 00:37:22,000 --> 00:37:26,000 En su lugar, sólo estoy diciendo que podríamos definir foo si así lo desea. 700 00:37:26,000 --> 00:37:30,000 Si yo estoy creando un controlador de vista o la creación de una clase 701 00:37:30,000 --> 00:37:33,000 Yo interior puede de esa promesa clase para implementar 702 00:37:33,000 --> 00:37:40,000 algunos de estos métodos, así que por ejemplo, si decir 703 00:37:40,000 --> 00:37:43,000 esto ahora dice que estoy haciendo una promesa a usted que dentro de 704 00:37:43,000 --> 00:37:50,000 de esta clase de controlador de vista voy a tener definiciones para ambos foo y bar. 705 00:37:50,000 --> 00:37:52,000 >> ¿Por qué es útil? 706 00:37:52,000 --> 00:37:55,000 Una gran cantidad de componentes internos de iOS aprovechar esta 707 00:37:55,000 --> 00:37:58,000 patrón de diseño llamado delegación, y lo que dice la delegación 708 00:37:58,000 --> 00:38:01,000 es que, por ejemplo, si tengo un cuadro de texto 709 00:38:01,000 --> 00:38:04,000 y hay algunos hechos que podrían ser registrados dentro de mi caja de texto, 710 00:38:04,000 --> 00:38:07,000 en lugar de crear eventos separados lo que puedo hacer es lo que puedo decir 711 00:38:07,000 --> 00:38:10,000 el delegado de esta caja de texto será de algún objeto. 712 00:38:10,000 --> 00:38:13,000 Cuando digo que esto es un delegado que significa que ahora 713 00:38:13,000 --> 00:38:16,000 siempre que algún suceso habría sido despedido en el cuadro de texto 714 00:38:16,000 --> 00:38:18,000 en lugar de tener que registrarlo ni nada de eso 715 00:38:18,000 --> 00:38:21,000 que sólo va a llamar a un método en el delegado. 716 00:38:21,000 --> 00:38:24,000 Por ejemplo, en el interior de mi caja de texto tengo un método para cuando pulso 717 00:38:24,000 --> 00:38:27,000 que realiza botón en la parte inferior derecha, 718 00:38:27,000 --> 00:38:30,000 por lo que en lugar de registrar controlador de eventos lo que puedo decir es 719 00:38:30,000 --> 00:38:34,000 cuadro de texto, aquí es un objeto que quiero que llamar a un método en 720 00:38:34,000 --> 00:38:37,000 cada vez que alguien presiona el botón Aceptar, 721 00:38:37,000 --> 00:38:40,000 y eso significa que ese objeto tiene que implementar algún protocolo 722 00:38:40,000 --> 00:38:45,000 que dice que me comprometo a definir que la acción del botón hecho, 723 00:38:45,000 --> 00:38:47,000 porque si no define ese método y pulse Hecho, 724 00:38:47,000 --> 00:38:49,000 entonces va a ser confuso. 725 00:38:49,000 --> 00:38:55,000 >> Echemos un vistazo a un ejemplo. 726 00:38:55,000 --> 00:38:58,000 Aquí sólo tengo un cuadro de texto, 727 00:38:58,000 --> 00:39:04,000 y una de las propiedades de esta caja de texto de acá de este lado derecho es el delegado. 728 00:39:04,000 --> 00:39:06,000 Esta es una propiedad de la clase. 729 00:39:06,000 --> 00:39:09,000 Lo que he hecho aquí es que el control se hace clic, y arrastrar desde este punto de aquí 730 00:39:09,000 --> 00:39:13,000 para el controlador de vista, y eso dice ahora el delegado de esta caja de texto 731 00:39:13,000 --> 00:39:18,000 va a ser el controlador de vista. 732 00:39:18,000 --> 00:39:20,000 Esto significa que cuando algunas acciones ocurren, en lugar de registrar 733 00:39:20,000 --> 00:39:25,000 manejadores de eventos independientes que quieren que les envíe al delegado. 734 00:39:25,000 --> 00:39:28,000 Ahora vamos a echar un vistazo a mi controlador de vista. 735 00:39:28,000 --> 00:39:32,000 Dentro del expediente. H He hecho una promesa. 736 00:39:32,000 --> 00:39:36,000 He prometido implementar algunos métodos dentro de este protocolo 737 00:39:36,000 --> 00:39:38,000 UITextFieldDelegate llamado, y de nuevo, 738 00:39:38,000 --> 00:39:42,000 esto es sólo una lista de algunas cosas que puedo decida implementar. 739 00:39:42,000 --> 00:39:46,000 >> Si vengo aquí en mi. M archivo, he implementado un método. 740 00:39:46,000 --> 00:39:49,000 Les he pedido que textFieldShouldReturn 741 00:39:49,000 --> 00:39:52,000 porque eso es lo que se llama dentro del protocolo. 742 00:39:52,000 --> 00:39:57,000 Y ahora cada vez que pulse el botón interior hecho de que el campo de texto 743 00:39:57,000 --> 00:40:00,000 esto es lo que va a ser llamado, por lo que no se registró un controlador de eventos. 744 00:40:00,000 --> 00:40:03,000 He conectado el delegado, y siempre que este evento se dispara 745 00:40:03,000 --> 00:40:08,000 este es el método que se llamará, por lo que si vengo aquí a mi storyboard y ejecutarlo- 746 00:40:08,000 --> 00:40:11,000 mientras que se carga podemos ver lo que hace. 747 00:40:11,000 --> 00:40:13,000 En la pantalla de mi tengo 2 cosas. 748 00:40:13,000 --> 00:40:16,000 Tengo un campo de texto, y tengo esta etiqueta. 749 00:40:16,000 --> 00:40:19,000 Simplemente estoy diciendo que desea que el texto de esta etiqueta 750 00:40:19,000 --> 00:40:23,000 a ser igual a lo que el usuario escribió en el interior del campo de texto. 751 00:40:23,000 --> 00:40:26,000 Esta línea viene aquí es simplemente un método que yo llamo 752 00:40:26,000 --> 00:40:29,000 en el campo de texto que dice que quiero que usted oculte el teclado. 753 00:40:29,000 --> 00:40:33,000 Esto es sólo el método arbitrario que Apple eligió. 754 00:40:33,000 --> 00:40:38,000 >> Una vez más, antes de que hiciera cualquier cosa que tuve que cablear todo, así que vine por primera vez aquí. 755 00:40:38,000 --> 00:40:42,000 Desde el controlador de vista que arrastrar a la caja de texto. 756 00:40:42,000 --> 00:40:46,000 Te dejo ir, y puedo ver aquí que yo puedo hacer esto propiedad text del campo 757 00:40:46,000 --> 00:40:49,000 desde aquí en el controlador de vista que he definido una propiedad 758 00:40:49,000 --> 00:40:52,000 que es un IBOutlet de un campo de texto. 759 00:40:52,000 --> 00:40:55,000 Esto dice que puedo conectar a esta propiedad hasta 760 00:40:55,000 --> 00:40:59,000 a un campo de texto en mi interfaz de usuario. 761 00:40:59,000 --> 00:41:03,000 Ahora, cuando hago clic en esto puedo empezar a escribir. 762 00:41:03,000 --> 00:41:06,000 Ahora bien, si hago clic en el botón Hecho esto va a disparar 763 00:41:06,000 --> 00:41:08,000 un evento que ahora puedo responder. 764 00:41:08,000 --> 00:41:10,000 No hay controladores de eventos. 765 00:41:10,000 --> 00:41:13,000 Así es como me acaba de responder a ese botón hecho. 766 00:41:13,000 --> 00:41:15,000 Tiene sentido? 767 00:41:15,000 --> 00:41:20,000 >> Esto no es un patrón de diseño que-que nunca podría encontrarse 768 00:41:20,000 --> 00:41:23,000 la creación de su propio protocolo, pero sólo sé que algunos 769 00:41:23,000 --> 00:41:27,000 diferentes componentes iOS registrar eventos de diferentes maneras. 770 00:41:27,000 --> 00:41:29,000 Botones, por ejemplo, utilizar los IBActions. 771 00:41:29,000 --> 00:41:32,000 Los campos de texto, por otro lado, se va a utilizar delegados. 772 00:41:32,000 --> 00:41:36,000 Podemos ver y se puede ver todo eso dentro de la documentación. 773 00:41:36,000 --> 00:41:41,000 Por cierto, en realidad hay un montón de cosas de interfaz de usuario integrada en iOS para usted, 774 00:41:41,000 --> 00:41:46,000 así por ejemplo, la forma en que dicen que hice hace en la parte inferior derecha 775 00:41:46,000 --> 00:41:48,000 se He escogido este campo de texto. 776 00:41:48,000 --> 00:41:50,000 Yo vine aquí. 777 00:41:50,000 --> 00:41:53,000 Me desplazado un poco para volver llave, 778 00:41:53,000 --> 00:41:56,000 y que en realidad se puede hacer de este un montón de cosas, como si quisiera decir que 779 00:41:56,000 --> 00:42:00,000 llamada de emergencia en lugar de eso puede hacer eso, que es totalmente al azar, 780 00:42:00,000 --> 00:42:02,000 y yo no sé por qué hay un botón de emergencia integrado en la llamada, 781 00:42:02,000 --> 00:42:06,000 pero, dice llamada de emergencia en letras muy pequeñas. 782 00:42:06,000 --> 00:42:08,000 Ahí lo tienes. 783 00:42:08,000 --> 00:42:12,000 >> Definitivamente explorar todas estas opciones diferentes en iOS. 784 00:42:12,000 --> 00:42:14,000 ¿Tiene preguntas sobre los delegados? 785 00:42:14,000 --> 00:42:18,000 Una vez más, sólo un patrón de diseño interesante que usted debe tener en cuenta. 786 00:42:18,000 --> 00:42:22,000 Bueno, vamos a echar un vistazo al lado de las vistas de tabla. 787 00:42:22,000 --> 00:42:26,000 A la vista de tabla es básicamente la lista de artículos que está por todo el lugar en iOS. 788 00:42:26,000 --> 00:42:29,000 Cuando usted está hojeando todos sus contactos, usted está buscando en 789 00:42:29,000 --> 00:42:34,000 la página de configuración, y ese tipo de lista de las cosas que se llama una vista de tabla. 790 00:42:34,000 --> 00:42:37,000 La implementación de una vista de tabla en iOS es bastante simple. 791 00:42:37,000 --> 00:42:41,000 En lugar de hacer una clase que desciende de que UIViewController 792 00:42:41,000 --> 00:42:44,000 como lo hemos hecho antes simplemente tenemos que decir más bien que 793 00:42:44,000 --> 00:42:46,000 todo lo que un UIViewController es lo que quiero hacer, 794 00:42:46,000 --> 00:42:50,000 Yo digo todo lo que un UITableViewController es lo que quiero hacer, 795 00:42:50,000 --> 00:42:54,000 de modo que se limita a añadir algunas cosas adicionales que son totalmente hecho por nosotros. 796 00:42:54,000 --> 00:42:58,000 Tenemos que hacer muy poco para cubrir básicamente los espacios en blanco dentro de la tabla. 797 00:42:58,000 --> 00:43:02,000 >> Con el fin de mostrar una tabla que tengo que responder a algunas preguntas. 798 00:43:02,000 --> 00:43:06,000 La primera pregunta que debe responder es cómo las secciones que hay en la mesa? 799 00:43:06,000 --> 00:43:08,000 Cuando usted está hojeando su aplicación contactos te darás cuenta de que es una especie de 800 00:43:08,000 --> 00:43:12,000 organizado por el As, entonces usted tiene la B, y usted tiene esa cabecera sub poco. 801 00:43:12,000 --> 00:43:14,000 Cada uno de los que se llama una sección. 802 00:43:14,000 --> 00:43:16,000 Usted puede o no puede necesitar estos. 803 00:43:16,000 --> 00:43:19,000 Lo primero que tienes que hacer es poner en práctica un método 804 00:43:19,000 --> 00:43:22,000 llamado tableView: numberOfSectionsInTableView. 805 00:43:22,000 --> 00:43:25,000 Eso simplemente devuelve cuántas secciones tiene, 806 00:43:25,000 --> 00:43:29,000 por lo que esta podría decir devolver uno si tiene una vista de tabla grande. 807 00:43:29,000 --> 00:43:33,000 La siguiente pregunta que iOS tiene que saber es cuántas filas tiene? 808 00:43:33,000 --> 00:43:36,000 Por ejemplo, usted está hojeando una vista de tabla. 809 00:43:36,000 --> 00:43:39,000 Usted tiene un número fijo de las canciones que estás viendo o un número fijo de sus contactos. 810 00:43:39,000 --> 00:43:41,000 Si eres como yo, por supuesto, no es que muchos, 811 00:43:41,000 --> 00:43:44,000 y así es como iOS sabe cuántas células que se vea. 812 00:43:44,000 --> 00:43:46,000 >> Una vez más, esto podría decir algo así vuelva 3. 813 00:43:46,000 --> 00:43:49,000 Mi opinión tabla tiene 3 filas. 814 00:43:49,000 --> 00:43:52,000 Por último, iOS tiene que saber lo que cada célula se parece, 815 00:43:52,000 --> 00:43:54,000 así que lo que en realidad va a hacer es llamar a este método aquí abajo, 816 00:43:54,000 --> 00:43:57,000 este tableView: cellForRowAtIndexPath. 817 00:43:57,000 --> 00:44:01,000 Se va a llamar a este método en cada célula dentro de la tabla. 818 00:44:01,000 --> 00:44:03,000 ¿Cómo sabe cuántas veces se lo llama? 819 00:44:03,000 --> 00:44:06,000 Bueno, lo dicho en el interior del número de filas de la sección. 820 00:44:06,000 --> 00:44:08,000 Vamos a llamar a este en cada una de nuestras células, 821 00:44:08,000 --> 00:44:11,000 y dentro de éste es donde realmente se puede hacer cosas como 822 00:44:11,000 --> 00:44:16,000 establecer el texto o le dirá qué ese pequeño botón azul en la parte derecha hace. 823 00:44:16,000 --> 00:44:19,000 El patrón para obtener estas células, vamos a utilizar este método 824 00:44:19,000 --> 00:44:22,000 llamado dequeueReusableCellWithIdentifier. 825 00:44:22,000 --> 00:44:29,000 >> Objective-C es en realidad muy conocida por la longitud de sus nombres ridículos métodos, 826 00:44:29,000 --> 00:44:32,000 y esto es realmente un buen caso en el ejemplo de punto. 827 00:44:32,000 --> 00:44:37,000 Lo que este método no se trata simplemente dice que quiero que me des una celda. 828 00:44:37,000 --> 00:44:39,000 Sólo una cosa iOS. 829 00:44:39,000 --> 00:44:41,000 Si usted tiene algo así como 100.000 canciones en su iPod 830 00:44:41,000 --> 00:44:45,000 lo que iOS no quiere hacer es asignar 100.000 células, 831 00:44:45,000 --> 00:44:48,000 porque si usted está en la parte superior de su lista, lo que realmente necesita para asignar memoria 832 00:44:48,000 --> 00:44:51,000 para la célula que es 99.000 filas hacia abajo? 833 00:44:51,000 --> 00:44:55,000 No, porque lo que te puedas desplazar tipo de asignar a medida que avanza. 834 00:44:55,000 --> 00:44:57,000 Esto se hace para usted. 835 00:44:57,000 --> 00:44:59,000 Usted no tiene que preocuparse por todas esas cosas estúpidas rendimiento. 836 00:44:59,000 --> 00:45:02,000 Todo lo que dicen es que llaman a este método dequeueReusableCellWithIdentifier, 837 00:45:02,000 --> 00:45:06,000 y esto lo dice, está bien, si es necesario voy a crear una nueva celda para usted. 838 00:45:06,000 --> 00:45:09,000 >> Pero si usted está en la parte inferior de la tabla y ya ha asignado algunas células 839 00:45:09,000 --> 00:45:12,000 en la parte superior de la tabla que no estás realmente va a necesitar en el corto plazo 840 00:45:12,000 --> 00:45:15,000 Yo te voy a dar uno de los de vuelta en lugar de asignar una nueva, 841 00:45:15,000 --> 00:45:17,000 por lo que este es un problema de funcionamiento agradable. 842 00:45:17,000 --> 00:45:21,000 Usted no tiene que asignar a las células a ti mismo. 843 00:45:21,000 --> 00:45:23,000 Eso te va a devolver una celda. 844 00:45:23,000 --> 00:45:25,000 Va a volver a usted un objeto móvil. 845 00:45:25,000 --> 00:45:28,000 Una vez que tenga el objeto de célula que puede hacer cosas para ella. 846 00:45:28,000 --> 00:45:32,000 Puede definir el texto de la celda con esta propiedad denominada etiqueta de texto. 847 00:45:32,000 --> 00:45:36,000 Usted puede agregar que la flecha de la derecha o de algún otro material azar 848 00:45:36,000 --> 00:45:41,000 con esta otra propiedad llamada accessoryType, y así sucesivamente y así sucesivamente. 849 00:45:41,000 --> 00:45:46,000 >> Vamos a echar un vistazo a la aplicación real de una vista de tabla ahora. 850 00:45:46,000 --> 00:45:49,000 Cuando creé este proyecto 851 00:45:49,000 --> 00:45:53,000 en lugar de decir la aplicación única vista que en realidad vine aquí 852 00:45:53,000 --> 00:45:57,000 de la aplicación principal-detalle, por lo que, básicamente, lo que corresponde a la aplicación de correo 853 00:45:57,000 --> 00:46:01,000 en el iPad con la vista de la tabla de la izquierda y entonces el contenido de la derecha. 854 00:46:01,000 --> 00:46:07,000 En el iPod o iPhone que esto va a corresponder a una visión única tabla. 855 00:46:07,000 --> 00:46:10,000 Ahí es donde yo tengo mi código de arranque. 856 00:46:10,000 --> 00:46:13,000 >> Primero echemos un vistazo al guión gráfico. 857 00:46:13,000 --> 00:46:15,000 Todo esto fue hecho por mí, en el fondo creado. 858 00:46:15,000 --> 00:46:18,000 Esta barra de navegación me mostró lo que una célula ejemplo podría ser similar, 859 00:46:18,000 --> 00:46:22,000 y hacer doble clic, cambie el título. 860 00:46:22,000 --> 00:46:25,000 Cualquier preocupación de IU demás que puedo manejar allí. 861 00:46:25,000 --> 00:46:27,000 El archivo de cabecera se ve muy simple. 862 00:46:27,000 --> 00:46:30,000 En lugar de decir esto es UIViewController ahora estamos diciendo que esto es una 863 00:46:30,000 --> 00:46:35,000 TableViewController, así que sabemos que queremos llamar a todos los métodos de la tabla. 864 00:46:35,000 --> 00:46:38,000 Ahora quiero crear una propiedad que va a representar 865 00:46:38,000 --> 00:46:40,000 las cosas dentro de mi mesa. 866 00:46:40,000 --> 00:46:43,000 Esta tabla se va a mostrar arbitrariamente 867 00:46:43,000 --> 00:46:46,000 una lista de frutas, y por eso necesitamos crear algunos matriz 868 00:46:46,000 --> 00:46:49,000 en la que puede insertar fruta. 869 00:46:49,000 --> 00:46:52,000 Dentro de mi archivo de implementación, lo primero que quiero hacer 870 00:46:52,000 --> 00:46:55,000 es que quiero asegurarme de que inicializar esta matriz. 871 00:46:55,000 --> 00:46:58,000 >> Dije alloc init, creé mi arsenal de fruta, 872 00:46:58,000 --> 00:47:03,000 y yo estoy añadiendo 4 cosas a él, uno de los cuales es mucho más controvertido que los otros 3. 873 00:47:03,000 --> 00:47:06,000 Y ahora tengo una matriz de tamaño 4. 874 00:47:06,000 --> 00:47:08,000 Lo estamos sacudiendo en CS50. 875 00:47:08,000 --> 00:47:11,000 Ahora tengo una matriz de tamaño 4. 876 00:47:11,000 --> 00:47:13,000 Ahora voy a empezar a responder estas preguntas, y de hecho, 877 00:47:13,000 --> 00:47:16,000 cuando creé esta aplicación de este ya estaba hecho para mí. 878 00:47:16,000 --> 00:47:19,000 No tuve que escribir el número de secciones en vista de tabla. 879 00:47:19,000 --> 00:47:22,000 Ya estaba allí, y yo estoy llenando los espacios en blanco. 880 00:47:22,000 --> 00:47:24,000 ¿Cuántas secciones tengo? 881 00:47:24,000 --> 00:47:26,000 Una. Todo hecho. 882 00:47:26,000 --> 00:47:28,000 ¿Cuántas filas tengo? 883 00:47:28,000 --> 00:47:31,000 Bueno, tengo una fila para cada fruta, por lo que este recuento 884 00:47:31,000 --> 00:47:34,000 es una propiedad de cualquier matriz que dice cómo es de grande? 885 00:47:34,000 --> 00:47:36,000 Ese es el número de filas que tengo. 886 00:47:36,000 --> 00:47:42,000 Por último, tengo que decir lo que tiene cada célula parece? 887 00:47:42,000 --> 00:47:46,000 Voy a decir dequeueReusableCellWithIdentifier. 888 00:47:46,000 --> 00:47:48,000 >> De nuevo, esto ya estaba escrito para mí. 889 00:47:48,000 --> 00:47:51,000 Yo no tenía que hacer esto por mí mismo, y quiero volver 890 00:47:51,000 --> 00:47:54,000 esta celda en esta ubicación. 891 00:47:54,000 --> 00:47:57,000 Recuerde que estamos llamando a este mismo método en todas las células, 892 00:47:57,000 --> 00:48:01,000 y este argumento aquí, este argumento indexPath, 893 00:48:01,000 --> 00:48:03,000 dice qué fila estoy dentro 894 00:48:03,000 --> 00:48:05,000 Si digo indexPath.row aquí 895 00:48:05,000 --> 00:48:09,000 este será 0, entonces será 1, entonces será 2, y esto es lo que sé 896 00:48:09,000 --> 00:48:11,000 qué celda Actualmente estoy mostrando. 897 00:48:11,000 --> 00:48:15,000 Quiero configurar el texto de la celda utilizando esta propiedad textLabel 898 00:48:15,000 --> 00:48:19,000 ir dentro de mi matriz fruta y obtener 899 00:48:19,000 --> 00:48:21,000 el objeto que corresponde a cada fila. 900 00:48:21,000 --> 00:48:24,000 Si esto es una cadena, ahora estoy estableciendo 901 00:48:24,000 --> 00:48:28,000 la propiedad de texto en una cadena. 902 00:48:28,000 --> 00:48:30,000 Puedo hacer otra cosa. 903 00:48:30,000 --> 00:48:32,000 También puede registrar un controlador de eventos en cada una de las células, 904 00:48:32,000 --> 00:48:35,000 así que cuando me toque en cada una de estas células 905 00:48:35,000 --> 00:48:39,000 este didSelectRowAtIndexPath, esto va a ser llamado por mí, 906 00:48:39,000 --> 00:48:42,000 por lo que simplemente definiendo esta ahora puedo manejar lo que sucede 907 00:48:42,000 --> 00:48:46,000 al tocar en una celda y, de nuevo, estamos pasando en la celda que fue aprovechado 908 00:48:46,000 --> 00:48:50,000 para que podamos volver a utilizar este mismo controlador de eventos para todas nuestras células. 909 00:48:50,000 --> 00:48:53,000 >> Una vez más, esto es algo iOS está haciendo por mí. 910 00:48:53,000 --> 00:48:55,000 Vamos a mostrar otra popup molesto 911 00:48:55,000 --> 00:48:59,000 que simplemente dice que escogió algo cuando ese algo 912 00:48:59,000 --> 00:49:04,000 va a ser el objeto de fila. 913 00:49:04,000 --> 00:49:10,000 Cuando ejecuto esto, yo voy a tener este punto de vista linda mesa 914 00:49:10,000 --> 00:49:14,000 con una fila para cada una de estas frutas, y si me toca una 915 00:49:14,000 --> 00:49:16,000 me dice lo que pasó. 916 00:49:16,000 --> 00:49:21,000 Tiene sentido? 917 00:49:21,000 --> 00:49:24,000 Vamos a construir un poco más complejo de una aplicación, 918 00:49:24,000 --> 00:49:28,000 tanto como hacer clic en que usted escogió tomate es. 919 00:49:28,000 --> 00:49:31,000 La parte agradable sobre el storyboard 920 00:49:31,000 --> 00:49:35,000 es que no es sólo va a ayudar a las pantallas de diseño individual, 921 00:49:35,000 --> 00:49:38,000 también va a ayudarnos a unir nuestra aplicación completa, 922 00:49:38,000 --> 00:49:42,000 por lo que la aplicación final que será este edificio es bonito deporte lector de noticias, 923 00:49:42,000 --> 00:49:45,000 y por lo que va a tener varias pantallas, así que puede representar en realidad 924 00:49:45,000 --> 00:49:48,000 cada una de estas pantallas múltiples en el storyboard, 925 00:49:48,000 --> 00:49:52,000 y puedo alejar la imagen y ver mi aplicación de un alto nivel. 926 00:49:52,000 --> 00:49:55,000 >> Con el fin de crear un nuevo elemento en el interior de mi storyboard 927 00:49:55,000 --> 00:49:59,000 es muy simple dentro de Interface Builder. 928 00:49:59,000 --> 00:50:01,000 Si quiero añadir otra pantalla para esto, por ejemplo, 929 00:50:01,000 --> 00:50:06,000 La primera vez que se puede reducir con el zoom de pellizco que Apple quiere mucho, 930 00:50:06,000 --> 00:50:09,000 y aquí abajo antes de buscar un botón 931 00:50:09,000 --> 00:50:12,000 y arrastrar y soltar un botón 932 00:50:12,000 --> 00:50:15,000 si desea crear una nueva pantalla que en realidad se puede simplemente arrastrar y soltar 933 00:50:15,000 --> 00:50:19,000 un controlador de vista completa, por lo que si cojo este, tire de él por aquí, 934 00:50:19,000 --> 00:50:23,000 hey, hay otra pantalla, por lo que ahora está utilizando este archivo de storyboard mismo 935 00:50:23,000 --> 00:50:26,000 Puedo tener todas las pantallas dentro de mi app, y puedo alejar 936 00:50:26,000 --> 00:50:28,000 y ver cómo interactúan. 937 00:50:28,000 --> 00:50:32,000 Estos no van a interactuar con todo. 938 00:50:32,000 --> 00:50:36,000 La forma en que estas 2 pantallas interactúan es definir las relaciones. 939 00:50:36,000 --> 00:50:39,000 Es, básicamente, se puede decir de esta pantalla, al pulsar este botón, 940 00:50:39,000 --> 00:50:42,000 Quiero que se deslice hacia esta nueva pantalla. 941 00:50:42,000 --> 00:50:44,000 Eso significa que este tipo de relación entre 942 00:50:44,000 --> 00:50:46,000  la pantalla primera y la segunda pantalla. 943 00:50:46,000 --> 00:50:49,000 Vas a tener básicamente una flecha de ese botón a la segunda pantalla 944 00:50:49,000 --> 00:50:53,000 diciendo que cuando se pulsa este botón, que es donde quiero ir. 945 00:50:53,000 --> 00:50:57,000 Al igual que hemos hecho clic y arrastre de controles para definir los puntos de venta 946 00:50:57,000 --> 00:51:01,000 vamos a hacer lo mismo para definir estos segues. 947 00:51:01,000 --> 00:51:05,000 >> Vamos a ver un ejemplo de eso, y antes de que realmente la transición 948 00:51:05,000 --> 00:51:08,000 de una pantalla a otra iOS es lo suficientemente agradable para llamar a este método 949 00:51:08,000 --> 00:51:11,000 llamado prepareForSegue, y aquí es donde podemos empezar a 950 00:51:11,000 --> 00:51:14,000 el envío de datos desde una aplicación a otra. 951 00:51:14,000 --> 00:51:17,000 En el ejemplo que estamos a punto de ver, básicamente, nos permitirá 952 00:51:17,000 --> 00:51:20,000 para filtrar los equipos de béisbol de las ligas y divisiones. 953 00:51:20,000 --> 00:51:23,000 Cuando selecciono una liga, por ejemplo, quiero hacer la transición 954 00:51:23,000 --> 00:51:25,000 a mi siguiente pantalla donde pueda mostrar todas las divisiones 955 00:51:25,000 --> 00:51:27,000 en esa liga o todos los equipos diferentes. 956 00:51:27,000 --> 00:51:31,000 Tengo que enviar a la pantalla lo que los equipos que debe mostrar. 957 00:51:31,000 --> 00:51:35,000 Para ello voy a tomar ventaja de este método aquí. 958 00:51:35,000 --> 00:51:39,000 >> Por último, sólo un punto al azar en iOS. 959 00:51:39,000 --> 00:51:41,000 Si desea almacenar los datos que hay esta cosa llamada datos básicos, 960 00:51:41,000 --> 00:51:44,000 que es en realidad un poco complicado trabajar con ellos. 961 00:51:44,000 --> 00:51:47,000 También puede utilizar SQL para almacenar datos, 962 00:51:47,000 --> 00:51:51,000 que, de nuevo, es agradable, pero un poco en el lado más complicado que trabajar, 963 00:51:51,000 --> 00:51:55,000 pero también es compatible con iOS estas cosas muy interesantes llamadas listas de propiedades, 964 00:51:55,000 --> 00:52:00,000 y una lista de propiedades es un archivo que representa los pares clave-valor. 965 00:52:00,000 --> 00:52:03,000 Se define una lista de claves, y le digo clave va a ser una matriz. 966 00:52:03,000 --> 00:52:06,000 Esta clave va a ser una cadena, y básicamente cualquier cosa que usted puede hacer 967 00:52:06,000 --> 00:52:10,000 en JSON se puede hacer dentro de una lista de propiedades, 968 00:52:10,000 --> 00:52:14,000 por lo que esta realmente bien nos permite trabajar con algunos datos. 969 00:52:14,000 --> 00:52:18,000 Por ejemplo, tengo este Teams.plist que he creado. 970 00:52:18,000 --> 00:52:22,000 He creado un archivo plist nuevo, y puedo ver los detalles. 971 00:52:22,000 --> 00:52:26,000 Este es un diccionario, esto es un diccionario, se trata de cadenas, 972 00:52:26,000 --> 00:52:30,000 y por lo que esta es una representación gráfica agradable de un documento JSON 973 00:52:30,000 --> 00:52:33,000 o simplemente un conjunto de pares de valores clave, 974 00:52:33,000 --> 00:52:37,000 y por lo tanto estos son los datos que voy a estar trabajando con el interior de mi aplicación. 975 00:52:37,000 --> 00:52:40,000 >> Primero vamos a venir aquí. Tenemos archivos mucho más ahora. 976 00:52:40,000 --> 00:52:44,000 Pero primero vamos a venir aquí al guión gráfico. 977 00:52:44,000 --> 00:52:48,000 El guión aquí, si puedo alejar- 978 00:52:48,000 --> 00:52:51,000 ahora podemos ver que esto es el flujo de mi app. 979 00:52:51,000 --> 00:52:53,000 Estoy primero vamos a empezar en esta pantalla. 980 00:52:53,000 --> 00:52:55,000 Voy a profundizar en esta pantalla, 981 00:52:55,000 --> 00:52:58,000 y voy a profundizar en esta pantalla, y podemos ver aquí que si que tipo de 982 00:52:58,000 --> 00:53:04,000 mover uno de estos en todo hemos estas flechas ir desde aquí hasta aquí, 983 00:53:04,000 --> 00:53:08,000 y la forma en que definen esa flecha fue si puedo ampliar un poco, 984 00:53:08,000 --> 00:53:12,000 y si me vienen a este controlador de vista, 985 00:53:12,000 --> 00:53:16,000 y aquí está una celda, y quiero decir que al tocar en una celda 986 00:53:16,000 --> 00:53:18,000 Quiero que se deslice hacia otra pantalla. 987 00:53:18,000 --> 00:53:21,000 Simplemente, puede mantener pulsado el control, 988 00:53:21,000 --> 00:53:26,000 desplazarse a lo largo de un poco más, mantenga pulsada la tecla Control, arrastre la celda una y dejar ir. 989 00:53:26,000 --> 00:53:30,000 >> Y aquí podemos decir cuál es la transición que desea utilizar? 990 00:53:30,000 --> 00:53:32,000 ¿Quieres usar esa cosa que se llama diapositiva empujón? 991 00:53:32,000 --> 00:53:34,000 ¿Quieres que se deslice hacia arriba desde la parte inferior? 992 00:53:34,000 --> 00:53:36,000 Eso se llama modal. 993 00:53:36,000 --> 00:53:40,000 Y una vez que haga clic en uno de ellos, que va a sacar esta flecha para mí, 994 00:53:40,000 --> 00:53:44,000 y eso significa que he manejado en realidad lo que sucede cuando presiono este botón gráficamente. 995 00:53:44,000 --> 00:53:48,000 Yo no he escrito ningún código para deslizarse en realidad de una pantalla a la siguiente. 996 00:53:48,000 --> 00:53:51,000 He definido esta visualmente dentro de Interface Builder. 997 00:53:51,000 --> 00:53:55,000 Si hago clic en esta flecha, podemos ver que me dio esta cosa un nombre. 998 00:53:55,000 --> 00:53:59,000 Me llamó showDivisions, y esto es para que yo pueda saber 999 00:53:59,000 --> 00:54:03,000 transición lo que está por ocurrir, y vamos a ver por qué en tan sólo un segundo. 1000 00:54:03,000 --> 00:54:06,000 Así es como me he conectado a las diferentes pantallas de mi aplicación. 1001 00:54:06,000 --> 00:54:09,000 Si esto fuera un botón, por ejemplo, en lugar de una vista de tabla, 1002 00:54:09,000 --> 00:54:11,000 Que podía controlar haz clic en el botón, arrastre a la siguiente pantalla, 1003 00:54:11,000 --> 00:54:16,000 y así es como puedo hacer la navegación de esa manera. 1004 00:54:16,000 --> 00:54:19,000 >> Muy rápidamente, si entramos en la MasterViewController, 1005 00:54:19,000 --> 00:54:22,000 de nuevo, estamos simplemente va a definir una lista de las cosas 1006 00:54:22,000 --> 00:54:26,000 que se mostrará en la vista de tabla. 1007 00:54:26,000 --> 00:54:29,000 Aquí estoy diciendo que quiero que tomes ese archivo plist, 1008 00:54:29,000 --> 00:54:32,000 y yo quiero que lo cargue en un diccionario, 1009 00:54:32,000 --> 00:54:35,000 y una vez que tienes ese diccionario, voy a contestar a las mismas preguntas de nuevo. 1010 00:54:35,000 --> 00:54:37,000 Aquí es el número de secciones. 1011 00:54:37,000 --> 00:54:41,000 Uno, hay una fila por cada liga, y el texto de cada celda 1012 00:54:41,000 --> 00:54:46,000 debería ser la primera, la primera liga, la liga segundo, y así sucesivamente. 1013 00:54:46,000 --> 00:54:51,000 Por último, voy a utilizar este método que acabamos de ver se llama prepareForSegue, 1014 00:54:51,000 --> 00:54:54,000 y este es el método que va a ser despedido cuando hago clic en 1015 00:54:54,000 --> 00:54:57,000 en una de las filas y por lo tanto la activación de la transición 1016 00:54:57,000 --> 00:54:59,000 que establecí con las flechas. 1017 00:54:59,000 --> 00:55:02,000 Esto es decir que puede tener múltiples 1018 00:55:02,000 --> 00:55:05,000 relaciones de una pantalla a otra. 1019 00:55:05,000 --> 00:55:08,000 Si tengo 2 botones y cada botón te lleva a otra pantalla 1020 00:55:08,000 --> 00:55:10,000 Voy a tener 2 segues, 1 para cada botón. 1021 00:55:10,000 --> 00:55:14,000 Pero esta prepareForSegue es, de nuevo, va a ser reutilizado 1022 00:55:14,000 --> 00:55:17,000 para cada una de las diferentes relaciones, lo que significa que necesito una manera 1023 00:55:17,000 --> 00:55:21,000 de identificar si se pulsa el primer botón o pulsar el segundo botón. 1024 00:55:21,000 --> 00:55:25,000 >> ¿Recuerdas cuando te dio esa segue un nombre, este showDivisions, 1025 00:55:25,000 --> 00:55:29,000 eso es lo que ahora sé que este es el segue que fue activado. 1026 00:55:29,000 --> 00:55:32,000 Todo lo que quiero hacer es que quiero decir 1027 00:55:32,000 --> 00:55:35,000 Quiero entender lo que me acaba de golpear, 1028 00:55:35,000 --> 00:55:38,000 y así conseguir eso, puedo decir que quiero el indexPath para la fila seleccionada, 1029 00:55:38,000 --> 00:55:42,000 Recuerdo la indexPath sólo dice dónde acaba de hacer clic, 1030 00:55:42,000 --> 00:55:47,000 y entonces quiero decir que quiero saber a dónde voy. 1031 00:55:47,000 --> 00:55:50,000 Esta destinationViewController, eso es una propiedad de la segue. 1032 00:55:50,000 --> 00:55:53,000 Esta es la pantalla que voy a, 1033 00:55:53,000 --> 00:55:56,000 así que sé que la pantalla me voy a se llama DivisionsViewController 1034 00:55:56,000 --> 00:55:59,000 porque he creado esa clase, 1035 00:55:59,000 --> 00:56:02,000 y por eso ahora si digo d.divisions 1036 00:56:02,000 --> 00:56:06,000 Ahora estoy estableciendo una propiedad del controlador de vista que voy a ir. 1037 00:56:06,000 --> 00:56:10,000 Así es como yo estoy enviando datos de una pantalla a otra pantalla. 1038 00:56:10,000 --> 00:56:13,000 >> Con sólo mirar a esta DivisionsViewController 1039 00:56:13,000 --> 00:56:16,000 usted puede ver aquí que en el expediente. h 1040 00:56:16,000 --> 00:56:20,000 no es que las divisiones de propiedad, y eso es lo que estoy básicamente poblar, 1041 00:56:20,000 --> 00:56:25,000 de modo que es como sé que estoy mostrando las divisiones correspondientes a 1042 00:56:25,000 --> 00:56:28,000 la liga que hice clic y, de nuevo, 1043 00:56:28,000 --> 00:56:31,000 la vista de tabla real se ve más o menos el mismo, sólo respondiendo a los 1044 00:56:31,000 --> 00:56:34,000 3 preguntas simples, así como la identificación de 1045 00:56:34,000 --> 00:56:37,000 lo que sucede cuando se mueve a la siguiente pantalla. 1046 00:56:37,000 --> 00:56:40,000 Sólo un par de cosas aquí. 1047 00:56:40,000 --> 00:56:43,000 Se nota en la parte superior aquí que en lugar de decir # include 1048 00:56:43,000 --> 00:56:45,000 Ahora estoy diciendo # import. 1049 00:56:45,000 --> 00:56:47,000 Esto es sólo una cosa de Objective-C. 1050 00:56:47,000 --> 00:56:52,000 La importación es básicamente una versión más amable de incluir, 1051 00:56:52,000 --> 00:56:57,000 y por ejemplo, tenemos que saber lo que esta clase es, 1052 00:56:57,000 --> 00:57:00,000 así que no puedo decir DivisionsViewController. 1053 00:57:00,000 --> 00:57:05,000 Si no hashtag dentro de nuestro standardio.c. Archivo c 1054 00:57:05,000 --> 00:57:07,000 el compilador no tenía idea de lo que era printf. 1055 00:57:07,000 --> 00:57:12,000 Del mismo modo, si no me importe el DivisionsViewController 1056 00:57:12,000 --> 00:57:16,000 el compilador realmente no tiene idea de lo que es un DivisionsViewController. 1057 00:57:16,000 --> 00:57:19,000 Sólo asegúrese de que dentro de sus archivos m diferentes. Usted, asegúrese de importar 1058 00:57:19,000 --> 00:57:25,000 los archivos correspondientes h. para que el compilador sabe lo que está pasando. 1059 00:57:25,000 --> 00:57:31,000 >> Por último, en última instancia, lo que Apple hace es mostrar algunos datos utilizando una web de opinión, 1060 00:57:31,000 --> 00:57:35,000 y así una visión web es un objeto que se puede incrustar 1061 00:57:35,000 --> 00:57:37,000 un navegador web pequeño dentro de su aplicación. 1062 00:57:37,000 --> 00:57:40,000 Todo lo que necesitas hacer es proporcionar un URL en su navegador web, 1063 00:57:40,000 --> 00:57:43,000 así que quiero ir a mlb.mlb.com, 1064 00:57:43,000 --> 00:57:46,000 y así es como puedo acceder a la página de inicio para cada equipo, 1065 00:57:46,000 --> 00:57:49,000 y así pasando en este URL 1066 00:57:49,000 --> 00:57:52,000 la vista web puede mostrar esto para mí, y puedo navegar, 1067 00:57:52,000 --> 00:58:01,000 y el simulador está en uso por que uno. 1068 00:58:01,000 --> 00:58:03,000 Ahora bien, esto viene de mi plist. 1069 00:58:03,000 --> 00:58:07,000 Si hace clic en este esto también viene de mi plist, y este deslizamiento se manejan 1070 00:58:07,000 --> 00:58:09,000 mediante la definición de los segues. 1071 00:58:09,000 --> 00:58:12,000 Hago clic en este y uno más, 1072 00:58:12,000 --> 00:58:15,000 y ahora aquí está mi UIWebView, por lo que al igual que 1073 00:58:15,000 --> 00:58:19,000 aquí está la página web para la dirección URL que acabo incorporado, 1074 00:58:19,000 --> 00:58:21,000 y yo no tenía que manejar ninguna locura. 1075 00:58:21,000 --> 00:58:24,000 Esta es la forma de mostrar una página web. 1076 00:58:24,000 --> 00:58:27,000 Cosas como esta el botón de regreso aquí también se dan a mí 1077 00:58:27,000 --> 00:58:33,000 totalmente gratis, porque he definido estas relaciones utilizando segues. 1078 00:58:33,000 --> 00:58:37,000 >> ¿Alguna pregunta? Si. 1079 00:58:37,000 --> 00:58:40,000 [Estudiante] Así que cuando usted utiliza alloc, usted nunca tendrá que algo gratis? 1080 00:58:40,000 --> 00:58:43,000 Exactamente, cuando se llama a alloc e init usted no tiene que liberarlo. 1081 00:58:43,000 --> 00:58:46,000 IOS va a manejar todo eso para usted. 1082 00:58:46,000 --> 00:58:51,000 Es maravilloso, y usted no está rompiendo ninguna regla. Si. 1083 00:58:51,000 --> 00:58:54,000 [Estudiante] Si se va a incluir más equipos que podrían caber en la pantalla, 1084 00:58:54,000 --> 00:58:58,000 lo tienen automáticamente una opción de desplazamiento o es que algo tiene que agregar? 1085 00:58:58,000 --> 00:59:01,000 Exactamente, si tuviera más equipos, por ejemplo, automáticamente se ocuparía de 1086 00:59:01,000 --> 00:59:04,000 el desplazamiento para mí, y todos los problemas de rendimiento 1087 00:59:04,000 --> 00:59:08,000 con la enorme mesa también son manejados totalmente por mí. 1088 00:59:08,000 --> 00:59:11,000 >> Otras preguntas? 1089 00:59:11,000 --> 00:59:13,000 Todo este código va a ser publicado. 1090 00:59:13,000 --> 00:59:16,000 Es como que pasa por alto un poco de los detalles más pequeños, 1091 00:59:16,000 --> 00:59:19,000 pero cosas como establecer algunas propiedades a la vista web 1092 00:59:19,000 --> 00:59:22,000 son cosas que usted puede conseguir navegar por la documentación de Apple, 1093 00:59:22,000 --> 00:59:24,000 que es muy, muy bien diseñada. 1094 00:59:24,000 --> 00:59:27,000 Ellos tienen un montón de aplicaciones de ejemplo y el ejemplo usos 1095 00:59:27,000 --> 00:59:34,000 de APIs distinto, así que sin duda leer esos si puedes. 1096 00:59:34,000 --> 00:59:36,000 Sólo algunos enlaces útiles que usted puede ser que desee echar un vistazo a. 1097 00:59:36,000 --> 00:59:38,000 Estas son algunas de las guías de documentación a mano. 1098 00:59:38,000 --> 00:59:41,000 Las URLs son enormes, por lo que estamos acortado. 1099 00:59:41,000 --> 00:59:44,000 Este primero es toda la biblioteca de documentación. 1100 00:59:44,000 --> 00:59:46,000 Hay pequeños bares de búsqueda, por lo que si el botón de inicio escribiendo 1101 00:59:46,000 --> 00:59:50,000 que comenzará a darle toda la información acerca de todas las cosas que puedes hacer con un botón. 1102 00:59:50,000 --> 00:59:53,000 También he incluido el Table View Programming Guide. 1103 00:59:53,000 --> 00:59:56,000 Se ocupa de las vistas de tabla en mucho más detalle, 1104 00:59:56,000 --> 01:00:00,000 cómo hacer cosas como agregar de forma dinámica o células editar o eliminarlos. 1105 01:00:00,000 --> 01:00:02,000 >> Hay un montón de aplicaciones de ejemplo de Apple que le mostrará cómo hacerlo, 1106 01:00:02,000 --> 01:00:05,000 y, finalmente, este último es el Human Interface Guidelines, 1107 01:00:05,000 --> 01:00:09,000 y esto es básicamente una discusión de los componentes de interfaz de usuario, 1108 01:00:09,000 --> 01:00:12,000 cosas como no hacer un botón que es de 4 píxeles por 4 píxeles. 1109 01:00:12,000 --> 01:00:15,000 Esa es una mala idea, y otras cosas que Apple quiere que hagas 1110 01:00:15,000 --> 01:00:18,000 fomentar el diseño correcto. 1111 01:00:18,000 --> 01:00:23,000 >> Las últimas preguntas antes de terminar? 1112 01:00:23,000 --> 01:00:27,000 Bueno, definitivamente no dude en-vamos a tener etiquetas especiales en discutir. 1113 01:00:27,000 --> 01:00:30,000 Vamos a tener un iOS, así que sin duda no dude en utilizar eso. 1114 01:00:30,000 --> 01:00:34,000 Si desea trabajar con sus compañeros de clase en proyectos 1115 01:00:34,000 --> 01:00:37,000 o ayudar a entender algunas cosas al azar iOS 1116 01:00:37,000 --> 01:00:40,000 no dude en enviarme un correo electrónico, y sin duda leer todo el código en línea porque 1117 01:00:40,000 --> 01:00:43,000 sólo en interés de la clase de tiempo que pasa por alto el más 1118 01:00:43,000 --> 01:00:45,000 de grano más fino detalles de las cosas. 1119 01:00:45,000 --> 01:00:47,000 Pero si no, entonces buena suerte en sus proyectos para iOS, y espero que tengamos 1120 01:00:47,000 --> 01:00:53,000 una gran afluencia de aplicaciones en la App Store. 1121 01:00:53,000 --> 01:00:56,000 [CS50.TV]