1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminario] [iOS: Scrivere applicazioni 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 [Questo è CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Va bene, tutti, benvenuti a iOS: Scrivere applicazioni come un Boss. 5 00:00:12,000 --> 00:00:16,000 Questo seminario si concentrerà sulla scrittura di applicazioni per l'iPhone 6 00:00:16,000 --> 00:00:19,000 e, a sua volta scrivere applicazioni per l'iPad, e quindi stiamo andando praticamente a piedi attraverso 7 00:00:19,000 --> 00:00:23,000 un paio di esempi diversi di come fare un app, un gioco semplice come Tic Tac Toe, 8 00:00:23,000 --> 00:00:26,000 o se siete più interessati a fare un app come una specie di lettore di news 9 00:00:26,000 --> 00:00:30,000 o qualcosa che interagisce con Internet parlerò anche di questo. 10 00:00:30,000 --> 00:00:32,000 Ecco il nostro ordine del giorno breve. 11 00:00:32,000 --> 00:00:36,000 >> Applicazioni IOS sono scritti in un linguaggio chiamato Objective-C, 12 00:00:36,000 --> 00:00:39,000 e quindi questo è un po 'simile al C ma non lo sono affatto, 13 00:00:39,000 --> 00:00:41,000 così parleremo un po 'di lingua stessa 14 00:00:41,000 --> 00:00:45,000 e poi come costruire applicazioni per iPhone utilizzando questo programma app chiamato XCode, 15 00:00:45,000 --> 00:00:48,000 che se non l'avete ancora scaricato sentitevi liberi di avviare il download adesso. 16 00:00:48,000 --> 00:00:50,000 Si tratta di diversi gigabyte. 17 00:00:50,000 --> 00:00:54,000 Dovrebbe essere gratuito su App Store, quindi avrai bisogno di avere un Mac 18 00:00:54,000 --> 00:00:57,000 idealmente utilizzando l'ultima versione di OS X. 19 00:00:57,000 --> 00:00:59,000 Se non sei, non c'è problema. 20 00:00:59,000 --> 00:01:02,000 Abbiamo Mac nel centro scientifiche disponibili per il vostro uso 21 00:01:02,000 --> 00:01:05,000 con XCode installato, e quindi sentitevi liberi di utilizzare quelli per lo sviluppo. 22 00:01:05,000 --> 00:01:07,000 Se si desidera fare un app, ma non hanno un Mac, non ti preoccupare. 23 00:01:07,000 --> 00:01:09,000 C'è un sacco di risorse del campus per questo. 24 00:01:09,000 --> 00:01:15,000 E così poi andremo a coprire 2 esempi più grandi di applicazioni che si possono fare. 25 00:01:15,000 --> 00:01:19,000 Objective-C è tecnicamente quello che si chiama un insieme di super C. 26 00:01:19,000 --> 00:01:24,000 Questo significa che il codice C è valida anche codice Objective-C. 27 00:01:24,000 --> 00:01:29,000 Ciò significa che tipo di canale registrato su alcune caratteristiche aggiuntive a C. 28 00:01:29,000 --> 00:01:33,000 Alcune di queste caratteristiche comprendono non dover scrivere mai malloc di nuovo, grazie a Dio, 29 00:01:33,000 --> 00:01:36,000 non doversi preoccupare di tali puntatori stupidi e liberarli e tutta quella roba 30 00:01:36,000 --> 00:01:40,000 hai odiato di C, ed è una specie di andata in Objective-C. 31 00:01:40,000 --> 00:01:43,000 >> Ora, Objective-C ha anche una libreria standard molto più grande, 32 00:01:43,000 --> 00:01:47,000 quindi non c'è funzionalità molto di più si ottiene per interno privo di Objective-C. 33 00:01:47,000 --> 00:01:50,000 Ti ricordi quando stavamo scrivendo PHP abbiamo notato che siamo passati da 34 00:01:50,000 --> 00:01:54,000 questa piccola lingua alla libreria gigante di tutte queste cose folli che si possono fare. 35 00:01:54,000 --> 00:01:56,000 La stessa cosa accade in iOS. 36 00:01:56,000 --> 00:01:59,000 Ci sono oggetti per cose come il calendario buddista, e davvero nulla 37 00:01:59,000 --> 00:02:05,000 si può eventualmente pensare esiste probabilmente già in attuazione di Objective-C. 38 00:02:05,000 --> 00:02:08,000 La parte obiettivo di Objective-C è qualcosa di riferimento 39 00:02:08,000 --> 00:02:11,000 chiamato Object-Oriented Programming. 40 00:02:11,000 --> 00:02:14,000 Questa è una specie di un nuovo concetto, ma abbiamo imparato in realtà per lo più 41 00:02:14,000 --> 00:02:17,000 molti di questi concetti già. 42 00:02:17,000 --> 00:02:19,000 L'idea alla base di Programmazione orientata agli oggetti è che si sta andando a strutturare 43 00:02:19,000 --> 00:02:23,000 un sacco di codice intorno a queste cose chiamati classi, 44 00:02:23,000 --> 00:02:26,000 e queste classi sono davvero glorificato strutture. 45 00:02:26,000 --> 00:02:30,000 All'interno di una struttura abbiamo praticamente detto qui è una cosa, 46 00:02:30,000 --> 00:02:32,000 e questa cosa può avere membri. 47 00:02:32,000 --> 00:02:35,000 Ad esempio, un nodo in una lista collegata potrebbe avere altre cose 48 00:02:35,000 --> 00:02:38,000 come un valore, un puntatore al nodo successivo nella lista, 49 00:02:38,000 --> 00:02:44,000 e insieme quel puntatore e che il valore composto da questa istanza di una struttura. 50 00:02:44,000 --> 00:02:47,000 Le classi sono molto simili, tranne 51 00:02:47,000 --> 00:02:50,000 classi possono anche avere funzioni all'interno di essi. 52 00:02:50,000 --> 00:02:54,000 Quando abbiamo dichiarato una struct, possiamo solo dire int n * o nodo successivo. 53 00:02:54,000 --> 00:02:57,000 >> Ora, con Objective-C si può effettivamente mettere funzioni 54 00:02:57,000 --> 00:02:59,000 all'interno di quelle cose. 55 00:02:59,000 --> 00:03:03,000 Un'altra cosa che le classi possono fare è che i dati possono ereditare da altre classi. 56 00:03:03,000 --> 00:03:07,000 Per esempio, ci troveremmo di fronte a un gruppo di built-in Objective-C classi. 57 00:03:07,000 --> 00:03:11,000 Uno di loro potrebbe essere la classe che rappresenta la visualizzazione di una schermata, 58 00:03:11,000 --> 00:03:14,000 e così dicendo Voglio implementare mio punto di vista 59 00:03:14,000 --> 00:03:18,000 abbiamo praticamente diciamo assieme alla Apple, la gente probabilmente veramente bello, 60 00:03:18,000 --> 00:03:21,000 ha scritto questa classe per me, e gestisce le cose come la visualizzazione di pulsanti 61 00:03:21,000 --> 00:03:25,000 o rendere lo schermo, e ci sarebbe veramente addolorato 62 00:03:25,000 --> 00:03:28,000 di attuare tutto ciò che noi stessi le funzionalità, e così semplicemente 63 00:03:28,000 --> 00:03:31,000 ereditando dati possiamo dire tutto quello che hai fatto in quella classe 64 00:03:31,000 --> 00:03:34,000 Voglio anche all'interno della mia classe, e poi ho intenzione di fare un po 'di altre cose, 65 00:03:34,000 --> 00:03:37,000 vale a dire realizzare un app. 66 00:03:37,000 --> 00:03:40,000 Questo è ciò che la parola significa eredità. Vedremo un esempio più concreto. 67 00:03:40,000 --> 00:03:42,000 >> E, infine, la chiave con Programmazione orientata agli oggetti è che 68 00:03:42,000 --> 00:03:45,000 porta ad incapsulamento dei dati. 69 00:03:45,000 --> 00:03:48,000 In alcuni dei nostri problemi imposta potremmo avere questi grandi, le variabili globali 70 00:03:48,000 --> 00:03:51,000 e globali in tutto il mondo, e questo è il modo in cui ci tenere traccia dello stato. 71 00:03:51,000 --> 00:03:55,000 Con le classi possiamo iniziare a incapsulare le informazioni all'interno di un oggetto. 72 00:03:55,000 --> 00:03:58,000 Se abbiamo uno schermo sulla nostra applicazione, non abbiamo davvero bisogno di avere tutti i dati di 73 00:03:58,000 --> 00:04:01,000 un altro schermo nella nostra applicazione all'interno di questo, 74 00:04:01,000 --> 00:04:04,000 e così, incapsulando le cose all'interno delle classi di questa realtà conduce 75 00:04:04,000 --> 00:04:08,000 di progettazione di codice molto meglio, e questo è possibile con alcune delle caratteristiche aggiuntive 76 00:04:08,000 --> 00:04:11,000 di Objective-C. 77 00:04:11,000 --> 00:04:15,000 Preavviso, la sintassi per Objective-C è banane. 78 00:04:15,000 --> 00:04:19,000 E 'qualcosa che non abbiamo visto prima, 79 00:04:19,000 --> 00:04:22,000 quindi è un po 'di una curva di apprendimento per abituarsi 80 00:04:22,000 --> 00:04:24,000 che diavolo significa? 81 00:04:24,000 --> 00:04:27,000 Ma una volta passato che curva di apprendimento iniziale è davvero, davvero liscia 82 00:04:27,000 --> 00:04:29,000 per iniziare a scrivere applicazioni. 83 00:04:29,000 --> 00:04:33,000 >> Per dichiarare una classe, a dire qui è la mia classe, esiste, 84 00:04:33,000 --> 00:04:35,000 e forse qui ci sono alcune cose che ho intenzione di definire in seguito, 85 00:04:35,000 --> 00:04:38,000 Io vado a dire l'interfaccia @. 86 00:04:38,000 --> 00:04:41,000 Io vado a dire l'interfaccia @. Ho intenzione di dare la mia classe un nome. 87 00:04:41,000 --> 00:04:43,000 E poi da qualche altra parte ho intenzione di dire @ end, 88 00:04:43,000 --> 00:04:46,000 e tutto il resto l'interfaccia e la fine @ @ 89 00:04:46,000 --> 00:04:48,000 sarà la mia classe. 90 00:04:48,000 --> 00:04:51,000 Questo sarà quello che c'è dentro i nostri file. H. 91 00:04:51,000 --> 00:04:55,000 Proprio come in C i nostri file. H ha detto in sostanza qui ci sono alcune cose che esistono. 92 00:04:55,000 --> 00:04:57,000 Non sto necessariamente dicendo quello che fanno ancora, 93 00:04:57,000 --> 00:04:59,000 ma il compilatore ha bisogno di sapere che esistono. 94 00:04:59,000 --> 00:05:04,000 In seguito all'interno del nostro. M file, perché m per Objective-C 95 00:05:04,000 --> 00:05:08,000 è dove stiamo effettivamente andando a definire ciò che fanno queste classi. 96 00:05:08,000 --> 00:05:11,000 Proprio come i nostri. File c, abbiamo fornito un'implementazione per le funzioni. 97 00:05:11,000 --> 00:05:15,000 All'interno della nostra. M del file che andremo a dire qui è quello che tutte le funzioni 98 00:05:15,000 --> 00:05:18,000 all'interno della mia classe, che cosa fanno tutti. 99 00:05:18,000 --> 00:05:22,000 E, infine, all'interno di una struttura potremmo dire all'interno di tali parentesi graffe 100 00:05:22,000 --> 00:05:25,000 int, n o nodo successivo * 101 00:05:25,000 --> 00:05:28,000 e in Objective-C che andremo a utilizzare la parola chiave @ property 102 00:05:28,000 --> 00:05:31,000 e questo è quello che sta succedendo per definire le proprietà, 103 00:05:31,000 --> 00:05:36,000 o le non-funzioni che fanno parte dei miei corsi. 104 00:05:36,000 --> 00:05:40,000 >> Chiamare funzioni in Objective-C è anche banane. 105 00:05:40,000 --> 00:05:43,000 Quando abbiamo dichiarato le funzioni in C abbiamo detto qualcosa del tipo int foo 106 00:05:43,000 --> 00:05:46,000 e aperta parentesi e poi ha dato un elenco di argomenti. 107 00:05:46,000 --> 00:05:51,000 Questo è ciò che dichiara metodi o funzioni si presenta come in Objective-C. 108 00:05:51,000 --> 00:05:54,000 Se voglio dichiarare una funzione o di un metodo 109 00:05:54,000 --> 00:05:58,000 dove sto dicendo che il metodo è in realtà solo una funzione che è un membro di una classe, 110 00:05:58,000 --> 00:06:01,000 molto gentile da parte intercambiabili, ma non proprio, 111 00:06:01,000 --> 00:06:03,000 così all'interno del mio metodo che voglio creare un nuovo metodo. 112 00:06:03,000 --> 00:06:06,000 E 'intenzione di restituire alcun valore, in modo che sarà di tipo void. 113 00:06:06,000 --> 00:06:08,000 Questo è il tipo di ritorno della mia funzione. 114 00:06:08,000 --> 00:06:11,000 Ora abbiamo parentesi qui perché, non lo so. 115 00:06:11,000 --> 00:06:14,000 Prossimo sarà il nome della mia funzione, 116 00:06:14,000 --> 00:06:17,000 e poi finalmente abbiamo un punto e virgola, proprio come abbiamo avuto in C. 117 00:06:17,000 --> 00:06:19,000 Cosa c'è di nuovo qui è questo tizio qui. 118 00:06:19,000 --> 00:06:22,000 Questo trattino è effettivamente necessario, e ciò che dice è che questo 119 00:06:22,000 --> 00:06:26,000 questo metodo qui deve essere chiamato in un'istanza di una classe. 120 00:06:26,000 --> 00:06:29,000 >> Dopo aver dichiarato le nostre strutture che probabilmente ha detto qualcosa di simile 121 00:06:29,000 --> 00:06:32,000 n nodo struct, e che in realtà ha creato 122 00:06:32,000 --> 00:06:35,000 un'istanza o una di quelle strutture in modo da poter effettivamente iniziare a lavorare 123 00:06:35,000 --> 00:06:38,000 con quello che c'è dentro di essa, quindi questo trattino significa che dobbiamo 124 00:06:38,000 --> 00:06:41,000 creare un'istanza della classe, proprio come abbiamo un'istanza che struct 125 00:06:41,000 --> 00:06:43,000 prima di poter chiamare questo metodo su di esso. 126 00:06:43,000 --> 00:06:46,000 Se voglio iniziare ad aggiungere argomenti per i miei metodi 127 00:06:46,000 --> 00:06:48,000 diventa ancora più banane. 128 00:06:48,000 --> 00:06:50,000 Ecco il mio nome del metodo. 129 00:06:50,000 --> 00:06:53,000 Poi ho intenzione di avere due punti, due punti e dopo questo qui dice che arriva alcuni argomenti. 130 00:06:53,000 --> 00:06:56,000 Questo metodo accetta un argomento. 131 00:06:56,000 --> 00:06:59,000 Il tipo della sua tesi è un int, e il nome di tale argomento 132 00:06:59,000 --> 00:07:03,000 o la variabile che ho intenzione di iniziare a utilizzare all'interno del metodo è ho chiamato. 133 00:07:03,000 --> 00:07:05,000 Di nuovo, questo è il metodo. Prende un argomento. 134 00:07:05,000 --> 00:07:10,000 >> Se si desidera iniziare ad aggiungere più argomenti diventa più banane 135 00:07:10,000 --> 00:07:13,000 in quanto abbiamo il colon che dice ecco che arriva la mia lista di argomenti. 136 00:07:13,000 --> 00:07:15,000 Il primo argomento è un numero intero. 137 00:07:15,000 --> 00:07:17,000 Ora, questo secondo argomento è interessante. 138 00:07:17,000 --> 00:07:20,000 La variabile che ho intenzione di utilizzare all'interno della mia funzione 139 00:07:20,000 --> 00:07:23,000 si chiama f, quindi all'interno della mia funzione potrei dire 140 00:07:23,000 --> 00:07:25,000 f + = 1 o qualcosa del genere. 141 00:07:25,000 --> 00:07:30,000 Questa cosa qui è fondamentalmente una chiave per l'argomento o parametro. 142 00:07:30,000 --> 00:07:34,000 Proprio come abbiamo avuto coppie di valori chiave e qualcosa come JSON o array associativi 143 00:07:34,000 --> 00:07:37,000 Objective-C ha preso la decisione di dire, va bene, solo in modo che è davvero chiaro 144 00:07:37,000 --> 00:07:39,000 quando si chiama un metodo che cosa tutti questi parametri sono 145 00:07:39,000 --> 00:07:41,000 In realtà sto andando a nominarli tutti. 146 00:07:41,000 --> 00:07:45,000 Quando si chiama un metodo, ci troveremo a dire andFloat, 147 00:07:45,000 --> 00:07:47,000 e poi ti trovi a passare 148 00:07:47,000 --> 00:07:50,000 >> È interessante notare, questo non è nominato, ma tutti gli altri parametri, 149 00:07:50,000 --> 00:07:53,000 quindi se abbiamo avuto una discussione 3 potrei dire andFloat 150 00:07:53,000 --> 00:07:56,000 e un altro galleggiante e così via. 151 00:07:56,000 --> 00:08:01,000 Quando chiamo questi metodi è di banane del corso, 152 00:08:01,000 --> 00:08:04,000 quindi se ho un oggetto, e ho definito un metodo chiamato foo, 153 00:08:04,000 --> 00:08:09,000 e voglio chiamarlo, piuttosto che dire foo aperto / chiudi parentesi 154 00:08:09,000 --> 00:08:11,000 Ho intenzione di aprire una parentesi. 155 00:08:11,000 --> 00:08:13,000 Ecco il nome del mio metodo. 156 00:08:13,000 --> 00:08:17,000 Ho intenzione di chiudere la parentesi, e questo è l'oggetto che sto chiamando su di esso. 157 00:08:17,000 --> 00:08:20,000 Ricordate, tutti questi metodi esistono all'interno delle classi 158 00:08:20,000 --> 00:08:23,000 perché le classi possono avere metodi definiti all'interno di essi. 159 00:08:23,000 --> 00:08:26,000 >> Qui ho arbitrariamente creato un oggetto di una classe, 160 00:08:26,000 --> 00:08:28,000 e questa è la sintassi per farlo. 161 00:08:28,000 --> 00:08:31,000 Ci sono 2 fasi per la creazione di un oggetto. 162 00:08:31,000 --> 00:08:34,000 Il primo passo è quello di dire che voglio per allocare lo spazio. 163 00:08:34,000 --> 00:08:37,000 Questo è l'equivalente di un malloc. Noi non abbiamo da dire malloc più. 164 00:08:37,000 --> 00:08:42,000 Abbiamo lasciato la m, ha reso alloc, e sostituito il. C con. M. 165 00:08:42,000 --> 00:08:47,000 Dopo aver qualcosa alloc abbiamo poi bisogno di inizializzarlo. 166 00:08:47,000 --> 00:08:49,000 In pratica quando si creano oggetti che si potrebbe desiderare di avere un po 'di logica 167 00:08:49,000 --> 00:08:53,000 che viene eseguito quando vengono creati, in modo da poter passare in alcuni valori di default 168 00:08:53,000 --> 00:08:57,000 o qualcosa del genere, e quindi questo metodo init è ciò che crea l'oggetto. 169 00:08:57,000 --> 00:08:59,000 In primo luogo abbiamo allocare lo spazio, proprio come abbiamo fatto in C, 170 00:08:59,000 --> 00:09:04,000 e poi inizializzarlo, che può o non può fare un bel po '. 171 00:09:04,000 --> 00:09:07,000 Poi stiamo tornando questa cosa in un oggetto o. 172 00:09:07,000 --> 00:09:09,000 C'è una stella qui perché questo è tecnicamente un puntatore, 173 00:09:09,000 --> 00:09:12,000 ma non preoccupatevi, i puntatori non sono un grosso problema in Objective-C più. 174 00:09:12,000 --> 00:09:15,000 >> Ora abbiamo istanziato la classe chiamata NSObject, 175 00:09:15,000 --> 00:09:19,000 e questo è solo una classe casuale che Apple ha. 176 00:09:19,000 --> 00:09:22,000 Abbiamo istanziato questo, e ora ho una istanza di questa classe 177 00:09:22,000 --> 00:09:25,000 o in questo oggetto, in modo che significa che se ho definito 178 00:09:25,000 --> 00:09:29,000 questi metodi Potrei chiamare in questo modo. 179 00:09:29,000 --> 00:09:31,000 Allo stesso modo, se volevo chiamare un metodo con un argomento, 180 00:09:31,000 --> 00:09:34,000 quindi questo è il metodo bar, che accetta un argomento, 181 00:09:34,000 --> 00:09:38,000 ed ecco la baz: metodo Qux, quindi questo richiede 2 argomenti. 182 00:09:38,000 --> 00:09:44,000 Questo si chiama una funzione di questo oggetto o. 183 00:09:44,000 --> 00:09:46,000 Ha senso? 184 00:09:46,000 --> 00:09:50,000 La sintassi dovrebbe avere un senso, ma è tipo di abituarsi ad esso. 185 00:09:50,000 --> 00:09:54,000 >> Ok, parliamo di un paio di cose che sono costruiti in Objective-C 186 00:09:54,000 --> 00:09:56,000 che non sono stati necessariamente integrato in C. 187 00:09:56,000 --> 00:09:59,000 In C abbiamo tipo avuto a che fare con le stringhe come array di caratteri di questi stupidi, 188 00:09:59,000 --> 00:10:01,000 e ha ottenuto davvero fastidioso. 189 00:10:01,000 --> 00:10:04,000 Objective-C è di quelli tutto integrato per noi, ed è costruito in 190 00:10:04,000 --> 00:10:06,000 utilizzo di questa classe denominata NSString. 191 00:10:06,000 --> 00:10:10,000 Quando voglio creare un NSString abbiamo sintassi più arcana. 192 00:10:10,000 --> 00:10:15,000 Piuttosto che dire "CS50" diciamo @ "CS50" 193 00:10:15,000 --> 00:10:17,000 e questo è solo la sintassi per dichiarare le stringhe in Objective-C. 194 00:10:17,000 --> 00:10:21,000 Questo è estremamente facile da dimenticare, in modo da non farlo. 195 00:10:21,000 --> 00:10:24,000 Ora, una volta che ho questa, questa è una stringa, a meno di notare 196 00:10:24,000 --> 00:10:26,000 in realtà è solo un oggetto. 197 00:10:26,000 --> 00:10:30,000 Ho detto NSString, il che significa che un'istanza della classe 198 00:10:30,000 --> 00:10:32,000 chiamato NSString, che qualcun altro ha scritto per me, 199 00:10:32,000 --> 00:10:35,000 ed erano molto bello su di esso, e così ora 200 00:10:35,000 --> 00:10:37,000 Posso iniziare a chiamare i metodi su di esso. 201 00:10:37,000 --> 00:10:40,000 Se chiamo il metodo della lunghezza di s questo oggetto 202 00:10:40,000 --> 00:10:43,000 che sta per tornare da me la lunghezza della stringa. 203 00:10:43,000 --> 00:10:45,000 Questo è proprio come strlen in C. 204 00:10:45,000 --> 00:10:47,000 Questo ritorno 4. 205 00:10:47,000 --> 00:10:51,000 >> Allo stesso modo, un altro metodo che potrebbe desiderare da tenere presente è questo characterAtIndex. 206 00:10:51,000 --> 00:10:54,000 Questo è un metodo che dice su questa stringa s 207 00:10:54,000 --> 00:10:57,000 Voglio che per ottenere il carattere 0, 208 00:10:57,000 --> 00:10:59,000 e quindi questo sarebbe tornato a me il carattere c, 209 00:10:59,000 --> 00:11:02,000 e c'è un bel po 'più di questi metodi che è possibile Google davvero facilmente. 210 00:11:02,000 --> 00:11:07,000 Documentazione di Apple è grande, e noi provvederemo a dare un'occhiata a che in un po '. 211 00:11:07,000 --> 00:11:09,000 Queste sono le stringhe. 212 00:11:09,000 --> 00:11:11,000 Abbiamo anche array di dimensione variabile costruito pollici 213 00:11:11,000 --> 00:11:13,000 Ricorda in C quando abbiamo dichiarato un array 214 00:11:13,000 --> 00:11:16,000 abbiamo dovuto dire di avere 5 elementi, fine della storia. 215 00:11:16,000 --> 00:11:18,000 Quando siamo arrivati ​​a JavaScript e PHP si potrebbe iniziare 216 00:11:18,000 --> 00:11:20,000 fare le cose come l'aggiunta di elementi o elementi in movimento. 217 00:11:20,000 --> 00:11:22,000 Siamo in grado di fare lo stesso in Objective-C. 218 00:11:22,000 --> 00:11:26,000 Invece di creare un array in modo normale C 219 00:11:26,000 --> 00:11:30,000 abbiamo di nuovo un'altra classe denominata NSMutableArray. 220 00:11:30,000 --> 00:11:33,000 C'è anche NSArray, 221 00:11:33,000 --> 00:11:35,000 e questo sta per incapsulare in fondo un po 'di array. 222 00:11:35,000 --> 00:11:38,000 Questo dice la prima cosa che voglio fare è che voglio assegnare 223 00:11:38,000 --> 00:11:41,000 spazio per un nuovo array, e dopo che l'ho allocare 224 00:11:41,000 --> 00:11:43,000 Ho quindi bisogno di inizializzarlo. 225 00:11:43,000 --> 00:11:45,000 Anche in questo caso, basta chiamare questi 2 metodi. 226 00:11:45,000 --> 00:11:48,000 Ora, questo significa che all'interno di questo oggetto un 227 00:11:48,000 --> 00:11:50,000 Ho un array vuoto seduto lì. 228 00:11:50,000 --> 00:11:54,000 Se voglio aggiungere qualcosa a questo array, posso chiamare il metodo addObject. 229 00:11:54,000 --> 00:11:59,000 Voglio aggiungere un oggetto alla matrice a, e voglio aggiungere la stringa CS50. 230 00:11:59,000 --> 00:12:02,000 Se avessi voluto rimuovere viceversa che posso dire che voglio 231 00:12:02,000 --> 00:12:09,000 rimuovere l'oggetto al primo posto in un array o un oggetto. 232 00:12:09,000 --> 00:12:11,000 >> Ha senso? 233 00:12:11,000 --> 00:12:14,000 Ok, tipo di abituarsi a questa cosa parentesi quadra. 234 00:12:14,000 --> 00:12:18,000 Tra l'altro, all'interno di un sacco di librerie di Apple vedrete questo NS. 235 00:12:18,000 --> 00:12:21,000 Il NS sta effettivamente per passo successivo, che è stata una delle prime aziende Steve Jobs, 236 00:12:21,000 --> 00:12:24,000 ed è lì che ha davvero iniziato a scrivere un sacco di codice 237 00:12:24,000 --> 00:12:27,000 come una sorta di base per Mac OS X e tutte le altre cose, 238 00:12:27,000 --> 00:12:32,000 e quindi questo NS è una specie di questa eredità bel gridare ad una delle società precedenti 239 00:12:32,000 --> 00:12:34,000 indietro quando Apple è stato prima di partire. 240 00:12:34,000 --> 00:12:36,000 E 'ovunque. 241 00:12:36,000 --> 00:12:41,000 Diamo un'occhiata a un approccio olistico più Objective-C esempio. 242 00:12:41,000 --> 00:12:44,000 Eccomi all'interno di XCode. 243 00:12:44,000 --> 00:12:47,000 Per arrivare qui, ho scaricato XCode da App Store, 244 00:12:47,000 --> 00:12:50,000 lo aprì, e poi sono andato qui in un file, 245 00:12:50,000 --> 00:12:54,000 qui di nuovo progetto, e poi. 246 00:12:54,000 --> 00:12:57,000 Dopo lo faccio ho tutte queste opzioni di ciò che voglio creare, 247 00:12:57,000 --> 00:12:59,000 e così daremo uno sguardo a queste opzioni in seguito, 248 00:12:59,000 --> 00:13:03,000 ma proprio per questo esempio, perché non stiamo in realtà sta per avere un app ancora, 249 00:13:03,000 --> 00:13:06,000 Sono venuto qui, e ho detto a riga di comando, 250 00:13:06,000 --> 00:13:09,000 e questo è un app che ho potuto eseguire dalla riga di comando 251 00:13:09,000 --> 00:13:12,000 proprio come siamo stati in esecuzione da C. 252 00:13:12,000 --> 00:13:16,000 È così che ho creato questo progetto, e così ora sono qui, 253 00:13:16,000 --> 00:13:20,000 quindi diamo prima occhiata a questo file, e questo dovrebbe essere abbastanza familiare. 254 00:13:20,000 --> 00:13:24,000 Ho un nome int. Ecco il mio argc amico, il mio altro amico argv. 255 00:13:24,000 --> 00:13:30,000 E così possiamo vedere che questo è il punto di ingresso per il mio primo obiettivo-C. 256 00:13:30,000 --> 00:13:32,000 Qui possiamo ignorare questo per ora. 257 00:13:32,000 --> 00:13:35,000 Questo è fondamentalmente un po 'di roba di gestione della memoria che si vuole veramente 258 00:13:35,000 --> 00:13:37,000 mai si deve preoccupare. 259 00:13:37,000 --> 00:13:39,000 >> Diamo un'occhiata a questo primo blocco qui. 260 00:13:39,000 --> 00:13:46,000 La prima linea, se dico Student * alice = [[alloc studente] init] cosa che fai? 261 00:13:46,000 --> 00:13:50,000 Questo primo studente qui, questo è probabilmente una classe. 262 00:13:50,000 --> 00:13:54,000 Non si tratta di una classe che ha scritto di Apple, ma è una classe che ho scritto. 263 00:13:54,000 --> 00:13:57,000 La prima cosa che voglio fare è che voglio allocare spazio per un nuovo studente, 264 00:13:57,000 --> 00:14:00,000 e poi voglio inizializzarlo, quindi questo mi restituisce 265 00:14:00,000 --> 00:14:05,000 questo oggetto nuovo studente, e sto memorizzando questo in una variabile chiamata Alice. 266 00:14:05,000 --> 00:14:07,000 Da dove viene quella classe viene? 267 00:14:07,000 --> 00:14:12,000 Beh, qui a sinistra sono tutti i file di diverse all'interno del mio progetto. 268 00:14:12,000 --> 00:14:16,000 Possiamo vedere qui ho un Student.h e Student.m. 269 00:14:16,000 --> 00:14:20,000 Il file. H, lo ricordiamo, è dove dichiaro tutte le cose 270 00:14:20,000 --> 00:14:22,000 che esistono all'interno della classe. 271 00:14:22,000 --> 00:14:25,000 >> Diamo uno sguardo a questo. 272 00:14:25,000 --> 00:14:29,000 Va bene, qui abbiamo questa interfaccia @, e questo dice che viene qui 273 00:14:29,000 --> 00:14:33,000 le dichiarazioni di tutto ciò che esiste all'interno della mia classe. 274 00:14:33,000 --> 00:14:36,000 Poi ho due punti. Poi ho questa cosa NSObject. 275 00:14:36,000 --> 00:14:40,000 Questo significa che due punti po eredità stavamo discutendo un po 'prima. 276 00:14:40,000 --> 00:14:43,000 Questo dice tutto quello che un NSObject può fare 277 00:14:43,000 --> 00:14:46,000 dove NSObject è questa classe scritto da qualcun altro, 278 00:14:46,000 --> 00:14:50,000 tutto questo può fare NSObject Voglio essere in grado di farlo. 279 00:14:50,000 --> 00:14:54,000 Dicendo: NSObject che significa che in pratica 280 00:14:54,000 --> 00:14:58,000 ereditato tutte le funzionalità di un'altra classe. 281 00:14:58,000 --> 00:15:02,000 Questo mi ha dato un sacco di diversi metodi e proprietà che posso utilizzare. 282 00:15:02,000 --> 00:15:05,000 Quaggiù Sto creando 2 immobili. 283 00:15:05,000 --> 00:15:08,000 Ciò significa che il mio studente, se si trattasse di una struttura, queste sarebbero le 2 cose 284 00:15:08,000 --> 00:15:11,000 interno della mia struttura, in modo che ogni studente ha un nome 285 00:15:11,000 --> 00:15:14,000 che è una stringa, e uno studente ha anche un grado, 286 00:15:14,000 --> 00:15:17,000 che è un int. 287 00:15:17,000 --> 00:15:23,000 >> Infine, qui ho intenzione di creare un metodo per il mio studente. 288 00:15:23,000 --> 00:15:26,000 Ho chiamato il mio metodo, initWithName, e ci vuole un argomento, 289 00:15:26,000 --> 00:15:31,000 e questo argomento è una stringa, e ho chiamato il nome. 290 00:15:31,000 --> 00:15:35,000 Ora diamo un'occhiata a come in realtà abbiamo implementato questa classe. 291 00:15:35,000 --> 00:15:38,000 Ecco, ora sono all'interno del mio file. M, 292 00:15:38,000 --> 00:15:40,000 m per l'attuazione, credo. 293 00:15:40,000 --> 00:15:44,000 Ho la mia realizzazione, la mia fine, e qui è dove sto in realtà la definizione di 294 00:15:44,000 --> 00:15:47,000 cosa initWithName fa. 295 00:15:47,000 --> 00:15:50,000 Ho initWithName, il nome del mio parametro, e quindi questo 296 00:15:50,000 --> 00:15:53,000 è dove sto realtà la creazione di uno studente, 297 00:15:53,000 --> 00:15:56,000 e quindi questo è un po 'criptico, ma questo è una specie di boilerplate 298 00:15:56,000 --> 00:15:58,000 che si desidera includere nei costruttori. 299 00:15:58,000 --> 00:16:02,000 Questa funzione di inizializzazione qui, initWithName, è un tipo di costruzione. 300 00:16:02,000 --> 00:16:05,000 Tu sei fondamentalmente la costruzione di un nuovo oggetto studente 301 00:16:05,000 --> 00:16:07,000 e forse l'invio di alcuni dati all'interno di esso. 302 00:16:07,000 --> 00:16:11,000 La prima cosa che voglio fare è che voglio chiamare init su questa cosa super. 303 00:16:11,000 --> 00:16:15,000 >> Ricorda che quando ho detto di nuovo qui nel file. H 304 00:16:15,000 --> 00:16:21,000 che ogni cosa ha un NSObject uno studente ha anche. 305 00:16:21,000 --> 00:16:24,000 Ciò significa che quando creo uno studente quello che anch'io ho bisogno di fare è 306 00:16:24,000 --> 00:16:28,000 assicurarsi che il NSObject che sto ereditare tutti i dati da 307 00:16:28,000 --> 00:16:32,000 è inizializzato correttamente. 308 00:16:32,000 --> 00:16:36,000 Che cosa ho bisogno di dire è questo super è in realtà sta per fare riferimento alla classe padre 309 00:16:36,000 --> 00:16:39,000 che sto ereditando da, quindi voglio essere sicuro di inizializzare 310 00:16:39,000 --> 00:16:43,000 tutto quello che sto seconda prima di iniziare a provare a usarlo. 311 00:16:43,000 --> 00:16:46,000 Poi, se inizializzato correttamente che questo è proprio come dire se malloc 312 00:16:46,000 --> 00:16:50,000 non ha restituito nulla allora posso iniziare a impostare alcune proprietà. 313 00:16:50,000 --> 00:16:54,000 >> In JavaScript e PHP abbiamo questa parola chiave chiamato questo, 314 00:16:54,000 --> 00:16:58,000 e ciò di cui l'istanza corrente di una classe. 315 00:16:58,000 --> 00:17:00,000 In Objective-C che noi chiamiamo questa auto. 316 00:17:00,000 --> 00:17:04,000 Quando dico self.name, che significa che l'oggetto 317 00:17:04,000 --> 00:17:07,000 Ho appena creato quando ho detto alloc studente init, 318 00:17:07,000 --> 00:17:09,000 che sta per restituirmi un oggetto. 319 00:17:09,000 --> 00:17:12,000 Questo significa che voglio impostare il nome di tale oggetto 320 00:17:12,000 --> 00:17:15,000 a tutto ciò che ho appena superato trovi 321 00:17:15,000 --> 00:17:18,000 Proprio come in C, si accede ai membri di questo punto, 322 00:17:18,000 --> 00:17:21,000 così self.name dice il nome dell'oggetto studente 323 00:17:21,000 --> 00:17:24,000 sta ora per essere quello che trovi appena passato 324 00:17:24,000 --> 00:17:28,000 E così alla fine, posso tornare quindi dovrei tornare qualcosa. 325 00:17:28,000 --> 00:17:30,000 >> Domande? 326 00:17:30,000 --> 00:17:34,000 Ok, allora questa auto = super-init, 327 00:17:34,000 --> 00:17:37,000 se non completamente capire la roba eredità non ti preoccupare. 328 00:17:37,000 --> 00:17:40,000 Basta sapere che se si volesse fare un proprio metodo init solo 329 00:17:40,000 --> 00:17:42,000 farlo, e sarete pronti per partire. 330 00:17:42,000 --> 00:17:44,000 Si '. >> [Studente] Che cosa significa se stessi? 331 00:17:44,000 --> 00:17:49,000 Questo significa che quando si malloc qualcosa che abbiamo sempre controllato se fosse uguale a zero, 332 00:17:49,000 --> 00:17:51,000 e se fosse nullo, allora siamo usciti. 333 00:17:51,000 --> 00:17:55,000 Questa è la stessa cosa, perché se questo restituisce null, allora probabilmente stai andando a guasto seg 334 00:17:55,000 --> 00:17:57,000 se cominciamo cercando di manipolarla. 335 00:17:57,000 --> 00:18:01,000 Questa è la nostra classe di studenti. 336 00:18:01,000 --> 00:18:03,000 Questo significa che siamo in grado di inizializzare i nostri studenti in uno dei due modi. 337 00:18:03,000 --> 00:18:08,000 Se dico alloc studente init non sto usando questo metodo che ho appena scritto, 338 00:18:08,000 --> 00:18:11,000 e invece posso semplicemente dire alice.name, 339 00:18:11,000 --> 00:18:14,000 e ora ho intenzione di impostare il nome della proprietà. 340 00:18:14,000 --> 00:18:17,000 >> Allo stesso modo, se voglio usare questo metodo initWithName 341 00:18:17,000 --> 00:18:20,000 Posso semplicemente dire alloc, e quindi invece di dire init 342 00:18:20,000 --> 00:18:24,000 Io vado a chiamare il metodo che ho appena creato, e ho intenzione di passare in Bob. 343 00:18:24,000 --> 00:18:30,000 A questo punto, questo Bob oggetto ha un nome uguale a Bob. 344 00:18:30,000 --> 00:18:35,000 Ok, qui sto usando che NSMutableArray che abbiamo esaminato in precedenza. 345 00:18:35,000 --> 00:18:38,000 Sto assegnazione space.Then sto l'inizializzazione di una nuova matrice. 346 00:18:38,000 --> 00:18:40,000 Ho intenzione di aggiungere 2 cose ad esso. 347 00:18:40,000 --> 00:18:43,000 Questo array ora detiene oggetti studenti. 348 00:18:43,000 --> 00:18:46,000 Si noti che da nessuna parte ho dire che questo è un array di studenti. 349 00:18:46,000 --> 00:18:48,000 Ho detto che è un, periodo di array. 350 00:18:48,000 --> 00:18:50,000 Allora posso mettere quello all'interno di esso che voglio. 351 00:18:50,000 --> 00:18:52,000 Qui ho 2 oggetti. 352 00:18:52,000 --> 00:18:56,000 >> Infine, ho un altro oggetto qui, questo TF. 353 00:18:56,000 --> 00:18:59,000 Da noi in TF.h fondamentalmente la stessa cosa. 354 00:18:59,000 --> 00:19:01,000 Sto ereditando da NSObject, e tra l'altro, 355 00:19:01,000 --> 00:19:03,000 quando si crea classi di tutto questo è fatto per voi, 356 00:19:03,000 --> 00:19:06,000 questo tipo di interfaccia boilerplate. 357 00:19:06,000 --> 00:19:08,000 Ha una proprietà di studenti. 358 00:19:08,000 --> 00:19:15,000 Ho un paio di metodi qui che in realtà non fanno un bel po ', 359 00:19:15,000 --> 00:19:18,000 e quindi questo significa che dopo che ho creare questo oggetto TF 360 00:19:18,000 --> 00:19:23,000 Posso chiamare questo metodo su di grado in questo modo. 361 00:19:23,000 --> 00:19:26,000 Hai domande su Objective-C la sintassi prima di iniziare a muoversi in qualche altro 362 00:19:26,000 --> 00:19:30,000 interessante sviluppo applicazioni roba? 363 00:19:30,000 --> 00:19:34,000 >> Va bene, quindi cerchiamo di fare in realtà una applicazione per iPhone. 364 00:19:34,000 --> 00:19:39,000 Le classi principali che userete all'interno della vostra applicazione per iPhone sono chiamati controller di vista, 365 00:19:39,000 --> 00:19:42,000 e un controller di vista rappresenta sostanzialmente un unico schermo 366 00:19:42,000 --> 00:19:46,000 all'interno della vostra applicazione, quindi se sono in app musica, per esempio, 367 00:19:46,000 --> 00:19:50,000 un controller di vista potrebbe rappresentare la vista in cui visionare tutte le canzoni sul mio iPhone. 368 00:19:50,000 --> 00:19:53,000 Un altro controller della vista potrebbe essere quando si fa clic su un brano e iniziare a giocare 369 00:19:53,000 --> 00:19:55,000 o come sto il drill-down in artisti. 370 00:19:55,000 --> 00:19:59,000 Ciascuno di tali schermi diversi potrebbe essere rappresentato come un controller di vista diverso, 371 00:19:59,000 --> 00:20:04,000 e un controller di vista è in realtà solo una classe che dice come funziona questa schermata. 372 00:20:04,000 --> 00:20:07,000 Cose all'interno di un controller della vista, abbiamo intenzione di avere proprietà, 373 00:20:07,000 --> 00:20:10,000 quindi le cose come un pulsante sta per essere una proprietà del nostro controller della vista. 374 00:20:10,000 --> 00:20:13,000 >> Stiamo anche andando a disporre di metodi, e questi sono fondamentalmente i gestori di eventi. 375 00:20:13,000 --> 00:20:16,000 Questo metodo dice che quando si preme questo tasto 376 00:20:16,000 --> 00:20:19,000 Voglio fare qualcosa, e, infine, ancora una volta, 377 00:20:19,000 --> 00:20:24,000 abbiamo intenzione di utilizzare questa parola chiave auto per accedere all'istanza corrente. 378 00:20:24,000 --> 00:20:29,000 Per costruire interfacce in iOS è in realtà molto, molto facile. 379 00:20:29,000 --> 00:20:32,000 Hanno questa resistenza piacevole e l'interfaccia menu chiamato Interface Builder, 380 00:20:32,000 --> 00:20:37,000 e il Core 2 concetti che collegate i vostri Objective-C e Interface Builder 381 00:20:37,000 --> 00:20:40,000 sono IBOutlet e IBAction. 382 00:20:40,000 --> 00:20:44,000 Un IBOutlet dice semplicemente che se si dichiara una proprietà che è un pulsante, 383 00:20:44,000 --> 00:20:47,000 e si desidera collegarlo a qualcosa nella vostra interfaccia utente reale, 384 00:20:47,000 --> 00:20:49,000 si sta andando a dire che è una presa di corrente. 385 00:20:49,000 --> 00:20:51,000 Allo stesso modo, se si vuole rappresentare un gestore di eventi 386 00:20:51,000 --> 00:20:54,000 allora si sta andando a dire che è un'azione. 387 00:20:54,000 --> 00:20:57,000 >> Per cablare in realtà fino questa rappresentazione grafica 388 00:20:57,000 --> 00:21:00,000 e il tuo codice è molto, molto semplice. 389 00:21:00,000 --> 00:21:03,000 Se si desidera collegare un IBOutlet, tutto ciò che dovete fare è di controllare clic, 390 00:21:03,000 --> 00:21:05,000 e vedremo un esempio di questo davvero veloce. 391 00:21:05,000 --> 00:21:07,000 Sei tu che controlli fare clic su cui si dice View Controller. 392 00:21:07,000 --> 00:21:09,000 Stai andando a trascinare nell'interfaccia, o viceversa, 393 00:21:09,000 --> 00:21:13,000 se si desidera collegare un gestore di evento che si vuole trascinare dall'interfaccia 394 00:21:13,000 --> 00:21:15,000 nella direzione opposta. 395 00:21:15,000 --> 00:21:20,000 Diamo un'occhiata a un esempio molto semplice iOS. 396 00:21:20,000 --> 00:21:23,000 >> Creiamo un nuovo progetto. 397 00:21:23,000 --> 00:21:25,000 Ho intenzione di venire qui ad applicazione, 398 00:21:25,000 --> 00:21:28,000 e ho intenzione di fare clic su Applicazione Singola Vista. 399 00:21:28,000 --> 00:21:31,000 Ho intenzione di fare clic su Avanti. Darò il mio progetto un nome. 400 00:21:31,000 --> 00:21:33,000 Io lo chiamo Ciao. 401 00:21:33,000 --> 00:21:36,000 È interessante notare che Apple non si assume che si sta creando un prodotto 402 00:21:36,000 --> 00:21:38,000 in modo che si può vendere e possono fare i soldi. 403 00:21:38,000 --> 00:21:41,000 Quaggiù ho intenzione di dire che si tratta di una applicazione per iPhone. 404 00:21:41,000 --> 00:21:44,000 È possibile creare un app per iPad, o se si desidera creare una di quelle applicazioni 405 00:21:44,000 --> 00:21:47,000 che supporta entrambi i dispositivi che si possono fare anche questo. 406 00:21:47,000 --> 00:21:49,000 Si tratta di ciò che si desidera che il segno di spunta a guardare come. 407 00:21:49,000 --> 00:21:51,000 >> Si desidera utilizzare storyboard, che vedremo più avanti, 408 00:21:51,000 --> 00:21:54,000 e se lo desiderate utilizzare il conteggio automatico di riferimento, 409 00:21:54,000 --> 00:21:58,000 che è una bella caratteristica che ti impedisce di dover dire malloc e free. 410 00:21:58,000 --> 00:22:03,000 A meno che non si desidera chiamare malloc e free, avrei lasciate selezionata. 411 00:22:03,000 --> 00:22:07,000 Io fare clic su Avanti, e, infine, si tratta di andare a chiedere a me dove voglio salvarlo. 412 00:22:07,000 --> 00:22:14,000 Mi ha colpito di creare, e ci siamo. 413 00:22:14,000 --> 00:22:16,000 Ho creato un nuovo progetto. 414 00:22:16,000 --> 00:22:19,000 Nel corso qui a sinistra sono tutti i file che si trovano all'interno del mio progetto, 415 00:22:19,000 --> 00:22:22,000 e notare che ho un sacco, e non ho nemmeno fatto niente. 416 00:22:22,000 --> 00:22:24,000 IOS è grande. 417 00:22:24,000 --> 00:22:27,000 >> Ad esempio, qui questo ViewController.h, 418 00:22:27,000 --> 00:22:30,000 questo sta andando a rappresentare il mio primo controller di vista, 419 00:22:30,000 --> 00:22:32,000 in modo che la prima schermata all'interno della mia app. 420 00:22:32,000 --> 00:22:34,000 Ora sappiamo che cosa sta dicendo. 421 00:22:34,000 --> 00:22:36,000 Stiamo dicendo che chiamo questo ViewController classe, 422 00:22:36,000 --> 00:22:40,000 e un ViewController fa tutto ciò che un UIViewController fa, 423 00:22:40,000 --> 00:22:43,000 e questo, ancora una volta, è una classe che Apple ha scritto che fa un sacco di cose a portata di mano per noi 424 00:22:43,000 --> 00:22:46,000 come visualizzare la schermata. 425 00:22:46,000 --> 00:22:50,000 Qui è dove io possa effettivamente iniziare a definire ciò che il mio controller della vista fa, 426 00:22:50,000 --> 00:22:52,000 e si scopre che davvero non hanno bisogno di niente di tutto questo. 427 00:22:52,000 --> 00:22:55,000 Si tratta di codice standard che Apple mi dà gratuitamente. 428 00:22:55,000 --> 00:22:59,000 Ho bisogno che la prima linea, o non ho una classe, 429 00:22:59,000 --> 00:23:02,000 in modo da poter sbarazzarsi di quella e di sbarazzarsi di questo. 430 00:23:02,000 --> 00:23:05,000 Ok, allora questa è la mia schermata vuota. 431 00:23:05,000 --> 00:23:08,000 >> Ora clicca su questo MainStoryboard.storyboard, 432 00:23:08,000 --> 00:23:11,000 ed è qui che inizia a diventare interessante. 433 00:23:11,000 --> 00:23:14,000 Questo rappresenta la prima schermata sul mio app. 434 00:23:14,000 --> 00:23:17,000 Se voglio aggiungere un pulsante, in HTML ho dovuto creare un tag pulsante. 435 00:23:17,000 --> 00:23:20,000 In Android è necessario creare una variabile pulsante, 436 00:23:20,000 --> 00:23:23,000 ma in iOS se ho appena venuto qui in basso a destra 437 00:23:23,000 --> 00:23:27,000 e se clicco su questo terzo qui dove si dice oggetti, 438 00:23:27,000 --> 00:23:31,000 e posso scorrere verso il basso, oppure posso iniziare a cercare per il pulsante. 439 00:23:31,000 --> 00:23:35,000 E guarda, un pulsante, quindi se ho effettivamente trascinare questo proprio lì, 440 00:23:35,000 --> 00:23:38,000 Ho appena aggiunto un pulsante per questa schermata sul mio app. 441 00:23:38,000 --> 00:23:41,000 Se voglio modificare il testo, posso fare doppio clic su di esso, 442 00:23:41,000 --> 00:23:47,000 dire qualcosa di seducente come "Me Premere". 443 00:23:47,000 --> 00:23:51,000 Ok, ora se corro questo app, quindi abbiamo compilato, 444 00:23:51,000 --> 00:23:54,000 in modo da eseguirlo clicco sul pulsante play in alto a sinistra, e c'è la mia app. 445 00:23:54,000 --> 00:23:58,000 Io non ho fatto niente, e ho avuto un app iPhone dolce cercando. 446 00:23:58,000 --> 00:24:01,000 Se voglio fermarlo, è possibile fare clic sul pulsante di arresto 447 00:24:01,000 --> 00:24:03,000 perché è più divertente. 448 00:24:03,000 --> 00:24:07,000 >> Diciamo che io in realtà voglio che accada qualcosa quando si preme questo tasto. 449 00:24:07,000 --> 00:24:09,000 Per fare questo quello che devo fare è che ho bisogno di creare 450 00:24:09,000 --> 00:24:13,000 un gestore nuovo evento o un'azione. 451 00:24:13,000 --> 00:24:16,000 Questo significa che ho bisogno di creare un metodo che voglio essere chiamato 452 00:24:16,000 --> 00:24:18,000 quando si preme il pulsante, quindi cerchiamo di creare un nuovo metodo. 453 00:24:18,000 --> 00:24:20,000 Sono dentro di ViewController.h. 454 00:24:20,000 --> 00:24:22,000 Ho bisogno di dire che un metodo esiste. 455 00:24:22,000 --> 00:24:26,000 Ho bisogno di un primo trattino, perché ho intenzione di chiamare questo sul controller della vista. 456 00:24:26,000 --> 00:24:28,000 Ho bisogno di dare a questo un tipo. 457 00:24:28,000 --> 00:24:31,000 Il tipo di questo sarà che cosa IBAction che abbiamo visto in precedenza. 458 00:24:31,000 --> 00:24:35,000 Si tratta di un gestore di eventi, in modo che sta per restituire un IBAction, 459 00:24:35,000 --> 00:24:38,000 e questo è un suggerimento per XCode dire che 460 00:24:38,000 --> 00:24:40,000 questo è qualcosa che voglio collegare a qualcosa. 461 00:24:40,000 --> 00:24:45,000 Posso dare un nome, come buttonPressed, punto e virgola. 462 00:24:45,000 --> 00:24:48,000 >> Ora ho dichiarato un nuovo metodo all'interno della mia classe. 463 00:24:48,000 --> 00:24:50,000 Ho detto questo metodo deve esistere. 464 00:24:50,000 --> 00:24:53,000 Ora veniamo in ViewController.m, 465 00:24:53,000 --> 00:24:56,000 e diciamo ciò che questo metodo può fare. 466 00:24:56,000 --> 00:25:03,000 Se inizio a digitare, ad esempio, (void) buttonPressed 467 00:25:03,000 --> 00:25:06,000 Avviso XCode è davvero bello e autocompletes per me. 468 00:25:06,000 --> 00:25:09,000 E 'davvero meraviglioso. 469 00:25:09,000 --> 00:25:12,000 Si noti qui che all'interno del. File di m posso anche dire nulla, 470 00:25:12,000 --> 00:25:15,000 e questo è dovuto al fatto che IBAction non è realmente un tipo. 471 00:25:15,000 --> 00:25:19,000 In realtà è hashtag definito da qualche parte per essere un vuoto, 472 00:25:19,000 --> 00:25:22,000 e di nuovo, questo è solo un suggerimento per XCode che dice 473 00:25:22,000 --> 00:25:25,000 Voglio che questo sia un gestore di eventi, e vedremo perché in un attimo. 474 00:25:25,000 --> 00:25:28,000 Quando si preme questo tasto ho intenzione di fare qualcosa di fastidioso 475 00:25:28,000 --> 00:25:30,000 come visualizzare un popup. 476 00:25:30,000 --> 00:25:35,000 >> Per fare questo posso creare una nuova istanza di questa classe chiamata UIAlertView, 477 00:25:35,000 --> 00:25:39,000 e questa è una classe che Apple ha scritto che sta per visualizzare pop-up fastidiosi. 478 00:25:39,000 --> 00:25:43,000 Chiameremo questo servizio di avvisi pop-up, e ho 2 passi, lo ricordiamo, per la creazione di questo oggetto. 479 00:25:43,000 --> 00:25:46,000 La prima cosa che devi fare è allocare spazio. 480 00:25:46,000 --> 00:25:48,000 Voglio un UIAlertView. 481 00:25:48,000 --> 00:25:51,000 Voglio allocare spazio. Questo è il mio primo metodo. 482 00:25:51,000 --> 00:25:53,000 Il mio metodo successivo è che voglio inizializzarlo, 483 00:25:53,000 --> 00:25:58,000 e così ho questo grande metodo lungo chiamato initWithTitle. 484 00:25:58,000 --> 00:26:01,000 Questo è fondamentalmente andando a controllare ciò che dice questo popup. 485 00:26:01,000 --> 00:26:04,000 Il titolo del mio popup può essere ciao. 486 00:26:04,000 --> 00:26:08,000 Il messaggio di questo pop-up può essere "Questo è iOS." 487 00:26:08,000 --> 00:26:10,000 Cosa delegato, non so di cosa si tratta. 488 00:26:10,000 --> 00:26:13,000 Diciamo che non è niente. 489 00:26:13,000 --> 00:26:18,000 Ora il pulsante che sta per apparire può dire qualcosa del tipo "E 'sicuro" 490 00:26:18,000 --> 00:26:24,000 e io non voglio altri tasti, quindi cerchiamo di eliminare tale e chiudere la staffa. 491 00:26:24,000 --> 00:26:27,000 >> Ok, ho creato uno in più. Ecco fatto. 492 00:26:27,000 --> 00:26:30,000 Questo è come posso creare un nuovo popup. 493 00:26:30,000 --> 00:26:35,000 Se voglio mostrare effettivamente il popup che voglio chiamare il metodo show. 494 00:26:35,000 --> 00:26:38,000 Per fare questo posso dire alert e spettacolo, 495 00:26:38,000 --> 00:26:40,000 e ancora, completamento automatico era super bella. 496 00:26:40,000 --> 00:26:42,000 Se ho dimenticato quello che era, se ho scritto in s, 497 00:26:42,000 --> 00:26:45,000 Posso scorrere qui per capire di cosa si trattasse, 498 00:26:45,000 --> 00:26:48,000 e filtra bene. 499 00:26:48,000 --> 00:26:52,000 Ora ho creato questo nuovo popup. 500 00:26:52,000 --> 00:26:55,000 Torneremo di quanto delegato significa più tardi, 501 00:26:55,000 --> 00:26:58,000 e ora voglio dire che voglio questo metodo per essere licenziato 502 00:26:58,000 --> 00:27:01,000 quando si preme il pulsante, così ho intenzione di tornare al mio storyboard, 503 00:27:01,000 --> 00:27:04,000 e voglio allegare ora questo IBAction. 504 00:27:04,000 --> 00:27:06,000 La prima cosa che voglio fare è fare clic sul pulsante. 505 00:27:06,000 --> 00:27:08,000 Quando si preme questo tasto che voglio che accada qualcosa. 506 00:27:08,000 --> 00:27:10,000 Io non ho intenzione di tenere premuto il controllo. 507 00:27:10,000 --> 00:27:13,000 Ho intenzione di fare clic e trascinare con il pulsante 508 00:27:13,000 --> 00:27:15,000 di qui dove si dice View Controller. 509 00:27:15,000 --> 00:27:17,000 Possiamo vedere che si illumina piacevolmente l'alto. 510 00:27:17,000 --> 00:27:22,000 >> Se lascio andare con il mio mouse ora ho questo popup qui dove ho alcune opzioni. 511 00:27:22,000 --> 00:27:24,000 Uno di questi sono gli eventi che posso registrare. 512 00:27:24,000 --> 00:27:28,000 Si tratta di tutti quei metodi che ho dichiarato nel mio file h come IBActions. 513 00:27:28,000 --> 00:27:31,000 Questo è il modo XCode sa cosa deve apparire in questa piccola lista, 514 00:27:31,000 --> 00:27:33,000 quindi questo è solo un suggerimento. 515 00:27:33,000 --> 00:27:37,000 Se si fa clic sul pulsante premuto, ora ho registrato il gestore eventi. 516 00:27:37,000 --> 00:27:41,000 In JavaScript abbiamo dovuto dire che ho un po 'di codice che ha registrato il gestore eventi. 517 00:27:41,000 --> 00:27:43,000 In Objective-C è stato davvero così facile. 518 00:27:43,000 --> 00:27:46,000 Se corro di nuovo 519 00:27:46,000 --> 00:27:49,000 Ora quando si preme il pulsante il mio gestore di eventi sta per sparare, 520 00:27:49,000 --> 00:27:51,000 e ho intenzione di ottenere questo popup. 521 00:27:51,000 --> 00:27:54,000 Super, super semplice lì. 522 00:27:54,000 --> 00:27:57,000 >> Se mai voglia di vedere tutti gli eventi che accadono da registrare 523 00:27:57,000 --> 00:28:00,000 su un componente se clicco su questo pulsante 524 00:28:00,000 --> 00:28:02,000 e vengo qui a destra 525 00:28:02,000 --> 00:28:05,000 prima si può vedere qui posso fare cose come il tipo di pulsante, 526 00:28:05,000 --> 00:28:08,000 quindi se volete uno di quelli che ho o il pulsante Aggiungi Contatto 527 00:28:08,000 --> 00:28:10,000 o qualsiasi altra cosa. 528 00:28:10,000 --> 00:28:13,000 Se voglio vedere tutti gli eventi che si trovano su questo pulsante 529 00:28:13,000 --> 00:28:16,000 se ho fatto tutta la strada qui a destra 530 00:28:16,000 --> 00:28:19,000 possiamo vedere qui in occasione degli eventi che ho tutti questi diversi eventi. 531 00:28:19,000 --> 00:28:23,000 Posso premere il pulsante, quando ho lasciato andare il tasto, quando si fa doppio tap o qualsiasi altra cosa, 532 00:28:23,000 --> 00:28:26,000 e quello che ho appena registrato questo evento chiamato Ritocco All'interno, 533 00:28:26,000 --> 00:28:29,000 e questo dice che non appena il mio dito si stacca il pulsante 534 00:28:29,000 --> 00:28:32,000 tale evento sta per fuoco, e questo è esattamente quello che è appena accaduto. 535 00:28:32,000 --> 00:28:36,000 Questa è una specie di manifestazione pulsante predefinito premuto. 536 00:28:36,000 --> 00:28:39,000 >> Tutte le domande fino ad ora? 537 00:28:39,000 --> 00:28:43,000 Va bene, è così che possiamo iniziare a collegare le cose nel nostro codice 538 00:28:43,000 --> 00:28:46,000 in cose all'interno della nostra interfaccia. 539 00:28:46,000 --> 00:28:49,000 Ricordate la prima cosa che abbiamo dovuto fare è stato quello di trovare il codice, 540 00:28:49,000 --> 00:28:54,000 e poi abbiamo collegato l'interfaccia al codice, 541 00:28:54,000 --> 00:28:57,000 e c'è la nostra prima applicazione. 542 00:28:57,000 --> 00:29:00,000 Ok, era veramente fresco, e abbiamo creato questo pulsante. 543 00:29:00,000 --> 00:29:03,000 E se non ci si vuole avere per creare un gruppo di proprietà 544 00:29:03,000 --> 00:29:05,000 che rappresenta questi pulsanti? 545 00:29:05,000 --> 00:29:08,000 Ad esempio, in punta di Tic Tac io ho 9 pulsanti, 546 00:29:08,000 --> 00:29:11,000 e sarebbe super, super-fastidioso dover trascinare 9 volte 547 00:29:11,000 --> 00:29:14,000 o se ho dovuto fare Tic Tac Toe con 81 invece di 9 548 00:29:14,000 --> 00:29:17,000 e ho dovuto trascinare 81 volte, e questo è zoppo. 549 00:29:17,000 --> 00:29:20,000 Quello che possiamo fare, invece, è molto simile a un HTML 550 00:29:20,000 --> 00:29:23,000 quando abbiamo avuto cose come ID e nomi e siamo in grado di cercare le cose 551 00:29:23,000 --> 00:29:27,000 dal loro ID, c'è un concetto simile in iOS chiamato tag. 552 00:29:27,000 --> 00:29:31,000 >> Un tag è semplicemente un identificatore numerico univoco per un componente. 553 00:29:31,000 --> 00:29:34,000 Se dico questo ha un tag di 0, per esempio, 554 00:29:34,000 --> 00:29:38,000 se creo un pulsante e dare un tag di 0, e vedremo come farlo in un secondo, 555 00:29:38,000 --> 00:29:41,000 se voglio ottenere quel tasto posso semplicemente dire che desidera chiamare 556 00:29:41,000 --> 00:29:45,000 viewWithTag il metodo sull'oggetto qui, 557 00:29:45,000 --> 00:29:48,000 la self.view, che rappresenta la schermata corrente, per esempio. 558 00:29:48,000 --> 00:29:53,000 Se chiamo il metodo che viewWithTag, ho intenzione di tirare indietro il pulsante con etichetta 0. 559 00:29:53,000 --> 00:29:58,000 Diamo un'occhiata a questo edificio Tic Tac Toe. 560 00:29:58,000 --> 00:30:01,000 In primo luogo, questo è il mio storyboard. 561 00:30:01,000 --> 00:30:05,000 Ho creato questi 10 pulsanti dell'interfaccia utente. 562 00:30:05,000 --> 00:30:07,000 Si noti che sono tutti della stessa dimensione. 563 00:30:07,000 --> 00:30:11,000 Se si fa clic su uno di questi e torno qui su questo lato destro 564 00:30:11,000 --> 00:30:15,000 vedrai ho regolato il carattere proprio qui, così ho fatto il carattere un po 'più grande, 565 00:30:15,000 --> 00:30:19,000 ma quello che ho fatto è stato anche a impostare questo tag. 566 00:30:19,000 --> 00:30:23,000 Ho detto che questo ha un tag di 1, e che è in alto a sinistra. 567 00:30:23,000 --> 00:30:26,000 >> Ora, se si fa clic su un altro pulsante, come questo secondo qui, 568 00:30:26,000 --> 00:30:29,000 Ora vedrai che la mia tag è 2. 569 00:30:29,000 --> 00:30:32,000 Ognuno di questi pulsanti ha solo un unico tag, 570 00:30:32,000 --> 00:30:35,000 e quindi questo è più avanti come ho intenzione di iniziare a interagire 571 00:30:35,000 --> 00:30:38,000 con la mia app. 572 00:30:38,000 --> 00:30:40,000 Questo è tutto all'interno di un controllore vista, 573 00:30:40,000 --> 00:30:42,000 ma ecco quello che abbiamo. 574 00:30:42,000 --> 00:30:44,000 Noi disponiamo di 3 immobili qui. 575 00:30:44,000 --> 00:30:49,000 Il primo e ultimo stanno per rappresentare lo stato della mia tavola. 576 00:30:49,000 --> 00:30:53,000 Fondamentalmente questo primo è un array che rappresenta dove le X e O sono. 577 00:30:53,000 --> 00:30:57,000 Questo altro qui ci dice chi è il turno. 578 00:30:57,000 --> 00:31:01,000 Avrete notato che ho anche queste cose qui. 579 00:31:01,000 --> 00:31:05,000 Prima, quando abbiamo dichiarato proprietà abbiamo dato loro un nome e un tipo. 580 00:31:05,000 --> 00:31:08,000 Si può anche dare loro alcune informazioni aggiuntive qui. 581 00:31:08,000 --> 00:31:11,000 Questo primo dice nonatomic, e ciò che questo dice 582 00:31:11,000 --> 00:31:16,000 è fondamentalmente solo una cosa sarà mai cercare di accedere a questa variabile alla volta. 583 00:31:16,000 --> 00:31:19,000 Si potrebbe fare applicazioni più complesse che sono multi-threaded, 584 00:31:19,000 --> 00:31:22,000 e così torna in Scratch abbiamo avuto diversi thread, 585 00:31:22,000 --> 00:31:25,000 e sprite differenti che si possono fare cose diverse allo stesso tempo. 586 00:31:25,000 --> 00:31:29,000 >> Se questo non è il caso, che non è in tutto ciò che ci troveremmo di fronte a, 587 00:31:29,000 --> 00:31:33,000 se diciamo nonatomic che è in realtà sta per rendere le cose un po 'più veloce. 588 00:31:33,000 --> 00:31:37,000 Abbiamo anche questa cosa chiamata assegnazione, forte o debole. 589 00:31:37,000 --> 00:31:40,000 Questo assegnare dice solo che si tratta di un tipo standard. 590 00:31:40,000 --> 00:31:43,000 Questo non è un oggetto o un puntatore, perché questo è solo un bool, 591 00:31:43,000 --> 00:31:46,000 così bool è incorporato in Objective-C. 592 00:31:46,000 --> 00:31:49,000 Questo dice di non provare a fare niente di eccezionale con i puntatori qui. 593 00:31:49,000 --> 00:31:51,000 Si tratta di un normale scaler vecchio. 594 00:31:51,000 --> 00:31:54,000 Forte e debole, questo debole dice che in realtà 595 00:31:54,000 --> 00:31:57,000 Voglio che questo puntare a qualcosa nel controller della vista. 596 00:31:57,000 --> 00:32:00,000 Non ho intenzione di allocare in atto o in init questo me stesso. 597 00:32:00,000 --> 00:32:04,000 Il costruttore di interfaccia, quando si esegue l'applicazione, sta andando a gestire tutto ciò che l'inizializzazione. 598 00:32:04,000 --> 00:32:07,000 Se dico debole, che dice qualcun altro sta per essere creare questo. 599 00:32:07,000 --> 00:32:09,000 Se dico forte, questo dice che ho intenzione di essere quello 600 00:32:09,000 --> 00:32:12,000 che è la creazione di questo oggetto tavola, 601 00:32:12,000 --> 00:32:14,000 e così qui ho qualche altro metodo qui, 602 00:32:14,000 --> 00:32:18,000 per esempio, un'azione per quando il pulsante viene premuto nuovo gioco, 603 00:32:18,000 --> 00:32:20,000 un ricorso per quando uno degli altri pulsanti sono premuti, 604 00:32:20,000 --> 00:32:23,000 e et cetera. 605 00:32:23,000 --> 00:32:26,000 >> Non entrare in troppo gran parte della logica di Tic Tac Toe, 606 00:32:26,000 --> 00:32:30,000 anche se è molto eccitante, ma diamo un'occhiata a 607 00:32:30,000 --> 00:32:33,000 alcune delle cose che possiamo fare all'interno di iOS. 608 00:32:33,000 --> 00:32:35,000 Questo metodo nuovo gioco sta per essere licenziato 609 00:32:35,000 --> 00:32:37,000 ogni volta che si preme il pulsante nuovo gioco. 610 00:32:37,000 --> 00:32:41,000 Per collegare che fino ho semplicemente venire al mio storyboard. 611 00:32:41,000 --> 00:32:43,000 Ho cliccato su nuovo gioco. 612 00:32:43,000 --> 00:32:47,000 Se io vengo qui a destra vedo che 613 00:32:47,000 --> 00:32:50,000 Touch Up Inside è collegato al metodo newGame. 614 00:32:50,000 --> 00:32:53,000 Questo è il motivo per cui questo sta per essere licenziato. 615 00:32:53,000 --> 00:32:56,000 Il metodo newGame sta per fare un po 'set up. 616 00:32:56,000 --> 00:32:59,000 E 'intenzione di dire che voglio che tu per cancellare lo stato della scheda. 617 00:32:59,000 --> 00:33:01,000 Questo è un metodo piacevole sul mutevoli array. 618 00:33:01,000 --> 00:33:03,000 Questo sta a dire che è ora è il turno di X, 619 00:33:03,000 --> 00:33:07,000 e ora ho intenzione di approfittare di questa cosa viewWithTag. 620 00:33:07,000 --> 00:33:11,000 >> So che i miei pulsanti hanno i tag 1-9, 621 00:33:11,000 --> 00:33:13,000 e questo è qualcosa che ho scelto arbitrariamente. 622 00:33:13,000 --> 00:33:15,000 Se voglio impostare il testo di ogni pulsante per essere vuoto 623 00:33:15,000 --> 00:33:17,000 perché ho appena iniziato un nuovo gioco e io non ne voglio 624 00:33:17,000 --> 00:33:20,000 Xs o O per essere rimasto io possa fare questo. 625 00:33:20,000 --> 00:33:24,000 Posso dire che voglio la vista con il tag, 1, 2, 3, 4 eccetera. 626 00:33:24,000 --> 00:33:27,000 Questo tirerà un pulsante diverso ogni volta. 627 00:33:27,000 --> 00:33:30,000 Qui ho intenzione di lanciare a UIButton. 628 00:33:30,000 --> 00:33:33,000 Proprio come si possa mettere in int a float e viceversa 629 00:33:33,000 --> 00:33:37,000 questo dice che voglio lanciare ad un UIButton. 630 00:33:37,000 --> 00:33:40,000 Questo significa che il tipo di questo sarà un * UIButton 631 00:33:40,000 --> 00:33:43,000 a causa di puntatori, ma non preoccupatevi, non sono piu 'paura. 632 00:33:43,000 --> 00:33:47,000 >> Una volta che ho questo pulsante ho intenzione di chiamare un metodo su di esso. 633 00:33:47,000 --> 00:33:50,000 Questo metodo viene chiamato setTitle forState, e quindi questo dice 634 00:33:50,000 --> 00:33:53,000 Voglio impostare il testo del pulsante di essere la stringa vuota, 635 00:33:53,000 --> 00:33:57,000 e io voglio che sia una stringa vuota quando non è premuto. 636 00:33:57,000 --> 00:34:01,000 Se sto usando questo metodo, posso modificare il testo del pulsante 637 00:34:01,000 --> 00:34:04,000 non appena qualcuno si colpisce, ma vogliamo dire quando il pulsante è appena seduto lì 638 00:34:04,000 --> 00:34:07,000 Voglio che il testo sia vuota. 639 00:34:07,000 --> 00:34:10,000 Infine, stiamo andando a inizializzare la mia tavola, 640 00:34:10,000 --> 00:34:12,000 e ho intenzione di dire che tutto ciò che è attualmente a 0, 641 00:34:12,000 --> 00:34:15,000 quindi questa scheda membri immutabile è un mutevole array, 642 00:34:15,000 --> 00:34:21,000 il che significa che è possibile chiamare il metodo addObject e solo uno 0 all'interno di esso. 643 00:34:21,000 --> 00:34:23,000 Questo è quello che succede quando creo una nuova partita. 644 00:34:23,000 --> 00:34:25,000 >> Diamo un'occhiata a un altro. 645 00:34:25,000 --> 00:34:28,000 Questo metodo qui è il IBAction che sta per essere premuto 646 00:34:28,000 --> 00:34:31,000 ogni volta che una di quelle piazze è premuto. 647 00:34:31,000 --> 00:34:33,000 Ora abbiamo un po 'di Tic Tac Toe logica qui. 648 00:34:33,000 --> 00:34:36,000 Abbiamo capire a chi tocca, 649 00:34:36,000 --> 00:34:39,000 e sulla base di che ci sia impostare una X o una O, 650 00:34:39,000 --> 00:34:43,000 ma ci accorgiamo che stiamo riutilizzando questo stesso gestore di eventi 651 00:34:43,000 --> 00:34:45,000 per ognuno di questi pulsanti. 652 00:34:45,000 --> 00:34:49,000 Questo significa che non si dispone di un metodo per il pulsante in alto a sinistra, 653 00:34:49,000 --> 00:34:52,000 un metodo diverso per il pulsante in basso a destra, anche se ho potuto farlo. 654 00:34:52,000 --> 00:34:54,000 Non sarebbe davvero un buon design. 655 00:34:54,000 --> 00:34:57,000 Quello che sto facendo qui è realtà sto andando a determinare 656 00:34:57,000 --> 00:35:00,000 ciò il tag del pulsante che è stato premuto. 657 00:35:00,000 --> 00:35:04,000 Si noti che questo metodo di esecuzione accetta un argomento. 658 00:35:04,000 --> 00:35:07,000 Si chiama mittente, e ciò che si sta mittente mittente sta per 659 00:35:07,000 --> 00:35:10,000 rappresentano esattamente ciò che è stato dato seguito al momento. 660 00:35:10,000 --> 00:35:15,000 Se si preme un pulsante, questo mittente sarà che UIButton 661 00:35:15,000 --> 00:35:18,000 che ho effettivamente premuto, in modo che significa che quel UIButton 662 00:35:18,000 --> 00:35:20,000 ha un tag, perché ho creato un tag. 663 00:35:20,000 --> 00:35:23,000 >> Se voglio arrivare al tag posso semplicemente dire 664 00:35:23,000 --> 00:35:26,000 Voglio il tag del mittente, 665 00:35:26,000 --> 00:35:28,000 e di nuovo, ho appena colato a un UIButton. 666 00:35:28,000 --> 00:35:32,000 Mi è capitato di sapere che il mittente sarà un UIButton. 667 00:35:32,000 --> 00:35:34,000 Non sempre deve essere un UIButton. 668 00:35:34,000 --> 00:35:36,000 Potrei, ad esempio, registrare il gestore stesso evento 669 00:35:36,000 --> 00:35:38,000  per uno per un pulsante, una per un cursore. 670 00:35:38,000 --> 00:35:40,000 In questo caso, so che sono tutti i pulsanti, così ho intenzione di dire 671 00:35:40,000 --> 00:35:43,000 Voglio che questo sia un pulsante, e poi posso ottenere il tag, 672 00:35:43,000 --> 00:35:48,000 e dal tag adesso so dove mi trovo all'interno del consiglio di amministrazione. 673 00:35:48,000 --> 00:35:51,000 Allora posso semplicemente impostare X o la O, può capovolgere il turno, 674 00:35:51,000 --> 00:35:54,000 controllare chi ha vinto, et cetera. 675 00:35:54,000 --> 00:35:59,000 >> Hai domande su questo fino ad ora? 676 00:35:59,000 --> 00:36:02,000 Va bene, tutto il codice che abbiamo pubblicato online-non vogliamo entrare in troppo 677 00:36:02,000 --> 00:36:06,000 della logica Tic Tac Toe, ma ora si può vedere che in realtà 678 00:36:06,000 --> 00:36:09,000 tutto quello che stiamo facendo è che stiamo ciclare su questa matrice, 679 00:36:09,000 --> 00:36:13,000 quindi abbiamo un paio di cicli for qui, e stiamo solo confrontando a vedere 680 00:36:13,000 --> 00:36:18,000 abbiamo una partita in tutte le righe, una partita in una colonna o qualcosa di simile. 681 00:36:18,000 --> 00:36:21,000 Per eseguire questa applicazione in realtà, se si tocca su uno di questi pulsanti 682 00:36:21,000 --> 00:36:24,000 che il metodo di gioco è stato licenziato, in modo che significa che ho appena impostato 683 00:36:24,000 --> 00:36:31,000 il pulsante da una X, così ora questo pulsante sarà un O, e così via, 684 00:36:31,000 --> 00:36:35,000 e così è così che stiamo iniziando a interagire con questa applicazione singola pagina. 685 00:36:35,000 --> 00:36:38,000 >> Ci pubblicare il codice, quindi sentitevi liberi di sfogliare che, 686 00:36:38,000 --> 00:36:43,000 ma andiamo ora parlare di alcune applicazioni che sono più di una pagina. 687 00:36:43,000 --> 00:36:47,000 Per quanto emozionante come Tic Tac Toe è stato, un sacco di applicazioni all'interno di iOS 688 00:36:47,000 --> 00:36:50,000 sono un po 'di questi drill down cose con più schermi. 689 00:36:50,000 --> 00:36:54,000 Il primo concetto che abbiamo bisogno di parlare sono i protocolli, 690 00:36:54,000 --> 00:36:57,000 e un protocollo è semplicemente un insieme di metodi 691 00:36:57,000 --> 00:36:59,000 che si può promettere da definire. 692 00:36:59,000 --> 00:37:02,000 Se ho creato questo nuovo protocollo con 2 metodi, il primo, 693 00:37:02,000 --> 00:37:05,000 se il tipo restituito è void, ho chiamato foo. 694 00:37:05,000 --> 00:37:07,000 E 'non accetta argomenti. Ho un altro metodo. 695 00:37:07,000 --> 00:37:11,000 Esso restituisce un int. Ho chiamato bar, e ci vuole un argomento. 696 00:37:11,000 --> 00:37:14,000 Tutto questo protocollo è che si chiama SomeProtocol qui, 697 00:37:14,000 --> 00:37:19,000 questo è un insieme di cose che qualcuno può implementare. 698 00:37:19,000 --> 00:37:22,000 Non ho all'interno di questo protocollo ha detto cosa fa foo. 699 00:37:22,000 --> 00:37:26,000 Al contrario, dico solo che si potrebbe definire foo se si vuole. 700 00:37:26,000 --> 00:37:30,000 Se Sto creando un controller della vista o la creazione di una classe 701 00:37:30,000 --> 00:37:33,000 Posso all'interno di quella promessa classe per implementare 702 00:37:33,000 --> 00:37:40,000 alcuni di questi metodi, così per esempio, se dire 703 00:37:40,000 --> 00:37:43,000 questo dice ora sto facendo una promessa a voi che all'interno 704 00:37:43,000 --> 00:37:50,000 di questa classe controller della vista avrò definizioni sia per foo e bar. 705 00:37:50,000 --> 00:37:52,000 >> Perché è così utile? 706 00:37:52,000 --> 00:37:55,000 Un sacco di componenti all'interno di iOS approfittare di questo 707 00:37:55,000 --> 00:37:58,000 design pattern chiamato delega, e ciò che dice delegazione 708 00:37:58,000 --> 00:38:01,000 è che, per esempio, se ho una casella di testo 709 00:38:01,000 --> 00:38:04,000 e ci sono alcuni eventi che possono essere registrati all'interno della mia casella di testo, 710 00:38:04,000 --> 00:38:07,000 invece di creare eventi separati quello che posso fare è che posso dire 711 00:38:07,000 --> 00:38:10,000 il delegato di questa casella di testo sarà qualche oggetto. 712 00:38:10,000 --> 00:38:13,000 Quando dico che si tratta di un delegato, ora che significa che 713 00:38:13,000 --> 00:38:16,000 ogni volta che un evento sarebbe stato licenziato nella casella di testo 714 00:38:16,000 --> 00:38:18,000 piuttosto che per registrarlo o qualcosa di simile 715 00:38:18,000 --> 00:38:21,000 è solo andare a chiamare un metodo sul delegato. 716 00:38:21,000 --> 00:38:24,000 Per esempio, all'interno della mia casella di testo ho un metodo per quando si preme 717 00:38:24,000 --> 00:38:27,000 fatto che il pulsante in basso a destra, 718 00:38:27,000 --> 00:38:30,000 e così, piuttosto che registrare gestore di eventi quello che posso dire è 719 00:38:30,000 --> 00:38:34,000 casella di testo, ecco un oggetto che voglio che chiamare un metodo su 720 00:38:34,000 --> 00:38:37,000 ogni volta che qualcuno preme il pulsante Fine, 721 00:38:37,000 --> 00:38:40,000 e ciò significa che tale oggetto deve implementare un protocollo 722 00:38:40,000 --> 00:38:45,000 che dice che io prometto di definire che l'azione pulsante di fatto, 723 00:38:45,000 --> 00:38:47,000 perché se non definisce tale metodo e premere Fine, 724 00:38:47,000 --> 00:38:49,000 allora sta per essere fonte di confusione. 725 00:38:49,000 --> 00:38:55,000 >> Diamo un'occhiata a un esempio. 726 00:38:55,000 --> 00:38:58,000 Qui ho semplicemente una casella di testo, 727 00:38:58,000 --> 00:39:04,000 e una delle proprietà di questa casella di testo qui da noi su questo lato destro è il delegato. 728 00:39:04,000 --> 00:39:06,000 Questa è una proprietà della classe. 729 00:39:06,000 --> 00:39:09,000 Quello che ho fatto qui è che ho cliccato il controllo, e ho trascinato da questo luogo qui 730 00:39:09,000 --> 00:39:13,000 il controller della vista, e che ora dice il delegato di questa casella di testo 731 00:39:13,000 --> 00:39:18,000 sarà il controller della vista. 732 00:39:18,000 --> 00:39:20,000 Ciò significa che quando alcune azioni accadere, piuttosto che la registrazione 733 00:39:20,000 --> 00:39:25,000 gestori di eventi separati che voglio di inviare loro al delegato. 734 00:39:25,000 --> 00:39:28,000 Ora diamo uno sguardo al mio controller della vista. 735 00:39:28,000 --> 00:39:32,000 All'interno del file. H ho fatto una promessa. 736 00:39:32,000 --> 00:39:36,000 Ho promesso di implementare alcuni metodi all'interno di questo protocollo 737 00:39:36,000 --> 00:39:38,000 chiamato UITextFieldDelegate, e di nuovo, 738 00:39:38,000 --> 00:39:42,000 questo è solo un po 'elenco di alcune cose che possono scegliere di implementare. 739 00:39:42,000 --> 00:39:46,000 >> Se vengo qui nel mio. M file, ho implementato uno di questi metodi. 740 00:39:46,000 --> 00:39:49,000 Ho chiamato textFieldShouldReturn 741 00:39:49,000 --> 00:39:52,000 perché è quello che è stato chiamato all'interno del protocollo. 742 00:39:52,000 --> 00:39:57,000 E ora ogni volta che premete il bottone interno fatto di quel campo di testo 743 00:39:57,000 --> 00:40:00,000 questo è ciò che sta per ottenere chiamato, quindi non ho fatto registrare un gestore eventi. 744 00:40:00,000 --> 00:40:03,000 Ho collegato il delegato, e ogni volta che questo evento viene generato 745 00:40:03,000 --> 00:40:08,000 questo è il metodo che verrà chiamato, quindi se vengo qui al mio storyboard ed eseguirlo- 746 00:40:08,000 --> 00:40:11,000 mentre che sta caricando si può vedere cosa fa. 747 00:40:11,000 --> 00:40:13,000 Sul mio schermo ho 2 cose. 748 00:40:13,000 --> 00:40:16,000 Ho questo campo di testo, e ho questa etichetta. 749 00:40:16,000 --> 00:40:19,000 Sto semplicemente dicendo che voglio il testo di questa etichetta 750 00:40:19,000 --> 00:40:23,000 essere uguale a quello che l'utente digitato all'interno del campo di testo. 751 00:40:23,000 --> 00:40:26,000 Questa linea successiva qui è semplicemente un metodo che sto chiamando 752 00:40:26,000 --> 00:40:29,000 sul campo di testo che dice che io voglio che tu per nascondere la tastiera. 753 00:40:29,000 --> 00:40:33,000 Questo è solo il metodo arbitrario che Apple ha scelto. 754 00:40:33,000 --> 00:40:38,000 >> Anche in questo caso, prima di me tutto quello che ha dovuto cablare tutto, quindi sono venuto qui. 755 00:40:38,000 --> 00:40:42,000 Dal controller della vista ho trascinate sopra alla casella di testo. 756 00:40:42,000 --> 00:40:46,000 Ho lasciato andare, e posso vedere che posso fare questo la proprietà campo di testo 757 00:40:46,000 --> 00:40:49,000 poiché qui nel controller della vista che ho definito una proprietà 758 00:40:49,000 --> 00:40:52,000 che è un IBOutlet di un campo di testo. 759 00:40:52,000 --> 00:40:55,000 Questo dice che posso cablare questa proprietà fino 760 00:40:55,000 --> 00:40:59,000 per un campo di testo nel mio utente. 761 00:40:59,000 --> 00:41:03,000 Ora, quando si fa clic su questo posso iniziare a digitare. 762 00:41:03,000 --> 00:41:06,000 Ora, se si fa clic sul pulsante di fatto questo sta andando a fuoco 763 00:41:06,000 --> 00:41:08,000 un evento che ora posso rispondere. 764 00:41:08,000 --> 00:41:10,000 Non ci sono gestori di eventi. 765 00:41:10,000 --> 00:41:13,000 È così che ho appena risposto a quel pulsante fare. 766 00:41:13,000 --> 00:41:15,000 Ha senso? 767 00:41:15,000 --> 00:41:20,000 >> Non si tratta di un modello di progettazione che-non si potrebbe mai vi trovate 768 00:41:20,000 --> 00:41:23,000 creare il proprio protocollo, ma è sufficiente sapere che un po 'di 769 00:41:23,000 --> 00:41:27,000 diverse componenti iOS registrare gli eventi in modi diversi. 770 00:41:27,000 --> 00:41:29,000 Pulsanti, per esempio, utilizzare tali IBActions. 771 00:41:29,000 --> 00:41:32,000 Campi di testo, invece, si intende utilizzare delegati. 772 00:41:32,000 --> 00:41:36,000 Possiamo vedere e si può guardare tutto questo all'interno di documentazione. 773 00:41:36,000 --> 00:41:41,000 A proposito, c'è in realtà un sacco di roba UI integrato in iOS per voi, 774 00:41:41,000 --> 00:41:46,000 così per esempio, il modo in cui ho fatto che dire fatto in basso a destra 775 00:41:46,000 --> 00:41:48,000 si Ho selezionato questo campo di testo. 776 00:41:48,000 --> 00:41:50,000 Sono venuto qui. 777 00:41:50,000 --> 00:41:53,000 Ho scorrere verso il basso un po 'per tornare chiave, 778 00:41:53,000 --> 00:41:56,000 e posso effettivamente fare questo un sacco di cose, come se voglio che dire 779 00:41:56,000 --> 00:42:00,000 chiamata di emergenza invece posso farlo, che è del tutto casuale, 780 00:42:00,000 --> 00:42:02,000 e io non so perché c'è un pulsante incorporato chiamata di emergenza, 781 00:42:02,000 --> 00:42:06,000 ma, si dice chiamata di emergenza in lettere molto piccole. 782 00:42:06,000 --> 00:42:08,000 Ci si va. 783 00:42:08,000 --> 00:42:12,000 >> Sicuramente esplorare tutte queste diverse opzioni in iOS. 784 00:42:12,000 --> 00:42:14,000 Hai domande su delegati? 785 00:42:14,000 --> 00:42:18,000 Anche in questo caso, solo un modello di progettazione interessante che si dovrebbe essere a conoscenza. 786 00:42:18,000 --> 00:42:22,000 Okay, dopo un'occhiata a visualizzazioni per tabella. 787 00:42:22,000 --> 00:42:26,000 Una vista tabella è sostanzialmente quella lista di voci che è tutto il luogo in iOS. 788 00:42:26,000 --> 00:42:29,000 Quando stai sfogliando tutti i tuoi contatti, si sta guardando 789 00:42:29,000 --> 00:42:34,000 la pagina delle impostazioni, e quel tipo di lista di cose è chiamato una visualizzazione per tabella. 790 00:42:34,000 --> 00:42:37,000 Implementazione di una visualizzazione per tabella in iOS è abbastanza semplice. 791 00:42:37,000 --> 00:42:41,000 Invece di fare una classe che discende da tale UIViewController 792 00:42:41,000 --> 00:42:44,000 come abbiamo fatto prima abbiamo semplicemente bisogno di dire piuttosto che 793 00:42:44,000 --> 00:42:46,000 tutto quello che un UIViewController non voglio fare, 794 00:42:46,000 --> 00:42:50,000 Dico tutto ciò che un UITableViewController non voglio fare, 795 00:42:50,000 --> 00:42:54,000 in modo che aggiunge semplicemente alcune cose aggiuntive che sono totalmente fatto per noi. 796 00:42:54,000 --> 00:42:58,000 Dobbiamo fare molto poco per riempire sostanzialmente gli spazi vuoti all'interno della tavola. 797 00:42:58,000 --> 00:43:02,000 >> Al fine di visualizzare una tabella ho bisogno di rispondere ad alcune domande. 798 00:43:02,000 --> 00:43:06,000 La prima domanda che devo rispondere è il numero di sezioni sono in tabella? 799 00:43:06,000 --> 00:43:08,000 Quando stai sfogliando la vostra applicazione contatti si noterà che è una specie di 800 00:43:08,000 --> 00:43:12,000 organizzata dal nome, allora si ha la B, e si dispone che il colpo di testa poco sotto. 801 00:43:12,000 --> 00:43:14,000 Ciascuno di questi è chiamato una sezione. 802 00:43:14,000 --> 00:43:16,000 Si può o non può bisogno di questi. 803 00:43:16,000 --> 00:43:19,000 La prima cosa che devi fare è implementare un metodo 804 00:43:19,000 --> 00:43:22,000 chiamato tableView: numberOfSectionsInTableView. 805 00:43:22,000 --> 00:43:25,000 Che restituisce semplicemente il numero di sezioni che hanno, 806 00:43:25,000 --> 00:43:29,000 quindi questo potrebbe dire restituire uno se si dispone di una vista grande tavolo. 807 00:43:29,000 --> 00:43:33,000 La domanda successiva che iOS ha bisogno di sapere è il numero di righe hai? 808 00:43:33,000 --> 00:43:36,000 Ad esempio, si sta sfogliando una visualizzazione per tabella. 809 00:43:36,000 --> 00:43:39,000 Si dispone di un numero fisso di canzoni che stai guardando o un determinato numero di contatti. 810 00:43:39,000 --> 00:43:41,000 Se tu sei me, naturalmente, non che molti, 811 00:43:41,000 --> 00:43:44,000 e così è così che iOS sa quante celle da visualizzare. 812 00:43:44,000 --> 00:43:46,000 >> Ancora una volta, questo potrebbe dire qualcosa di simile di ritorno 3. 813 00:43:46,000 --> 00:43:49,000 La mia opinione tabella ha 3 righe. 814 00:43:49,000 --> 00:43:52,000 Infine, iOS ha bisogno di sapere ciò che ogni cellula sembra, 815 00:43:52,000 --> 00:43:54,000 così che cosa è in realtà sta per fare è chiamare questo metodo qui, 816 00:43:54,000 --> 00:43:57,000 questo tableView: cellForRowAtIndexPath. 817 00:43:57,000 --> 00:44:01,000 E 'intenzione di chiamare questo metodo su ogni singola cella all'interno della tabella. 818 00:44:01,000 --> 00:44:03,000 Come fa a sapere quante volte a chiamarlo? 819 00:44:03,000 --> 00:44:06,000 Beh, l'ha raccontata all'interno del numero di righe nella sezione. 820 00:44:06,000 --> 00:44:08,000 Stiamo andando a chiamare questo su ciascuna delle nostre cellule, 821 00:44:08,000 --> 00:44:11,000 e all'interno di questo è dove si può effettivamente fare le cose come 822 00:44:11,000 --> 00:44:16,000 impostare il testo o dirti cosa che piccolo pulsante blu sul lato destro fa. 823 00:44:16,000 --> 00:44:19,000 Il modello per ottenere queste cellule, abbiamo intenzione di utilizzare questo metodo 824 00:44:19,000 --> 00:44:22,000 chiamato dequeueReusableCellWithIdentifier. 825 00:44:22,000 --> 00:44:29,000 >> Objective-C è in realtà molto ben conosciuta per la durata ridicola di loro i nomi dei metodi, 826 00:44:29,000 --> 00:44:32,000 e questo è davvero un bel caso in esempio punto. 827 00:44:32,000 --> 00:44:37,000 Ciò che questo metodo non fa altro che questo dice voglio solo che tu mi dia una cella. 828 00:44:37,000 --> 00:44:39,000 Solo una cosa iOS. 829 00:44:39,000 --> 00:44:41,000 Se si dispone di qualcosa come 100.000 canzoni sul vostro iPod 830 00:44:41,000 --> 00:44:45,000 ciò che iOS non vuole fare è destinare 100.000 cellule, 831 00:44:45,000 --> 00:44:48,000 perché se si è in cima alla vostra lista, non si ha realmente bisogno di allocare la memoria 832 00:44:48,000 --> 00:44:51,000 per la cella che è 99.000 righe verso il basso? 833 00:44:51,000 --> 00:44:55,000 No, perché come si sta scorrendo è possibile tipo di destinare come si va avanti. 834 00:44:55,000 --> 00:44:57,000 Questo è fatto per voi. 835 00:44:57,000 --> 00:44:59,000 Non devi preoccuparti di tutta quella roba prestazioni stupido. 836 00:44:59,000 --> 00:45:02,000 Tutto ciò che dici è si chiama questo metodo dequeueReusableCellWithIdentifier, 837 00:45:02,000 --> 00:45:06,000 e questo la dice, va bene, se è necessario ho intenzione di creare una nuova cella per voi. 838 00:45:06,000 --> 00:45:09,000 >> Ma se siete in fondo al tavolo e hai già assegnato alcune cellule 839 00:45:09,000 --> 00:45:12,000 nella parte superiore della tabella che si sta veramente andando ad avere bisogno in qualunque momento presto 840 00:45:12,000 --> 00:45:15,000 Sto per darvi una di quelle retro invece di allocare una nuova, 841 00:45:15,000 --> 00:45:17,000 e quindi questo è un problema bella prestazione. 842 00:45:17,000 --> 00:45:21,000 Non è necessario assegnare le celle da soli. 843 00:45:21,000 --> 00:45:23,000 Che sta per dare indietro una cella. 844 00:45:23,000 --> 00:45:25,000 E 'intenzione di tornare a te un oggetto di cella. 845 00:45:25,000 --> 00:45:28,000 Una volta ottenuto l'oggetto cella si possono fare cose ad esso. 846 00:45:28,000 --> 00:45:32,000 È possibile impostare il testo della cella con questa proprietà chiamata etichetta di testo. 847 00:45:32,000 --> 00:45:36,000 Si può aggiungere che la freccia a destra o un po 'di altre cose a caso 848 00:45:36,000 --> 00:45:41,000 con questa proprietà altra chiamato accessoryType, e così via e così via. 849 00:45:41,000 --> 00:45:46,000 >> Diamo uno sguardo in realtà l'attuazione di una visualizzazione della tabella ora. 850 00:45:46,000 --> 00:45:49,000 Quando ho creato questo progetto 851 00:45:49,000 --> 00:45:53,000 piuttosto che dire di domanda unica vista che in realtà è venuto qui 852 00:45:53,000 --> 00:45:57,000 di master-detail applicazione, e quindi sostanzialmente corrisponde alla applicazione posta 853 00:45:57,000 --> 00:46:01,000 su iPad con la vista tabella a sinistra e poi il contenuto sulla destra. 854 00:46:01,000 --> 00:46:07,000 Sul iPod o iPhone questo sta per corrispondere a una visione singola tabella. 855 00:46:07,000 --> 00:46:10,000 È lì che ho ottenuto il mio codice di avvio. 856 00:46:10,000 --> 00:46:13,000 >> Diamo prima un'occhiata al storyboard. 857 00:46:13,000 --> 00:46:15,000 Tutto questo è stato fatto per me, fondamentalmente creato. 858 00:46:15,000 --> 00:46:18,000 Questa barra di navigazione mi ha fatto vedere quello che una cella esempio potrebbe sembrare, 859 00:46:18,000 --> 00:46:22,000 e posso fare doppio clic su questo, cambiare il titolo. 860 00:46:22,000 --> 00:46:25,000 Qualsiasi preoccupazione dell'interfaccia utente sono in grado di gestire lì. 861 00:46:25,000 --> 00:46:27,000 Il file di intestazione sembra davvero semplice. 862 00:46:27,000 --> 00:46:30,000 Piuttosto che dire questo è UIViewController ora stiamo dicendo che questo è un 863 00:46:30,000 --> 00:46:35,000 TableViewController, quindi sappiamo che vogliamo chiamare tutti quei metodi di tabella. 864 00:46:35,000 --> 00:46:38,000 Avanti Voglio creare una proprietà che sta per rappresentare 865 00:46:38,000 --> 00:46:40,000 le cose all'interno del mio tavolo. 866 00:46:40,000 --> 00:46:43,000 Questa tabella è di andare a visualizzare arbitrariamente 867 00:46:43,000 --> 00:46:46,000 un elenco di frutta, e quindi ho bisogno di creare un po 'di matrice 868 00:46:46,000 --> 00:46:49,000 in cui è possibile inserire frutta. 869 00:46:49,000 --> 00:46:52,000 All'interno del mio file di implementazione la prima cosa che voglio fare 870 00:46:52,000 --> 00:46:55,000 è che voglio essere sicuro di inizializzare l'array. 871 00:46:55,000 --> 00:46:58,000 >> Ho detto alloc init, creato il mio array di frutta, 872 00:46:58,000 --> 00:47:03,000 e io sono l'aggiunta di 4 cose ad esso, uno dei quali è molto più controversa rispetto agli altri 3. 873 00:47:03,000 --> 00:47:06,000 E ora ho un array di dimensione 4. 874 00:47:06,000 --> 00:47:08,000 Lo stiamo agitando in CS50. 875 00:47:08,000 --> 00:47:11,000 Ora ho un array di dimensione 4. 876 00:47:11,000 --> 00:47:13,000 Ora ho intenzione di iniziare a rispondere a queste domande, e in realtà, 877 00:47:13,000 --> 00:47:16,000 quando ho creato questa applicazione tutto questo è stato già fatto per me. 878 00:47:16,000 --> 00:47:19,000 Non c'era bisogno di digitare il numero di sezioni in vista tabella. 879 00:47:19,000 --> 00:47:22,000 Era già lì, e sto riempiendo gli spazi vuoti. 880 00:47:22,000 --> 00:47:24,000 Quante sezioni ho? 881 00:47:24,000 --> 00:47:26,000 Uno. Tutto fatto. 882 00:47:26,000 --> 00:47:28,000 Quante righe ho? 883 00:47:28,000 --> 00:47:31,000 Beh, ho una riga per ogni frutto, in modo da questo conteggio 884 00:47:31,000 --> 00:47:34,000 è una proprietà di qualsiasi matrice che dice quanto è grande? 885 00:47:34,000 --> 00:47:36,000 Questo è il numero di righe che ho. 886 00:47:36,000 --> 00:47:42,000 Infine, ho bisogno di dire che cosa fa ogni cellula assomiglia? 887 00:47:42,000 --> 00:47:46,000 Sto per dire dequeueReusableCellWithIdentifier. 888 00:47:46,000 --> 00:47:48,000 >> Ancora una volta, questo è stato già scritto per me. 889 00:47:48,000 --> 00:47:51,000 Non ho dovuto fare da solo, e voglio tornare 890 00:47:51,000 --> 00:47:54,000 questa cellula in questa posizione. 891 00:47:54,000 --> 00:47:57,000 Ricordate che stiamo chiamando lo stesso metodo su ogni singola cella, 892 00:47:57,000 --> 00:48:01,000 e questo argomento qui, questo argomento indexPath, 893 00:48:01,000 --> 00:48:03,000 dice quello che fila Sono dentro 894 00:48:03,000 --> 00:48:05,000 Se dico indexPath.row qui 895 00:48:05,000 --> 00:48:09,000 questo sarà 0, allora sarà 1, allora sarà 2, e questo è quindi so 896 00:48:09,000 --> 00:48:11,000 quale cella sto visualizzato. 897 00:48:11,000 --> 00:48:15,000 Voglio impostare il testo della cella di questa proprietà textLabel 898 00:48:15,000 --> 00:48:19,000 per andare dentro la mia matrice di frutta e ottenere 899 00:48:19,000 --> 00:48:21,000 l'oggetto corrispondente a ciascuna riga. 900 00:48:21,000 --> 00:48:24,000 Se si tratta di una stringa, ora sto impostando 901 00:48:24,000 --> 00:48:28,000 la proprietà Text su una stringa. 902 00:48:28,000 --> 00:48:30,000 Posso fare un'altra cosa. 903 00:48:30,000 --> 00:48:32,000 Posso anche registrare un gestore eventi su ciascuna delle celle, 904 00:48:32,000 --> 00:48:35,000 così quando mi tocca ognuna di queste cellule 905 00:48:35,000 --> 00:48:39,000 questo didSelectRowAtIndexPath, questo sta per essere chiamato per me, 906 00:48:39,000 --> 00:48:42,000 così semplicemente definendo questo posso ora gestire ciò che accade 907 00:48:42,000 --> 00:48:46,000 quando si tocca una cella, e di nuovo, stiamo passando in cui è stato sfruttato cella 908 00:48:46,000 --> 00:48:50,000 in modo da poter riutilizzare questo stesso gestore di eventi per tutte le nostre cellule. 909 00:48:50,000 --> 00:48:53,000 >> Ancora una volta, questo è qualcosa che iOS sta facendo per me. 910 00:48:53,000 --> 00:48:55,000 Facciamo visualizzare un altro fastidioso popup 911 00:48:55,000 --> 00:48:59,000 dice semplicemente che hai scelto qualcosa in cui quel qualcosa 912 00:48:59,000 --> 00:49:04,000 sarà l'oggetto riga. 913 00:49:04,000 --> 00:49:10,000 Quando ho eseguito questo, ho intenzione di avere questa bella vista tabella 914 00:49:10,000 --> 00:49:14,000 con una riga per ciascuno di questi frutti, e se si tocca uno 915 00:49:14,000 --> 00:49:16,000 mi dice quello che è successo. 916 00:49:16,000 --> 00:49:21,000 Ha senso? 917 00:49:21,000 --> 00:49:24,000 Costruiamo un po 'più complessa di un app, 918 00:49:24,000 --> 00:49:28,000 quanto hai scelto cliccando pomodoro è. 919 00:49:28,000 --> 00:49:31,000 La parte bella del storyboard 920 00:49:31,000 --> 00:49:35,000 è che non è solo andare per aiutarci a schermi di progetto individuale, 921 00:49:35,000 --> 00:49:38,000 è anche ci aiuterà a legare insieme la nostra intera applicazione, 922 00:49:38,000 --> 00:49:42,000 modo che l'applicazione finale saremo edificio è questo simpatico sport lettore di news, 923 00:49:42,000 --> 00:49:45,000 e così sta andando ad avere più schermi, e in modo che possa effettivamente rappresentare 924 00:49:45,000 --> 00:49:48,000 ciascuna di queste schermate multiple sullo storyboard, 925 00:49:48,000 --> 00:49:52,000 e posso eseguire lo zoom indietro e vedere la mia app da un livello elevato. 926 00:49:52,000 --> 00:49:55,000 >> Per creare un nuovo elemento all'interno del mio storyboard 927 00:49:55,000 --> 00:49:59,000 è molto semplice all'interno di Interface Builder. 928 00:49:59,000 --> 00:50:01,000 Se voglio aggiungere un altro schermo per questo, ad esempio, 929 00:50:01,000 --> 00:50:06,000 Posso prima lo zoom con lo zoom pizzico che Apple ama tanto, 930 00:50:06,000 --> 00:50:09,000 e qui prima di cercare un pulsante 931 00:50:09,000 --> 00:50:12,000 Io e trascinare e rilasciare un pulsante 932 00:50:12,000 --> 00:50:15,000 se voglio creare una nuova schermata che posso in realtà solo il drag and drop 933 00:50:15,000 --> 00:50:19,000 un controller della vista intera, quindi se scelgo questo, tirare qui, 934 00:50:19,000 --> 00:50:23,000 ehi, c'è un altro schermo, e così ora utilizzando questo stesso file storyboard 935 00:50:23,000 --> 00:50:26,000 Posso avere tutti gli schermi all'interno della mia app, e posso diminuire 936 00:50:26,000 --> 00:50:28,000 e vedere come interagiscono. 937 00:50:28,000 --> 00:50:32,000 Questi non potranno interagire ancora. 938 00:50:32,000 --> 00:50:36,000 Il modo in cui questi 2 Interazione delle schermate è possibile definire relazioni. 939 00:50:36,000 --> 00:50:39,000 Si può sostanzialmente dire che questa schermata, quando si preme questo tasto, 940 00:50:39,000 --> 00:50:42,000 Voglio che scivolare verso questo nuovo schermo. 941 00:50:42,000 --> 00:50:44,000 Questo significa che c'è questo tipo di rapporto tra 942 00:50:44,000 --> 00:50:46,000  la prima schermata e nella seconda schermata. 943 00:50:46,000 --> 00:50:49,000 Avrete fondamentalmente una freccia da quel pulsante alla seconda schermata 944 00:50:49,000 --> 00:50:53,000 dicendo che quando si preme questo tasto è lì che voglio andare. 945 00:50:53,000 --> 00:50:57,000 Proprio come ci controllano cliccato e trascinato per definire questi punti di vendita 946 00:50:57,000 --> 00:51:01,000 stiamo andando a fare la stessa cosa per definire questi sfocia. 947 00:51:01,000 --> 00:51:05,000 >> Vedremo un esempio per questo, e prima di riuscire a transizione 948 00:51:05,000 --> 00:51:08,000 da uno schermo all'altro iOS è abbastanza bello chiamare questo metodo 949 00:51:08,000 --> 00:51:11,000 prepareForSegue chiamato, ed è qui che possiamo cominciare 950 00:51:11,000 --> 00:51:14,000 l'invio dei dati da una applicazione all'altra. 951 00:51:14,000 --> 00:51:17,000 Nell'esempio che stiamo per vedere le cose che in fondo ci permetterà 952 00:51:17,000 --> 00:51:20,000 per filtrare squadre di baseball di campionati e divisioni. 953 00:51:20,000 --> 00:51:23,000 Quando seleziono una lega, per esempio, voglio transizione 954 00:51:23,000 --> 00:51:25,000 alla mia schermata successiva dove posso visualizzare tutte le divisioni 955 00:51:25,000 --> 00:51:27,000 in quel campionato o tutte le squadre differenti. 956 00:51:27,000 --> 00:51:31,000 Ho bisogno di inviare a schermo quello che le squadre che si dovrebbe visualizzare. 957 00:51:31,000 --> 00:51:35,000 Per fare questo ho intenzione di prendere vantaggio di questo metodo qui. 958 00:51:35,000 --> 00:51:39,000 >> Infine, solo un punto a caso su iOS. 959 00:51:39,000 --> 00:51:41,000 Se si desidera memorizzare i dati c'è questa cosa chiamata dati di base, 960 00:51:41,000 --> 00:51:44,000 che in realtà è un po 'complicato con cui lavorare. 961 00:51:44,000 --> 00:51:47,000 È inoltre possibile utilizzare SQL per memorizzare i dati, 962 00:51:47,000 --> 00:51:51,000 che, di nuovo, è bello ma tipo di sul lato più complicato da lavorare, 963 00:51:51,000 --> 00:51:55,000 ma iOS supporta anche queste cose davvero cool chiamati elenchi delle proprietà, 964 00:51:55,000 --> 00:52:00,000 e un elenco di proprietà è solo un file che rappresenta coppie di valori chiave. 965 00:52:00,000 --> 00:52:03,000 È possibile definire un elenco di chiavi, e tu dici questo tasto sarà un array. 966 00:52:03,000 --> 00:52:06,000 Questa chiave sta per essere una stringa, e in fondo tutto ciò che si può fare 967 00:52:06,000 --> 00:52:10,000 in JSON si può fare all'interno di un elenco di proprietà, 968 00:52:10,000 --> 00:52:14,000 e quindi questo davvero ben ci permette di lavorare con alcuni dati. 969 00:52:14,000 --> 00:52:18,000 Per esempio, io ho questo Teams.plist che ho creato. 970 00:52:18,000 --> 00:52:22,000 Ho creato un nuovo file plist, e posso eseguire il drill down. 971 00:52:22,000 --> 00:52:26,000 Questo è un dizionario, questo è un dizionario, questi sono stringhe, 972 00:52:26,000 --> 00:52:30,000 e quindi questa è una bella rappresentazione grafica di un documento JSON 973 00:52:30,000 --> 00:52:33,000 o solo una serie di coppie di valori chiave, 974 00:52:33,000 --> 00:52:37,000 e così questo è il dato che lavorerò con all'interno della mia app. 975 00:52:37,000 --> 00:52:40,000 >> Si deve prima venire qui. Abbiamo i file molto più ora. 976 00:52:40,000 --> 00:52:44,000 Ma si deve prima venire qui allo storyboard. 977 00:52:44,000 --> 00:52:48,000 Lo storyboard qui, se riesco a diminuire- 978 00:52:48,000 --> 00:52:51,000 ora possiamo vedere che questo è il flusso della mia app. 979 00:52:51,000 --> 00:52:53,000 Sto andando prima ad iniziare in questa schermata. 980 00:52:53,000 --> 00:52:55,000 Ho intenzione di drill-down per questa schermata, 981 00:52:55,000 --> 00:52:58,000 e ho intenzione di drill-down per questa schermata, e possiamo vedere qui che se io tipo di 982 00:52:58,000 --> 00:53:04,000 spostare uno di questi intorno abbiamo queste frecce andare da qui a qui, 983 00:53:04,000 --> 00:53:08,000 e il mio modo di definire che la freccia era se lo zoom in un po ', 984 00:53:08,000 --> 00:53:12,000 e se mi vieni a questo controller di vista, 985 00:53:12,000 --> 00:53:16,000 ed ecco una cella, e voglio dire che quando si tocca una cella 986 00:53:16,000 --> 00:53:18,000 Voglio che scivolare su un altro schermo. 987 00:53:18,000 --> 00:53:21,000 Posso semplicemente tenere premuto il controllo, 988 00:53:21,000 --> 00:53:26,000 scorrere sopra un po ', tenere premuto il tasto Ctrl, trascinare la cella più e lasciarsi andare. 989 00:53:26,000 --> 00:53:30,000 >> E qui diciamo qual è la transizione che si desidera utilizzare? 990 00:53:30,000 --> 00:53:32,000 Vuoi usare quella cosa che si chiama diapositiva spinta? 991 00:53:32,000 --> 00:53:34,000 Vuoi far scorrere dal fondo? 992 00:53:34,000 --> 00:53:36,000 Questo si chiama modale. 993 00:53:36,000 --> 00:53:40,000 E una volta che si fa clic su uno di questi, sta andando a disegnare questa freccia per me, 994 00:53:40,000 --> 00:53:44,000 e ciò significa che in realtà ho maneggiato ciò che accade quando si preme questo tasto graficamente. 995 00:53:44,000 --> 00:53:48,000 Non ho scritto alcun codice a scivolare in realtà da una schermata a quella successiva. 996 00:53:48,000 --> 00:53:51,000 Ho definito questo visivamente all'interno di Interface Builder. 997 00:53:51,000 --> 00:53:55,000 Se clicco su questa freccia, possiamo vedere che questa cosa ho dato un nome. 998 00:53:55,000 --> 00:53:59,000 L'ho chiamato showDivisions, e questo è così che io possa conoscere 999 00:53:59,000 --> 00:54:03,000 cosa transizione sta per accadere, e vedremo perché in appena un secondo. 1000 00:54:03,000 --> 00:54:06,000 È così che ho collegato le diverse schermate della mia app. 1001 00:54:06,000 --> 00:54:09,000 Se questo fosse un pulsante, ad esempio, piuttosto che una vista tabella, 1002 00:54:09,000 --> 00:54:11,000 Ho potuto controllare fare clic sul pulsante, trascinare verso la schermata successiva, 1003 00:54:11,000 --> 00:54:16,000 ed è così che posso fare in questo modo la navigazione. 1004 00:54:16,000 --> 00:54:19,000 >> Molto velocemente, se noi entreremo nel MasterViewController, 1005 00:54:19,000 --> 00:54:22,000 ancora una volta, stiamo semplicemente andando a definire un elenco di cose 1006 00:54:22,000 --> 00:54:26,000 che verrà visualizzato nella vista tabella. 1007 00:54:26,000 --> 00:54:29,000 Qui sto dicendo che voglio che tu prenda il file plist, 1008 00:54:29,000 --> 00:54:32,000 e voglio che tu a caricarlo in un dizionario, 1009 00:54:32,000 --> 00:54:35,000 e una volta che si dispone di dizionario, ho intenzione di rispondere a queste domande di nuovo gli stessi. 1010 00:54:35,000 --> 00:54:37,000 Ecco il numero di sezioni. 1011 00:54:37,000 --> 00:54:41,000 Uno, non c'è una riga per ogni campionato, e il testo di ogni cella 1012 00:54:41,000 --> 00:54:46,000 dovrebbe essere il primo, il primo campionato, la seconda di campionato, e così via. 1013 00:54:46,000 --> 00:54:51,000 Infine, ho intenzione di utilizzare questo metodo che abbiamo appena visto chiamato prepareForSegue, 1014 00:54:51,000 --> 00:54:54,000 e questo è il metodo che sta per essere licenziato quando si fa clic 1015 00:54:54,000 --> 00:54:57,000 su uno di tali righe e quindi attivando tale transizione 1016 00:54:57,000 --> 00:54:59,000 che ho impostato con le frecce. 1017 00:54:59,000 --> 00:55:02,000 Questo sta dicendo che posso avere più 1018 00:55:02,000 --> 00:55:05,000 relazioni da uno schermo all'altro. 1019 00:55:05,000 --> 00:55:08,000 Se ho 2 pulsanti e ogni pulsante vi porta a una schermata diversa 1020 00:55:08,000 --> 00:55:10,000 Ho intenzione di avere 2 sfocia, 1 per ogni pulsante. 1021 00:55:10,000 --> 00:55:14,000 Ma questo prepareForSegue è, ancora, andando a essere riutilizzato 1022 00:55:14,000 --> 00:55:17,000 per ciascuno dei rapporti differenti, in modo che significa che ho bisogno di un modo 1023 00:55:17,000 --> 00:55:21,000 di individuare se si preme il pulsante prima o si preme il secondo pulsante. 1024 00:55:21,000 --> 00:55:25,000 >> Ricordo che quando ho dato quel Segue un nome, questo showDivisions, 1025 00:55:25,000 --> 00:55:29,000 è così che ora so che questa è la Segue che è stato attivato. 1026 00:55:29,000 --> 00:55:32,000 Tutto quello che voglio fare è che voglio dire 1027 00:55:32,000 --> 00:55:35,000 Voglio capire quello che ho appena colpito, 1028 00:55:35,000 --> 00:55:38,000 e così per ottenere che, posso dire che voglio il indexPath per la riga selezionata, 1029 00:55:38,000 --> 00:55:42,000 Ricordo il indexPath dice solo dove ho appena fatto clic, 1030 00:55:42,000 --> 00:55:47,000 e poi voglio dire che voglio capire dove sto andando. 1031 00:55:47,000 --> 00:55:50,000 Questo destinationViewController, che è una proprietà della Segue. 1032 00:55:50,000 --> 00:55:53,000 Questa è la schermata che sto per, 1033 00:55:53,000 --> 00:55:56,000 quindi so che lo schermo ho intenzione di è chiamato DivisionsViewController 1034 00:55:56,000 --> 00:55:59,000 perché ho creato quella classe, 1035 00:55:59,000 --> 00:56:02,000 e così ora se dico d.divisions 1036 00:56:02,000 --> 00:56:06,000 Ora sto impostando una proprietà del controller della vista che sto per andare a. 1037 00:56:06,000 --> 00:56:10,000 Questo è il modo che sto l'invio di dati da uno schermo ad un altro schermo. 1038 00:56:10,000 --> 00:56:13,000 >> Basta guardare a questo DivisionsViewController 1039 00:56:13,000 --> 00:56:16,000 si può vedere qui che nel file. h 1040 00:56:16,000 --> 00:56:20,000 non vi è che le divisioni di proprietà, e questo è quello che sto praticamente popolamento, 1041 00:56:20,000 --> 00:56:25,000 è così che so che sto visualizzando le divisioni corrispondenti alle 1042 00:56:25,000 --> 00:56:28,000 il campionato che ho cliccato, e di nuovo, 1043 00:56:28,000 --> 00:56:31,000 la vista tabella effettiva sembra più o meno lo stesso, basta rispondere a quelle 1044 00:56:31,000 --> 00:56:34,000 3 domande semplici e ad individuare 1045 00:56:34,000 --> 00:56:37,000 cosa succede quando si passa alla schermata successiva. 1046 00:56:37,000 --> 00:56:40,000 Solo un paio di altre cose qui. 1047 00:56:40,000 --> 00:56:43,000 Si nota in alto qui che invece di dire # include 1048 00:56:43,000 --> 00:56:45,000 Ora sto dicendo # import. 1049 00:56:45,000 --> 00:56:47,000 Questo è solo un Objective-C cosa. 1050 00:56:47,000 --> 00:56:52,000 L'importazione è sostanzialmente una versione più bello di inclusione, 1051 00:56:52,000 --> 00:56:57,000 e, per esempio, abbiamo bisogno di sapere che cosa questa classe è, 1052 00:56:57,000 --> 00:57:00,000 quindi non posso solo dire DivisionsViewController. 1053 00:57:00,000 --> 00:57:05,000 Se non avessimo hashtag standardio.c all'interno del nostro file. C 1054 00:57:05,000 --> 00:57:07,000 il compilatore non aveva idea di cosa fosse printf. 1055 00:57:07,000 --> 00:57:12,000 Allo stesso modo, se non si importa il DivisionsViewController 1056 00:57:12,000 --> 00:57:16,000 il compilatore ha davvero idea di cosa sia un DivisionsViewController. 1057 00:57:16,000 --> 00:57:19,000 Basta fare in modo che all'interno dei diversi file. M hai la certezza di importare 1058 00:57:19,000 --> 00:57:25,000 i file corrispondenti. h in modo che il compilatore sa che cosa sta succedendo. 1059 00:57:25,000 --> 00:57:31,000 >> Infine, in ultima analisi, quello che Apple non fa altro che visualizzare alcuni dati utilizzando una vista web, 1060 00:57:31,000 --> 00:57:35,000 e così una vista web è un oggetto in cui è possibile incorporare 1061 00:57:35,000 --> 00:57:37,000 un browser Web po 'all'interno della vostra applicazione. 1062 00:57:37,000 --> 00:57:40,000 Tutto quello che devi fare è fornire un URL al tuo browser web, 1063 00:57:40,000 --> 00:57:43,000 quindi voglio andare a mlb.mlb.com, 1064 00:57:43,000 --> 00:57:46,000 ed è così che io possa accedere alla home page per ogni squadra, 1065 00:57:46,000 --> 00:57:49,000 e quindi passando in questo URL 1066 00:57:49,000 --> 00:57:52,000 la visualizzazione Web può visualizzare questo per me, e posso passare in rassegna intorno, 1067 00:57:52,000 --> 00:58:01,000 e il simulatore è in uso da quello. 1068 00:58:01,000 --> 00:58:03,000 Ora, questo è venuto dal mio plist. 1069 00:58:03,000 --> 00:58:07,000 Se si fa clic su questo questo è venuto anche dal mio plist, e questo scorrevole è stata gestita 1070 00:58:07,000 --> 00:58:09,000 attraverso la definizione di tali sfocia. 1071 00:58:09,000 --> 00:58:12,000 Clicco questo e molto altro uno, 1072 00:58:12,000 --> 00:58:15,000 ed ora ecco il mio UIWebView, quindi basta così 1073 00:58:15,000 --> 00:58:19,000 ecco il sito per l'URL che ho appena incorporato, 1074 00:58:19,000 --> 00:58:21,000 e io non ho dovuto gestire qualsiasi cosa folle. 1075 00:58:21,000 --> 00:58:24,000 Questo è il modo di visualizzare una pagina web. 1076 00:58:24,000 --> 00:58:27,000 Cose come questo pulsante di nuovo qui è dato anche a me 1077 00:58:27,000 --> 00:58:33,000 completamente gratis perché ho definito queste relazioni con sfocia. 1078 00:58:33,000 --> 00:58:37,000 >> Hai ancora domande? Gia '. 1079 00:58:37,000 --> 00:58:40,000 [Studente] Così, quando si utilizza alloc, non devi mai qualcosa gratis? 1080 00:58:40,000 --> 00:58:43,000 Esattamente, quando si chiama alloc e init non è per liberarlo. 1081 00:58:43,000 --> 00:58:46,000 IOS sta per gestire tutto questo per voi. 1082 00:58:46,000 --> 00:58:51,000 E 'meraviglioso, e tu non sei infrangere alcuna regola. Gia '. 1083 00:58:51,000 --> 00:58:54,000 [Studente] Se si dovesse includere più squadre che possono stare su schermo, 1084 00:58:54,000 --> 00:58:58,000 sarebbe automaticamente hanno un opzione di scorrimento, o è qualcosa che è necessario aggiungere? 1085 00:58:58,000 --> 00:59:01,000 Esattamente, se avessi più squadre, per esempio, sarebbe gestire automaticamente 1086 00:59:01,000 --> 00:59:04,000 lo scorrimento per me, e tutti i problemi di prestazioni 1087 00:59:04,000 --> 00:59:08,000 con l'enorme tavolo sono trattati anche del tutto per me. 1088 00:59:08,000 --> 00:59:11,000 >> Altre domande? 1089 00:59:11,000 --> 00:59:13,000 Tutto questo codice sta per essere pubblicato. 1090 00:59:13,000 --> 00:59:16,000 Abbiamo tipo di sorvolare un po 'di dettagli più piccoli, 1091 00:59:16,000 --> 00:59:19,000 ma cose come l'impostazione di alcune proprietà alla visualizzazione Web 1092 00:59:19,000 --> 00:59:22,000 sono solo cose che si possono ottenere sfogliando la documentazione di Apple, 1093 00:59:22,000 --> 00:59:24,000 che è molto, molto ben strutturate. 1094 00:59:24,000 --> 00:59:27,000 Hanno un sacco di applicazioni di esempio e l'esempio usi 1095 00:59:27,000 --> 00:59:34,000 di diverse API, quindi sicuramente esaminare quelli, se potete. 1096 00:59:34,000 --> 00:59:36,000 Solo alcuni link utili si potrebbe desiderare di dare un'occhiata a. 1097 00:59:36,000 --> 00:59:38,000 Queste sono alcune guide di documentazione a portata di mano. 1098 00:59:38,000 --> 00:59:41,000 Gli URL sono enormi, quindi sono accorciati. 1099 00:59:41,000 --> 00:59:44,000 Questo primo è l'intera libreria di documentazione. 1100 00:59:44,000 --> 00:59:46,000 Ci sono piccole barre di ricerca, quindi se si avvia il pulsante digitare 1101 00:59:46,000 --> 00:59:50,000 sarà iniziare a dare tutte le informazioni su tutte le cose che puoi fare con un pulsante. 1102 00:59:50,000 --> 00:59:53,000 Ho anche incluso la visualizza guida Tabella di Programmazione. 1103 00:59:53,000 --> 00:59:56,000 Gestisce visualizzazioni per tabella in modo molto più dettagliato, 1104 00:59:56,000 --> 01:00:00,000 come fare le cose come aggiungere dinamicamente le cellule o cellule modifica o rimuoverli. 1105 01:00:00,000 --> 01:00:02,000 >> C'è un sacco di applicazioni di esempio da Apple che vi mostrerà come fare, 1106 01:00:02,000 --> 01:00:05,000 e, infine, quest'ultimo è la Human Interface Guidelines, 1107 01:00:05,000 --> 01:00:09,000 e questo è fondamentalmente una discussione di componenti dell'interfaccia utente, 1108 01:00:09,000 --> 01:00:12,000 cose come non fare un pulsante che sono 4 pixel per 4 pixel. 1109 01:00:12,000 --> 01:00:15,000 E 'una cattiva idea, e altre cose che Apple vuole che tu faccia 1110 01:00:15,000 --> 01:00:18,000 per favorire un buon design. 1111 01:00:18,000 --> 01:00:23,000 >> Le ultime domande prima di finire? 1112 01:00:23,000 --> 01:00:27,000 Va bene, sicuramente non esitate a: siamo sta per avere etichette speciali discutere. 1113 01:00:27,000 --> 01:00:30,000 Avremo un iOS uno, in modo sicuramente sentire liberi di utilizzare questo. 1114 01:00:30,000 --> 01:00:34,000 Se si desidera lavorare con i vostri compagni di classe su progetti 1115 01:00:34,000 --> 01:00:37,000 o aiutare a capire un po 'di cose a caso iOS 1116 01:00:37,000 --> 01:00:40,000 sentitevi liberi di scrivermi, e sicuramente sfogliare on-line tutto il codice, perché 1117 01:00:40,000 --> 01:00:43,000 solo nell'interesse di tempo che tipo di glissato sulla più 1118 01:00:43,000 --> 01:00:45,000 dettagli più fini grana delle cose. 1119 01:00:45,000 --> 01:00:47,000 Ma se no, allora buona fortuna per i tuoi progetti iOS, e spero che avremo 1120 01:00:47,000 --> 01:00:53,000 un grande afflusso di applicazioni in App Store. 1121 01:00:53,000 --> 01:00:56,000 [CS50.TV]