1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminar] [iOS: Skrive Apps 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 [Dette er CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Greit, alle sammen, velkommen til iOS: Skrive Apps som en Boss. 5 00:00:12,000 --> 00:00:16,000 Dette seminaret skal fokusere på å skrive apps for iPhone 6 00:00:16,000 --> 00:00:19,000 og i sin tur skriftlig apps for iPad, og så vi i utgangspunktet kommer til å gå gjennom 7 00:00:19,000 --> 00:00:23,000 et par forskjellige eksempler på hvordan å lage en app, et enkelt spill som Tic Tac Toe, 8 00:00:23,000 --> 00:00:26,000 eller hvis du er mer interessert i å gjøre en app som en slags nyhetsleser 9 00:00:26,000 --> 00:00:30,000 eller noe som kommuniserer med Internett jeg vil snakke om det også. 10 00:00:30,000 --> 00:00:32,000 Her er våre kort agenda. 11 00:00:32,000 --> 00:00:36,000 >> IOS apps er skrevet på et språk som kalles Objective-C, 12 00:00:36,000 --> 00:00:39,000 og så dette er litt lik C, men egentlig ikke i det hele tatt, 13 00:00:39,000 --> 00:00:41,000 så vi skal snakke litt om selve språket 14 00:00:41,000 --> 00:00:45,000 og deretter hvordan å bygge iPhone-apps som bruker dette programmet program kalt XCode, 15 00:00:45,000 --> 00:00:48,000 som Hvis du ikke har lastet ned det ennå gjerne starte nedlasting nå. 16 00:00:48,000 --> 00:00:50,000 Det er flere gigabyte. 17 00:00:50,000 --> 00:00:54,000 Det bør være gratis på App Store, så du må ha en Mac 18 00:00:54,000 --> 00:00:57,000 ideell kjører den nyeste versjonen av OS X. 19 00:00:57,000 --> 00:00:59,000 Hvis du ikke, ikke noe problem. 20 00:00:59,000 --> 00:01:02,000 Vi har maskiner i vitensenteret tilgjengelig for bruk 21 00:01:02,000 --> 00:01:05,000 med XCode installert, og så gjerne bruke dem for utvikling. 22 00:01:05,000 --> 00:01:07,000 Hvis du ønsker å lage en app, men ikke har en Mac, ikke bekymre deg. 23 00:01:07,000 --> 00:01:09,000 Det er nok av campus ressurser til det. 24 00:01:09,000 --> 00:01:15,000 Og så så vi kommer til å dekke to større eksempler på ulike apps du kan gjøre. 25 00:01:15,000 --> 00:01:19,000 Objective-C er teknisk det som kalles en super sett C. 26 00:01:19,000 --> 00:01:24,000 Det betyr at enhver C-kode er også gyldig Objective-C-kode. 27 00:01:24,000 --> 00:01:29,000 Det betyr at vi på en måte duct tapet på noen ekstra funksjoner til C. 28 00:01:29,000 --> 00:01:33,000 Noen av disse funksjonene inkluderer ikke å måtte noensinne skrive malloc igjen, takk Gud, 29 00:01:33,000 --> 00:01:36,000 ingen måtte bekymre deg om de dumme pekere og frigjøre dem og alt det der 30 00:01:36,000 --> 00:01:40,000 du hatet om C, og det er slags gått i Objective-C. 31 00:01:40,000 --> 00:01:43,000 >> Nå har Objective-C også en mye større standard bibliotek, 32 00:01:43,000 --> 00:01:47,000 så det er mye mer funksjonalitet du får gratis innsiden av Objective-C. 33 00:01:47,000 --> 00:01:50,000 Husker du da vi skulle skrive PHP vi merke til at vi gikk fra 34 00:01:50,000 --> 00:01:54,000 Dette minste språket til den gigantiske bibliotek med alle disse sprø tingene du kan gjøre. 35 00:01:54,000 --> 00:01:56,000 Det samme skjer i iOS. 36 00:01:56,000 --> 00:01:59,000 Det er objekter for ting som den buddhistiske kalenderen, og virkelig noe 37 00:01:59,000 --> 00:02:05,000 du kan tenke trolig eksisterer allerede i Objective-C implementering. 38 00:02:05,000 --> 00:02:08,000 Målet del av Objective-C er refererer noe 39 00:02:08,000 --> 00:02:11,000 kalt objektorientert programmering. 40 00:02:11,000 --> 00:02:14,000 Dette er slags et nytt konsept, men vi har faktisk det meste lært 41 00:02:14,000 --> 00:02:17,000 mange av disse begrepene allerede. 42 00:02:17,000 --> 00:02:19,000 Ideen bak objektorientert programmering er at du kommer til å strukturere 43 00:02:19,000 --> 00:02:23,000 mye av koden din rundt disse tingene kalles klasser, 44 00:02:23,000 --> 00:02:26,000 og disse klassene er virkelig glorified structs. 45 00:02:26,000 --> 00:02:30,000 Innsiden av en struct vi i utgangspunktet sa her er en ting, 46 00:02:30,000 --> 00:02:32,000 og denne tingen kan ha medlemmer. 47 00:02:32,000 --> 00:02:35,000 For eksempel, kan en node i en lenket liste har andre ting 48 00:02:35,000 --> 00:02:38,000 som en verdi, en peker til den neste node i listen, 49 00:02:38,000 --> 00:02:44,000 og sammen at pekeren og at verdien består dette en forekomst av en struct. 50 00:02:44,000 --> 00:02:47,000 Klassene er svært like, bortsett 51 00:02:47,000 --> 00:02:50,000 klasser kan også ha funksjoner innsiden av dem. 52 00:02:50,000 --> 00:02:54,000 Når vi erklært en struct, kan vi bare si int n eller node * neste. 53 00:02:54,000 --> 00:02:57,000 >> Nå med Objective-C kan vi faktisk sette funksjoner 54 00:02:57,000 --> 00:02:59,000 innsiden av disse tingene. 55 00:02:59,000 --> 00:03:03,000 En annen ting som klasser kan gjøre er at de kan arve data fra andre klasser. 56 00:03:03,000 --> 00:03:07,000 For eksempel vil vi se på en haug med innebygd Objective-C klasser. 57 00:03:07,000 --> 00:03:11,000 En av dem kan være den klassen som representerer visningen for en skjerm, 58 00:03:11,000 --> 00:03:14,000 og så å si vil jeg gjennomføre min egen visning 59 00:03:14,000 --> 00:03:18,000 vi i utgangspunktet si noen over på Apple, sannsynligvis veldig hyggelige mennesker, 60 00:03:18,000 --> 00:03:21,000 skrev denne klassen for meg, og den håndterer ting som å vise knapper 61 00:03:21,000 --> 00:03:25,000 eller rendering skjermen, og vi ville være veldig pinlig 62 00:03:25,000 --> 00:03:28,000 å gjennomføre all den funksjonaliteten selv, og så ved å 63 00:03:28,000 --> 00:03:31,000 arve data kan vi si alt som du gjorde i den klassen 64 00:03:31,000 --> 00:03:34,000 Jeg ønsker også innsiden av klassen min, og da kommer jeg til å gjøre noen andre ting, 65 00:03:34,000 --> 00:03:37,000 nemlig gjennomføre et program. 66 00:03:37,000 --> 00:03:40,000 Det er hva det ordet arv betyr. Vi får se en mer konkret eksempel. 67 00:03:40,000 --> 00:03:42,000 >> Og til slutt, er nøkkelen med objektorientert programmering som 68 00:03:42,000 --> 00:03:45,000 det fører til data innkapsling. 69 00:03:45,000 --> 00:03:48,000 I noen av vårt problem setter vi kunne ha disse store, globale variabler 70 00:03:48,000 --> 00:03:51,000 og globals overalt, og det er hvordan vi ville holde styr på staten. 71 00:03:51,000 --> 00:03:55,000 Med klasser kan vi begynne innkapsle informasjon innsiden av et objekt. 72 00:03:55,000 --> 00:03:58,000 Hvis vi har en skjerm på app vår, vi egentlig ikke trenger å ha noen data fra 73 00:03:58,000 --> 00:04:01,000 annen skjerm i våre app innsiden av det, 74 00:04:01,000 --> 00:04:04,000 og så ved å innkapsle ting i klasser fører dette faktisk 75 00:04:04,000 --> 00:04:08,000 til mye bedre kode design, og dette er mulig med noen av de ytterligere funksjoner 76 00:04:08,000 --> 00:04:11,000 av Objective-C. 77 00:04:11,000 --> 00:04:15,000 Forvarsel, er syntaksen for Objective-C bananer. 78 00:04:15,000 --> 00:04:19,000 Det er ingenting vi har sett før, 79 00:04:19,000 --> 00:04:22,000 så det er litt av en læringskurve å bli vant til 80 00:04:22,000 --> 00:04:24,000 hva pokker betyr dette? 81 00:04:24,000 --> 00:04:27,000 Men når du kommer forbi det første læringskurve det er virkelig, virkelig glatt 82 00:04:27,000 --> 00:04:29,000 å begynne å skrive apps. 83 00:04:29,000 --> 00:04:33,000 >> Å erklære en klasse, for å si her er min klasse, det eksisterer, 84 00:04:33,000 --> 00:04:35,000 og kanskje her er noen ting som jeg kommer til å definere senere, 85 00:04:35,000 --> 00:04:38,000 Jeg kommer til å si @ grensesnitt. 86 00:04:38,000 --> 00:04:41,000 Jeg kommer til å si @ grensesnitt. Jeg kommer til å gi min klasse et navn. 87 00:04:41,000 --> 00:04:43,000 Og senere et annet sted jeg kommer til å si @ slutten, 88 00:04:43,000 --> 00:04:46,000 og alt i mellom @ grensesnittet og @ end 89 00:04:46,000 --> 00:04:48,000 kommer til å være min klasse. 90 00:04:48,000 --> 00:04:51,000 Det kommer til å bli hva som er på innsiden av våre. H-filer. 91 00:04:51,000 --> 00:04:55,000 Akkurat som i C våre. H-filer i utgangspunktet sagt her er noen ting som vil eksistere. 92 00:04:55,000 --> 00:04:57,000 Jeg er ikke nødvendigvis å fortelle deg hva de gjør ennå, 93 00:04:57,000 --> 00:04:59,000 men kompilatoren trenger å vite at de eksisterer. 94 00:04:59,000 --> 00:05:04,000 Senere inne i vår. M filer-fordi m for Objective-C 95 00:05:04,000 --> 00:05:08,000 er der vi faktisk kommer til å definere hva disse klassene gjør. 96 00:05:08,000 --> 00:05:11,000 Mye som våre. C-filer, forutsatt at vi en implementering for funksjoner. 97 00:05:11,000 --> 00:05:15,000 Innsiden av våre. M-fil skal vi si her er hva alle funksjonene 98 00:05:15,000 --> 00:05:18,000 innsiden av min klasse-hva de alle gjør. 99 00:05:18,000 --> 00:05:22,000 Og til slutt, på innsiden av en struct kan vi si innsiden av disse klammeparentes 100 00:05:22,000 --> 00:05:25,000 int n eller node * neste, 101 00:05:25,000 --> 00:05:28,000 og i Objective-C skal vi bruke søkeordet @ eiendom, 102 00:05:28,000 --> 00:05:31,000 og dette er hva som kommer til å definere egenskapene, 103 00:05:31,000 --> 00:05:36,000 eller de ikke-funksjoner som er en del av mine klasser. 104 00:05:36,000 --> 00:05:40,000 >> Ringe funksjoner i Objective-C er også bananer. 105 00:05:40,000 --> 00:05:43,000 Når vi erklært funksjoner i C vi sa noe sånt som int foo 106 00:05:43,000 --> 00:05:46,000 og åpne paren og ga det en liste over argumenter. 107 00:05:46,000 --> 00:05:51,000 Dette er hva erklære metoder eller funksjoner ser ut i Objective-C. 108 00:05:51,000 --> 00:05:54,000 Hvis jeg ønsker å erklære en funksjon eller en metode 109 00:05:54,000 --> 00:05:58,000 hvor jeg sier metoden er egentlig bare en funksjon som er medlem av en klasse, 110 00:05:58,000 --> 00:06:01,000 så slags utskiftbare, men egentlig ikke, 111 00:06:01,000 --> 00:06:03,000 så innsiden av min metode jeg vil opprette en ny metode. 112 00:06:03,000 --> 00:06:06,000 Det kommer til å returnere ingenting, så det kommer til å være av typen ugyldig. 113 00:06:06,000 --> 00:06:08,000 Dette er avkastningen type funksjon min. 114 00:06:08,000 --> 00:06:11,000 Nå har vi parentesar her fordi-Jeg vet ikke. 115 00:06:11,000 --> 00:06:14,000 Neste kommer til å være navnet på funksjonen min, 116 00:06:14,000 --> 00:06:17,000 og så til slutt har vi et semikolon akkurat som vi hadde i C. 117 00:06:17,000 --> 00:06:19,000 Hva er nytt her er denne fyren her. 118 00:06:19,000 --> 00:06:22,000 Dette bindestrek er faktisk nødvendig, og hva dette sier er at 119 00:06:22,000 --> 00:06:26,000 denne metoden her må kalles på en forekomst av en klasse. 120 00:06:26,000 --> 00:06:29,000 >> Etter at vi erklært våre structs vi sikkert sagt noe sånt 121 00:06:29,000 --> 00:06:32,000 struct node n, og som faktisk opprettet 122 00:06:32,000 --> 00:06:35,000 eller startes en av disse structs slik at jeg kunne faktisk begynne å jobbe 123 00:06:35,000 --> 00:06:38,000 med hva som er på innsiden av det, så dette dash betyr at vi må 124 00:06:38,000 --> 00:06:41,000 instantiate klassen akkurat som vi startes at struct 125 00:06:41,000 --> 00:06:43,000 før vi kan kalle denne metoden på det. 126 00:06:43,000 --> 00:06:46,000 Hvis jeg ønsker å begynne å legge argumenter til mine metoder 127 00:06:46,000 --> 00:06:48,000 det blir enda flere bananer. 128 00:06:48,000 --> 00:06:50,000 Her er min metode navn. 129 00:06:50,000 --> 00:06:53,000 Så jeg kommer til å ha et kolon, og etter denne kolon sier det her kommer noen argumenter. 130 00:06:53,000 --> 00:06:56,000 Denne metoden tar ett argument. 131 00:06:56,000 --> 00:06:59,000 Den type argumentasjon sin er en int, og navnet på det argumentet 132 00:06:59,000 --> 00:07:03,000 eller variabel som jeg kommer til å begynne å bruke innsiden av metoden kalles jeg. 133 00:07:03,000 --> 00:07:05,000 Igjen, dette er metoden. Det tar ett argument. 134 00:07:05,000 --> 00:07:10,000 >> Hvis du ønsker å begynne å legge flere argumenter får flere bananer 135 00:07:10,000 --> 00:07:13,000 i at vi har denne kolon som sier her kommer min liste over argumenter. 136 00:07:13,000 --> 00:07:15,000 Dette første argumentet er et heltall. 137 00:07:15,000 --> 00:07:17,000 Nå, dette er andre argumentet interessant. 138 00:07:17,000 --> 00:07:20,000 Variabelen som jeg kommer til å bruke innsiden av funksjon min 139 00:07:20,000 --> 00:07:23,000 kalles f, så innsiden av funksjon min kunne jeg si 140 00:07:23,000 --> 00:07:25,000 f + = 1 eller noe. 141 00:07:25,000 --> 00:07:30,000 Denne saken her er i utgangspunktet en nøkkel for det argumentet eller parameter. 142 00:07:30,000 --> 00:07:34,000 Akkurat som vi hadde viktige verdi-par og noe som JSON eller assosiative matriser 143 00:07:34,000 --> 00:07:37,000 Objective-C gjort beslutningen om å si, ok, bare slik at det er veldig klart 144 00:07:37,000 --> 00:07:39,000 når du kaller en metode hva alle disse parametrene er 145 00:07:39,000 --> 00:07:41,000 Jeg er faktisk kommer til å nevne dem alle. 146 00:07:41,000 --> 00:07:45,000 Når du kaller en metode, vil du faktisk si andFloat, 147 00:07:45,000 --> 00:07:47,000 og da vil du passere det i. 148 00:07:47,000 --> 00:07:50,000 >> Interessant, er dette en ikke navngitt, men alle de andre parametrene er, 149 00:07:50,000 --> 00:07:53,000 så hvis vi hadde en tredje argument jeg kunne si andFloat 150 00:07:53,000 --> 00:07:56,000 og en annen flottør og så videre. 151 00:07:56,000 --> 00:08:01,000 Når jeg kaller disse metodene er det selvfølgelig bananer, 152 00:08:01,000 --> 00:08:04,000 så hvis jeg har et objekt, og jeg definert en metode som kalles foo, 153 00:08:04,000 --> 00:08:09,000 og jeg vil kalle det, i stedet for å si Foo åpne / lukke parentesar 154 00:08:09,000 --> 00:08:11,000 Jeg kommer til å åpne en brakett. 155 00:08:11,000 --> 00:08:13,000 Her er navnet på min metode. 156 00:08:13,000 --> 00:08:17,000 Jeg kommer til å lukke braketten, og dette er objektet jeg ringer det på. 157 00:08:17,000 --> 00:08:20,000 Husk, alle disse metodene eksisterer innenfor klasser 158 00:08:20,000 --> 00:08:23,000 fordi klasser kan ha metoder definert på innsiden av dem. 159 00:08:23,000 --> 00:08:26,000 >> Her har jeg vilkårlig opprettet et objekt av noen klasse, 160 00:08:26,000 --> 00:08:28,000 og dette er syntaksen for å gjøre det. 161 00:08:28,000 --> 00:08:31,000 Det er 2 trinn for å lage et objekt. 162 00:08:31,000 --> 00:08:34,000 Det første trinnet er å si at jeg ønsker å tildele plass. 163 00:08:34,000 --> 00:08:37,000 Dette tilsvarer en malloc. Vi trenger ikke å si malloc lenger. 164 00:08:37,000 --> 00:08:42,000 Vi droppet m, gjorde det Alloc, og erstattet. C med. M.. 165 00:08:42,000 --> 00:08:47,000 Etter at vi Alloc noe da vi trenger å initialisere den. 166 00:08:47,000 --> 00:08:49,000 I utgangspunktet når du oppretter objektene du kanskje ønsker å ha noen logikk 167 00:08:49,000 --> 00:08:53,000 som utføres når de er opprettet, slik at du kan passere i noen standardverdier 168 00:08:53,000 --> 00:08:57,000 eller noe sånt, og så dette init metoden er hva som faktisk skaper objektet. 169 00:08:57,000 --> 00:08:59,000 Vi først tildele plass, akkurat som vi gjorde i C, 170 00:08:59,000 --> 00:09:04,000 og da vi initialisere den, noe som kan eller ikke kan gjøre en hel masse. 171 00:09:04,000 --> 00:09:07,000 Så vi er tilbake denne tingen til et objekt o. 172 00:09:07,000 --> 00:09:09,000 Det er en stjerne her fordi dette er teknisk sett en peker, 173 00:09:09,000 --> 00:09:12,000 men ikke bekymre deg, pekere er ikke så stor en avtale i Objective-C lenger. 174 00:09:12,000 --> 00:09:15,000 >> Nå har vi instansiert denne klassen heter NSObject, 175 00:09:15,000 --> 00:09:19,000 og dette er bare en tilfeldig klasse som Apple har. 176 00:09:19,000 --> 00:09:22,000 Vi har instansiert dette, og nå har jeg en forekomst av denne klassen 177 00:09:22,000 --> 00:09:25,000 i dette objektet o, så det betyr at hvis jeg definerte 178 00:09:25,000 --> 00:09:29,000 disse metodene jeg kan kalle dem som dette. 179 00:09:29,000 --> 00:09:31,000 Tilsvarende, hvis jeg ønsket å kalle en metode med ett argument, 180 00:09:31,000 --> 00:09:34,000 så dette er baren metoden, som tar ett argument, 181 00:09:34,000 --> 00:09:38,000 og her er baz: qux metoden, så dette tar 2 argumenter. 182 00:09:38,000 --> 00:09:44,000 Dette kaller en funksjon på dette objektet o. 183 00:09:44,000 --> 00:09:46,000 Fornuftig? 184 00:09:46,000 --> 00:09:50,000 Syntaksen bør være fornuftig, men du slags blir vant til det. 185 00:09:50,000 --> 00:09:54,000 >> Ok, la oss snakke om noen ting som er innebygd i Objective-C 186 00:09:54,000 --> 00:09:56,000 som ikke ble nødvendigvis bygget inn C. 187 00:09:56,000 --> 00:09:59,000 I C slags vi måtte håndtere strenger som disse dumme karakter matriser, 188 00:09:59,000 --> 00:10:01,000 og det fikk virkelig irriterende. 189 00:10:01,000 --> 00:10:04,000 Objective-C har de alle bygd i for oss, og det er bygget i 190 00:10:04,000 --> 00:10:06,000 bruker denne klassen heter NSString. 191 00:10:06,000 --> 00:10:10,000 Når jeg ønsker å lage en NSString vi har mer uforståelige syntaks. 192 00:10:10,000 --> 00:10:15,000 Snarere enn å si "CS50" vi sier @ "CS50" 193 00:10:15,000 --> 00:10:17,000 og dette er bare syntaksen for å erklære strenger i Objective-C. 194 00:10:17,000 --> 00:10:21,000 Dette er ekstremt lett å glemme, så ikke gjør det. 195 00:10:21,000 --> 00:10:24,000 Nå, når jeg har dette, dette er en streng, men legg merke 196 00:10:24,000 --> 00:10:26,000 det er egentlig bare et objekt. 197 00:10:26,000 --> 00:10:30,000 Jeg sa NSString, som betyr at jeg instansiert klassen 198 00:10:30,000 --> 00:10:32,000 kalt NSString, som noen andre skrev for meg, 199 00:10:32,000 --> 00:10:35,000 og de var veldig fint om det, og så nå 200 00:10:35,000 --> 00:10:37,000 Jeg kan begynne å ringe metoder på den. 201 00:10:37,000 --> 00:10:40,000 Hvis jeg kaller metoden lengden på dette objektet s 202 00:10:40,000 --> 00:10:43,000 det kommer til å gå tilbake til meg lengden på strengen. 203 00:10:43,000 --> 00:10:45,000 Dette er akkurat som strlen i C. 204 00:10:45,000 --> 00:10:47,000 Dette ville tilbake 4. 205 00:10:47,000 --> 00:10:51,000 >> Tilsvarende er en annen metode jeg kanskje vil bry seg om dette characterAtIndex. 206 00:10:51,000 --> 00:10:54,000 Dette er en metode som står på denne strengen s 207 00:10:54,000 --> 00:10:57,000 Jeg vil at du skal få zeroth karakter, 208 00:10:57,000 --> 00:10:59,000 og så dette ville gå tilbake til meg tegnet c, 209 00:10:59,000 --> 00:11:02,000 og det er en hel haug flere av disse metodene som du kan google virkelig enkelt. 210 00:11:02,000 --> 00:11:07,000 Apples dokumentasjon er stor, og vi vil ta en titt på det i en bit. 211 00:11:07,000 --> 00:11:09,000 De er strenger. 212 00:11:09,000 --> 00:11:11,000 Vi har også variabel størrelse arrays bygget i. 213 00:11:11,000 --> 00:11:13,000 Husk i C når vi erklært en rekke 214 00:11:13,000 --> 00:11:16,000 vi hadde å si du har 5 elementer, end of story. 215 00:11:16,000 --> 00:11:18,000 Da vi kom til JavaScript og PHP vi kunne starte 216 00:11:18,000 --> 00:11:20,000 å gjøre ting som å legge elementer eller flytte elementer. 217 00:11:20,000 --> 00:11:22,000 Vi kan gjøre det samme i Objective-C. 218 00:11:22,000 --> 00:11:26,000 Snarere enn å lage en matrise på vanlig C måte 219 00:11:26,000 --> 00:11:30,000 Vi har igjen en annen klasse som kalles NSMutableArray. 220 00:11:30,000 --> 00:11:33,000 Det er også NSArray, 221 00:11:33,000 --> 00:11:35,000 og dette kommer til å utgangspunktet kapsle noen array. 222 00:11:35,000 --> 00:11:38,000 Dette sier det første jeg vil gjøre er at jeg ønsker å allokere 223 00:11:38,000 --> 00:11:41,000 plass for en ny rekke, og etter at jeg fordele det 224 00:11:41,000 --> 00:11:43,000 Jeg så behovet for å initialisere den. 225 00:11:43,000 --> 00:11:45,000 Igjen, bare å ringe disse to metodene. 226 00:11:45,000 --> 00:11:48,000 Nå betyr dette at innsiden av dette objektet en 227 00:11:48,000 --> 00:11:50,000 Jeg har en tom matrise sitter der. 228 00:11:50,000 --> 00:11:54,000 Hvis jeg ønsker å legge noe til denne tabellen, kan jeg ringe addObject metoden. 229 00:11:54,000 --> 00:11:59,000 Jeg vil legge til et objekt til array en, og jeg ønsker å legge strengen CS50. 230 00:11:59,000 --> 00:12:02,000 Hvis jeg ønsket å omvendt fjerne at jeg kan si at jeg ønsker å 231 00:12:02,000 --> 00:12:09,000 fjerne objektet på det første sted på tabellen eller objektet en. 232 00:12:09,000 --> 00:12:11,000 >> Fornuftig? 233 00:12:11,000 --> 00:12:14,000 Ok, du slags bli vant til dette hakeparentes ting. 234 00:12:14,000 --> 00:12:18,000 Forresten, innsiden av en rekke av Apples biblioteker vil du se denne NS. 235 00:12:18,000 --> 00:12:21,000 NS står faktisk for neste steg, som var en av Steve Jobs første selskapene, 236 00:12:21,000 --> 00:12:24,000 og det er der han virkelig begynte å skrive mye av koden 237 00:12:24,000 --> 00:12:27,000 som en slags basis for Mac OS X og alle andre ting, 238 00:12:27,000 --> 00:12:32,000 og så dette NS er slags denne fine arven rope ut til en av de tidligere selskapene 239 00:12:32,000 --> 00:12:34,000 tilbake når Apple ble først starter. 240 00:12:34,000 --> 00:12:36,000 Det er overalt. 241 00:12:36,000 --> 00:12:41,000 La oss ta en titt på en mer helhetlig Objective-C eksempel. 242 00:12:41,000 --> 00:12:44,000 Her er jeg inne i XCode. 243 00:12:44,000 --> 00:12:47,000 For å komme hit, jeg først lastet ned XCode fra App Store, 244 00:12:47,000 --> 00:12:50,000 åpnet den opp, og da jeg gikk opp hit til fil, 245 00:12:50,000 --> 00:12:54,000 over her til nye, og deretter prosjektet. 246 00:12:54,000 --> 00:12:57,000 Etter at jeg gjør at jeg har alle disse alternativer for hva jeg ønsker å lage, 247 00:12:57,000 --> 00:12:59,000 og så skal vi ta en titt på disse valgene senere, 248 00:12:59,000 --> 00:13:03,000 men bare for dette eksemplet, fordi vi ikke faktisk kommer til å ha en app ennå, 249 00:13:03,000 --> 00:13:06,000 Jeg kom ned hit, og jeg sa Command Line Tool, 250 00:13:06,000 --> 00:13:09,000 og dette er en app som jeg kunne kjøre på kommandolinjen 251 00:13:09,000 --> 00:13:12,000 akkurat som vi har kjørt fra C. 252 00:13:12,000 --> 00:13:16,000 Det er hvordan jeg laget dette prosjektet, og så nå er jeg her, 253 00:13:16,000 --> 00:13:20,000 så la oss først se på denne filen, og dette bør se ganske kjent. 254 00:13:20,000 --> 00:13:24,000 Jeg har en int navn. Det er min venn argc, min andre kompis argv. 255 00:13:24,000 --> 00:13:30,000 Og så kan vi se at dette er utgangspunktet for min første Objective-C-programmet. 256 00:13:30,000 --> 00:13:32,000 Her kan vi se bort fra dette for nå. 257 00:13:32,000 --> 00:13:35,000 Dette er i utgangspunktet noen minnehåndtering ting som du ikke vil virkelig 258 00:13:35,000 --> 00:13:37,000 noensinne har å bekymre seg for. 259 00:13:37,000 --> 00:13:39,000 >> La oss se på dette første blokk her. 260 00:13:39,000 --> 00:13:46,000 Denne første linje, hvis jeg sier Student * alice = [[Student lloc] init] hva er det du gjør? 261 00:13:46,000 --> 00:13:50,000 Denne første student her, dette er trolig en klasse. 262 00:13:50,000 --> 00:13:54,000 Dette er ikke en klasse som Apple skrev, men det er en klasse som jeg skrev. 263 00:13:54,000 --> 00:13:57,000 Det første jeg vil gjøre er at jeg ønsker å tildele plass for en ny student, 264 00:13:57,000 --> 00:14:00,000 og da vil jeg initialisere den, så dette gir meg tilbake 265 00:14:00,000 --> 00:14:05,000 denne nye student objekt, og jeg lagrer dette i en variabel kalt Alice. 266 00:14:05,000 --> 00:14:07,000 Hvor kom den klassen kommer fra? 267 00:14:07,000 --> 00:14:12,000 Vel, her på venstre side disse er alle de forskjellige filer inne i prosjektet mitt. 268 00:14:12,000 --> 00:14:16,000 Vi ser her har jeg en Student.h og Student.m. 269 00:14:16,000 --> 00:14:20,000 Den. H fil, husk, er hvor jeg erklærer alle de tingene 270 00:14:20,000 --> 00:14:22,000 som vil eksistere i klassen. 271 00:14:22,000 --> 00:14:25,000 >> La oss ta en titt på det. 272 00:14:25,000 --> 00:14:29,000 Greit, her har vi denne @ grensesnittet, og dette sier at her kommer 273 00:14:29,000 --> 00:14:33,000 uttalelser fra alt som vil eksistere innenfor klassen min. 274 00:14:33,000 --> 00:14:36,000 Så jeg har et kolon. Da har jeg denne NSObject ting. 275 00:14:36,000 --> 00:14:40,000 Dette kolon betyr at arv bit vi diskuterte litt tidligere. 276 00:14:40,000 --> 00:14:43,000 Dette sier alt en NSObject kan gjøre 277 00:14:43,000 --> 00:14:46,000 hvor NSObject er denne klassen skrevet av noen andre, 278 00:14:46,000 --> 00:14:50,000 alt dette NSObject kan gjøre jeg ønsker å være i stand til å gjøre det. 279 00:14:50,000 --> 00:14:54,000 Ved å si: NSObject det betyr at jeg i utgangspunktet 280 00:14:54,000 --> 00:14:58,000 arvet alle funksjonene av en annen klasse. 281 00:14:58,000 --> 00:15:02,000 Som virkelig ga meg en hel haug med forskjellige metoder og egenskaper som jeg kan bruke. 282 00:15:02,000 --> 00:15:05,000 Her nede Jeg oppretter to eiendommer. 283 00:15:05,000 --> 00:15:08,000 Det betyr at min student, hvis dette var en struct, vil disse være de 2 tingene 284 00:15:08,000 --> 00:15:11,000 innsiden av struct mitt, så hver elev har et navn 285 00:15:11,000 --> 00:15:14,000 som er en streng, og en student har også en klasse, 286 00:15:14,000 --> 00:15:17,000 som er en int. 287 00:15:17,000 --> 00:15:23,000 >> Til slutt, her nede skal jeg lage en metode for student min. 288 00:15:23,000 --> 00:15:26,000 Jeg ringte min metode, initWithName, og det tar ett argument, 289 00:15:26,000 --> 00:15:31,000 og at argumentet er en streng, og jeg kalte det navnet. 290 00:15:31,000 --> 00:15:35,000 La oss nå se på hvordan vi faktisk implementert denne klassen. 291 00:15:35,000 --> 00:15:38,000 Her, nå er jeg inne i min. M-fil, 292 00:15:38,000 --> 00:15:40,000 m for gjennomføring, antar jeg. 293 00:15:40,000 --> 00:15:44,000 Jeg har min gjennomføring, min ende, og her er der jeg faktisk definerer 294 00:15:44,000 --> 00:15:47,000 hva initWithName gjør. 295 00:15:47,000 --> 00:15:50,000 Jeg har initWithName, navnet på parameteren min, og da dette 296 00:15:50,000 --> 00:15:53,000 er hvor jeg faktisk lage en student, 297 00:15:53,000 --> 00:15:56,000 og så dette er litt kryptisk, men dette er slags standardtekst 298 00:15:56,000 --> 00:15:58,000 som du ønsker å inkludere i konstruktører. 299 00:15:58,000 --> 00:16:02,000 Denne initialisering funksjon her, initWithName, er en type konstruktør. 300 00:16:02,000 --> 00:16:05,000 Du i utgangspunktet bygge en ny student objekt 301 00:16:05,000 --> 00:16:07,000 og kanskje sende noen data inne i den. 302 00:16:07,000 --> 00:16:11,000 Det første jeg vil gjøre er at jeg ønsker å kalle init på denne super ting. 303 00:16:11,000 --> 00:16:15,000 >> Husk at når jeg sa tilbake hit i. H fil 304 00:16:15,000 --> 00:16:21,000 at alt en NSObject har en student har også. 305 00:16:21,000 --> 00:16:24,000 Det betyr at når jeg oppretter en elev hva jeg også trenger å gjøre er 306 00:16:24,000 --> 00:16:28,000 sørge for at NSObject at jeg arve alle disse dataene fra 307 00:16:28,000 --> 00:16:32,000 er også riktig initialisert. 308 00:16:32,000 --> 00:16:36,000 Det jeg trenger å si er dette super faktisk kommer til å referere til den overordnede klassen 309 00:16:36,000 --> 00:16:39,000 at jeg arve fra, så jeg ønsker å sørge for at jeg initialisere 310 00:16:39,000 --> 00:16:43,000 alt som jeg avhengig før jeg begynner å prøve å bruke den. 311 00:16:43,000 --> 00:16:46,000 Så hvis det initialisert korrekt dette er akkurat som å si at hvis malloc 312 00:16:46,000 --> 00:16:50,000 kom ikke tilbake null så jeg kan begynne å sette noen egenskaper. 313 00:16:50,000 --> 00:16:54,000 >> I JavaScript og PHP hadde vi dette søkeordet kalte dette, 314 00:16:54,000 --> 00:16:58,000 og dette referert til nåværende forekomst av en klasse. 315 00:16:58,000 --> 00:17:00,000 I Objective-C kaller vi dette selv. 316 00:17:00,000 --> 00:17:04,000 Når jeg sier self.name, betyr det at objektet 317 00:17:04,000 --> 00:17:07,000 Jeg opprettet nettopp da jeg sa student Alloc init, 318 00:17:07,000 --> 00:17:09,000 som kommer til å gi meg tilbake en gjenstand. 319 00:17:09,000 --> 00:17:12,000 Det betyr at jeg ønsker å sette navnet på det objektet 320 00:17:12,000 --> 00:17:15,000 til hva jeg nettopp passert i. 321 00:17:15,000 --> 00:17:18,000 Akkurat som i C, får vi tilgang til medlemmer med dette punkt, 322 00:17:18,000 --> 00:17:21,000 så self.name sier navnet på studenten objektet 323 00:17:21,000 --> 00:17:24,000 Nå kommer til å være det du nettopp passert i. 324 00:17:24,000 --> 00:17:28,000 Og så til slutt, kan jeg returnere det så jeg faktisk får noe tilbake. 325 00:17:28,000 --> 00:17:30,000 >> Spørsmål? 326 00:17:30,000 --> 00:17:34,000 Ok, så dette selv = super init, 327 00:17:34,000 --> 00:17:37,000 hvis du ikke helt forstår arv ting ikke bekymre deg. 328 00:17:37,000 --> 00:17:40,000 Bare vet at hvis du noen gang ønsker å lage din egen init metoden bare 329 00:17:40,000 --> 00:17:42,000 gjøre det, og du vil være godt å gå. 330 00:17:42,000 --> 00:17:44,000 Ja. >> [Student] Hva gjør hvis selvtillit bety? 331 00:17:44,000 --> 00:17:49,000 Dette betyr at når vi malloc noe vi alltid sjekket om det var lik null, 332 00:17:49,000 --> 00:17:51,000 og hvis det var null, så vi avsluttet. 333 00:17:51,000 --> 00:17:55,000 Dette er det samme, fordi hvis dette returnerer null, så vi sannsynligvis kommer til å SEG feil 334 00:17:55,000 --> 00:17:57,000 hvis vi begynner å prøve å manipulere det. 335 00:17:57,000 --> 00:18:01,000 Det er vår student klassen. 336 00:18:01,000 --> 00:18:03,000 Det betyr at vi kan starte våre studenter i en av to måter. 337 00:18:03,000 --> 00:18:08,000 Hvis jeg sier student Alloc init jeg ikke bruker denne metoden som jeg nettopp skrev, 338 00:18:08,000 --> 00:18:11,000 og i stedet jeg kan bare si alice.name, 339 00:18:11,000 --> 00:18:14,000 og nå skal jeg sette den egenskapen navn. 340 00:18:14,000 --> 00:18:17,000 >> Tilsvarende, hvis jeg ønsker å bruke det initWithName metoden 341 00:18:17,000 --> 00:18:20,000 Jeg kan bare si Alloc, og da heller enn å si init 342 00:18:20,000 --> 00:18:24,000 Jeg kommer til å kalle det metode som jeg nettopp opprettet, og jeg kommer til å passere i Bob. 343 00:18:24,000 --> 00:18:30,000 På dette punktet, har dette objektet Bob en navn lik Bob. 344 00:18:30,000 --> 00:18:35,000 Ok, her nede jeg bruker som NSMutableArray som vi så på tidligere. 345 00:18:35,000 --> 00:18:38,000 Jeg tildeling space.Then jeg initialisere en ny rekke. 346 00:18:38,000 --> 00:18:40,000 Jeg kommer til å legge to ting til det. 347 00:18:40,000 --> 00:18:43,000 Denne tabellen har nå student objekter. 348 00:18:43,000 --> 00:18:46,000 Legg merke til at ingensteds jeg må si dette er en rekke studenter. 349 00:18:46,000 --> 00:18:48,000 Jeg sa at det er en matrise, periode. 350 00:18:48,000 --> 00:18:50,000 Da kan jeg plassere hva innsiden av det som jeg vil. 351 00:18:50,000 --> 00:18:52,000 Her har jeg to objekter. 352 00:18:52,000 --> 00:18:56,000 >> Endelig har jeg et annet objekt her, dette TF. 353 00:18:56,000 --> 00:18:59,000 Over her i TF.h utgangspunktet det samme. 354 00:18:59,000 --> 00:19:01,000 Jeg arvet fra NSObject, og forresten, 355 00:19:01,000 --> 00:19:03,000 når du oppretter klasser dette er gjort for deg, 356 00:19:03,000 --> 00:19:06,000 denne typen grensesnitt standardtekst. 357 00:19:06,000 --> 00:19:08,000 Den har en eiendom av studenter. 358 00:19:08,000 --> 00:19:15,000 Jeg har et par metoder her som ikke virkelig gjøre en hel masse, 359 00:19:15,000 --> 00:19:18,000 og så det betyr når jeg lager denne TF objekt 360 00:19:18,000 --> 00:19:23,000 Jeg kan kalle denne metoden karakter på det slik. 361 00:19:23,000 --> 00:19:26,000 Eventuelle spørsmål om Objective-C syntaks før vi begynner å flytte inn i noen mer 362 00:19:26,000 --> 00:19:30,000 interessant apps utvikling ting? 363 00:19:30,000 --> 00:19:34,000 >> Ok, så la oss faktisk gjør en iPhone-app. 364 00:19:34,000 --> 00:19:39,000 Kjernen klasser som du skal bruke innsiden av din iPhone app kalles visning kontrollere, 365 00:19:39,000 --> 00:19:42,000 og en visning kontrolleren representerer i utgangspunktet et enkelt skjermbilde 366 00:19:42,000 --> 00:19:46,000 innsiden av programmet ditt, så hvis jeg er på musikk app, for eksempel, 367 00:19:46,000 --> 00:19:50,000 én visning kontrolleren kunne representere visningen der jeg vise alle sangene på min iPhone. 368 00:19:50,000 --> 00:19:53,000 Another view controller kan være når jeg klikker på en sang og begynne å spille det 369 00:19:53,000 --> 00:19:55,000 eller som jeg dykke ned i kunstnere. 370 00:19:55,000 --> 00:19:59,000 Hver av disse forskjellige skjermer kan være representert som et annet syn kontrolleren, 371 00:19:59,000 --> 00:20:04,000 og en visning kontrolleren er egentlig bare en klasse som sier hvordan dette skjermbildet fungerer. 372 00:20:04,000 --> 00:20:07,000 Ting inni av en visning kontroller, kommer vi til å ha egenskaper, 373 00:20:07,000 --> 00:20:10,000 så ting som en knapp kommer til å være en egenskap av vårt syn kontrolleren. 374 00:20:10,000 --> 00:20:13,000 >> Vi kommer også til å ha metoder, og disse er i utgangspunktet hendelseshåndterere. 375 00:20:13,000 --> 00:20:16,000 Denne metoden sier når du trykker på denne knappen 376 00:20:16,000 --> 00:20:19,000 Jeg ønsker å gjøre noe, og til slutt, igjen, 377 00:20:19,000 --> 00:20:24,000 vi kommer til å bruke denne selv søkeord for å få tilgang til gjeldende forekomsten. 378 00:20:24,000 --> 00:20:29,000 Å bygge grensesnitt i iOS er faktisk veldig, veldig enkelt. 379 00:20:29,000 --> 00:20:32,000 De har denne fine dra og slipp-grensesnitt kalt Interface Builder, 380 00:20:32,000 --> 00:20:37,000 og de to sentrale begreper som wire opp din Objective-C til Interface Builder 381 00:20:37,000 --> 00:20:40,000 er IBOutlet og IBAction. 382 00:20:40,000 --> 00:20:44,000 En IBOutlet sier ganske enkelt at hvis du deklarerer en eiendom som er en knapp, 383 00:20:44,000 --> 00:20:47,000 og du ønsker å koble den opp til noe i den faktiske UI, 384 00:20:47,000 --> 00:20:49,000 du kommer til å si at det er en stikkontakt. 385 00:20:49,000 --> 00:20:51,000 Tilsvarende, hvis du ønsker å representere en hendelseshåndterer 386 00:20:51,000 --> 00:20:54,000 så du kommer til å si at det er en handling. 387 00:20:54,000 --> 00:20:57,000 >> Å faktisk koble opp denne grafisk fremstilling 388 00:20:57,000 --> 00:21:00,000 og koden er det veldig, veldig enkelt. 389 00:21:00,000 --> 00:21:03,000 Hvis du ønsker å legge ved et IBOutlet, alt du trenger å gjøre deg kontrollere klikk, 390 00:21:03,000 --> 00:21:05,000 og vi får se et eksempel på dette virkelig rask. 391 00:21:05,000 --> 00:21:07,000 Du styrer klikker der det står View Controller. 392 00:21:07,000 --> 00:21:09,000 Du kommer til å dra inn i grensesnittet, eller omvendt, 393 00:21:09,000 --> 00:21:13,000 Hvis du ønsker å koble opp en hendelseshåndterer du kommer til å dra fra grensesnittet 394 00:21:13,000 --> 00:21:15,000 i den andre retningen. 395 00:21:15,000 --> 00:21:20,000 La oss ta en titt på en veldig enkel iOS eksempel. 396 00:21:20,000 --> 00:21:23,000 >> La oss lage et nytt prosjekt. 397 00:21:23,000 --> 00:21:25,000 Jeg kommer til å komme opp hit til Application, 398 00:21:25,000 --> 00:21:28,000 og jeg kommer til å klikke Enkel visning Application. 399 00:21:28,000 --> 00:21:31,000 Jeg kommer til å klikke neste. Jeg vil gi mitt prosjekt et navn. 400 00:21:31,000 --> 00:21:33,000 Jeg vil kalle det Hello. 401 00:21:33,000 --> 00:21:36,000 Interessant, antar Apple du oppretter et produkt 402 00:21:36,000 --> 00:21:38,000 slik at du kan selge det, og de kan tjene penger. 403 00:21:38,000 --> 00:21:41,000 Her nede jeg kommer til å si at dette er en iPhone-app. 404 00:21:41,000 --> 00:21:44,000 Du kan opprette en iPad app, eller hvis du ønsker å lage en av de apps 405 00:21:44,000 --> 00:21:47,000 som støtter begge enhetene du kan gjøre det også. 406 00:21:47,000 --> 00:21:49,000 Dette er hva du vil at merkingen skal se ut. 407 00:21:49,000 --> 00:21:51,000 >> Du ønsker å bruke dreiebok, som vi skal se senere, 408 00:21:51,000 --> 00:21:54,000 og du definitivt vil bruke automatisk referanse telling, 409 00:21:54,000 --> 00:21:58,000 som er en fin funksjon som hindrer deg fra å måtte si malloc og gratis. 410 00:21:58,000 --> 00:22:03,000 Med mindre du ønsker å ringe malloc og gratis, ville jeg la dette sjekket. 411 00:22:03,000 --> 00:22:07,000 Jeg skal klikke neste, og til slutt, dette kommer til å spørre meg hvor jeg vil lagre det. 412 00:22:07,000 --> 00:22:14,000 Jeg vil treffe lage, og her vi går. 413 00:22:14,000 --> 00:22:16,000 Jeg opprettet et nytt prosjekt. 414 00:22:16,000 --> 00:22:19,000 Over her på venstre er alle filene som er inne i prosjektet mitt, 415 00:22:19,000 --> 00:22:22,000 og legge merke til at jeg fikk en hel haug, og jeg hadde ikke selv gjøre noe. 416 00:22:22,000 --> 00:22:24,000 IOS er stor. 417 00:22:24,000 --> 00:22:27,000 >> For eksempel, her denne ViewController.h, 418 00:22:27,000 --> 00:22:30,000 dette kommer til å representere min første visning kontrolleren, 419 00:22:30,000 --> 00:22:32,000 så det første skjermbildet innsiden av app min. 420 00:22:32,000 --> 00:22:34,000 Nå vet vi hva dette sier. 421 00:22:34,000 --> 00:22:36,000 Vi sier jeg ringer denne klassen ViewController, 422 00:22:36,000 --> 00:22:40,000 og en ViewController gjør alt som en UIViewController gjør, 423 00:22:40,000 --> 00:22:43,000 og dette, igjen, er noen klasse som Apple skrev som gjør mye av hendig ting for oss 424 00:22:43,000 --> 00:22:46,000 liker vise skjermen. 425 00:22:46,000 --> 00:22:50,000 Her er der jeg faktisk kan begynne å definere hva mitt syn kontrolleren gjør, 426 00:22:50,000 --> 00:22:52,000 og det viser seg at jeg egentlig ikke trenger noe av dette. 427 00:22:52,000 --> 00:22:55,000 Dette er standardtekst kode som Apple gir meg gratis. 428 00:22:55,000 --> 00:22:59,000 Jeg trengte det første linje, eller jeg har ikke en klasse, 429 00:22:59,000 --> 00:23:02,000 slik at vi kan bli kvitt det og bli kvitt dette. 430 00:23:02,000 --> 00:23:05,000 Ok, så dette er min tom skjerm. 431 00:23:05,000 --> 00:23:08,000 >> Nå la oss klikke på denne MainStoryboard.storyboard, 432 00:23:08,000 --> 00:23:11,000 og det er her det begynner å bli interessant. 433 00:23:11,000 --> 00:23:14,000 Dette er første skjermen på app min. 434 00:23:14,000 --> 00:23:17,000 Hvis jeg ønsker å legge til en knapp, i HTML måtte jeg lage en knapp tag. 435 00:23:17,000 --> 00:23:20,000 I Android må du lage en knapp tag, 436 00:23:20,000 --> 00:23:23,000 men i iOS hvis jeg bare komme ned hit til høyre 437 00:23:23,000 --> 00:23:27,000 og hvis jeg klikker på denne tredje en her hvor det står objekter, 438 00:23:27,000 --> 00:23:31,000 og jeg kan bla nedover, eller jeg kan begynne å lete etter knappen. 439 00:23:31,000 --> 00:23:35,000 Og se, en knapp, så hvis jeg faktisk dra og slippe dette rett der, 440 00:23:35,000 --> 00:23:38,000 Jeg har nettopp lagt en knapp på denne skjermen på app min. 441 00:23:38,000 --> 00:23:41,000 Hvis jeg ønsker å endre teksten, kan jeg dobbelklikke på den, 442 00:23:41,000 --> 00:23:47,000 si noe fristende som "Trykk Meg." 443 00:23:47,000 --> 00:23:51,000 Ok, nå hvis jeg kjører dette programmet, så vi kompilere den, 444 00:23:51,000 --> 00:23:54,000 så å kjøre det jeg trykker på play-knappen øverst til venstre, og det er min app. 445 00:23:54,000 --> 00:23:58,000 Jeg har ikke gjort noe, og jeg fikk en søt ser iPhone-app. 446 00:23:58,000 --> 00:24:01,000 Hvis jeg ønsker å stoppe det, kan du klikke på stoppknappen 447 00:24:01,000 --> 00:24:03,000 fordi det er mer moro. 448 00:24:03,000 --> 00:24:07,000 >> La oss si at jeg faktisk ønsker at noe skal skje når jeg trykker på denne knappen. 449 00:24:07,000 --> 00:24:09,000 For å gjøre at det jeg trenger å gjøre er jeg trenger for å lage 450 00:24:09,000 --> 00:24:13,000 en ny hendelse fører eller en handling. 451 00:24:13,000 --> 00:24:16,000 Det betyr at jeg må lage noen metode som jeg ønsker å bli kalt 452 00:24:16,000 --> 00:24:18,000 når jeg trykker på knappen, så la oss lage en ny metode. 453 00:24:18,000 --> 00:24:20,000 Jeg er inne i ViewController.h. 454 00:24:20,000 --> 00:24:22,000 Jeg må si at en metode eksisterer. 455 00:24:22,000 --> 00:24:26,000 Jeg trenger en bindestrek først fordi jeg kommer til å kalle dette på visningen kontrolleren. 456 00:24:26,000 --> 00:24:28,000 Jeg må gi dette en type. 457 00:24:28,000 --> 00:24:31,000 Typen dette kommer til å være at IBAction ting som vi så tidligere. 458 00:24:31,000 --> 00:24:35,000 Dette er en hendelseshåndterer, så det kommer til å returnere en IBAction, 459 00:24:35,000 --> 00:24:38,000 og dette er et hint til XCode å si at 460 00:24:38,000 --> 00:24:40,000 dette er noe jeg ønsker å koble noe til. 461 00:24:40,000 --> 00:24:45,000 Jeg kan gi det et navn, som buttonPressed, semikolon. 462 00:24:45,000 --> 00:24:48,000 >> Nå har jeg erklært en ny metode innsiden av klassen min. 463 00:24:48,000 --> 00:24:50,000 Jeg har sagt dette metoden har til å eksistere. 464 00:24:50,000 --> 00:24:53,000 Nå la oss komme inn ViewController.m, 465 00:24:53,000 --> 00:24:56,000 og la oss si hva denne metoden kan gjøre. 466 00:24:56,000 --> 00:25:03,000 Hvis jeg begynner å skrive, for eksempel, (void) buttonPressed 467 00:25:03,000 --> 00:25:06,000 varsel XCode er virkelig fin og autocompletes for meg. 468 00:25:06,000 --> 00:25:09,000 Det er virkelig flott. 469 00:25:09,000 --> 00:25:12,000 Legg merke til her at innsiden av. M-filen kan jeg også si ugyldig, 470 00:25:12,000 --> 00:25:15,000 og dette er fordi at IBAction er faktisk ikke en type. 471 00:25:15,000 --> 00:25:19,000 Det er faktisk hashtag definert et sted å være et tomrom, 472 00:25:19,000 --> 00:25:22,000 og igjen, dette er bare et hint til XCode som sier 473 00:25:22,000 --> 00:25:25,000 Jeg vil at dette skal være en hendelseshåndterer, og vi vil se hvorfor på bare et sekund. 474 00:25:25,000 --> 00:25:28,000 Når denne knappen trykkes Jeg kommer til å gjøre noe irriterende 475 00:25:28,000 --> 00:25:30,000 liker vise en popup. 476 00:25:30,000 --> 00:25:35,000 >> Å gjøre at jeg kan lage en ny forekomst av denne klassen heter UIAlertView, 477 00:25:35,000 --> 00:25:39,000 og dette er en klasse som Apple skrev at kommer til å vise irriterende popups. 478 00:25:39,000 --> 00:25:43,000 Vi vil kalle dette popup-melding, og jeg har 2 trinn, husk, for å skape dette objektet. 479 00:25:43,000 --> 00:25:46,000 Det første jeg må gjøre er å tildele plass. 480 00:25:46,000 --> 00:25:48,000 Jeg vil ha en UIAlertView. 481 00:25:48,000 --> 00:25:51,000 Jeg ønsker å tildele plass. Det er min første metoden. 482 00:25:51,000 --> 00:25:53,000 Mitt neste metode er at jeg ønsker å initialisere den, 483 00:25:53,000 --> 00:25:58,000 og så har jeg denne store, lange metode som kalles initWithTitle. 484 00:25:58,000 --> 00:26:01,000 Det er i utgangspunktet kommer til å kontrollere hva denne popup sier. 485 00:26:01,000 --> 00:26:04,000 Tittelen på popup min kan være hallo. 486 00:26:04,000 --> 00:26:08,000 Budskapet i denne popup kan være "Dette er iOS." 487 00:26:08,000 --> 00:26:10,000 Delegat ting, jeg vet ikke hva det er. 488 00:26:10,000 --> 00:26:13,000 La oss si det er ingenting. 489 00:26:13,000 --> 00:26:18,000 Nå knappen som kommer til å dukke opp kan si noe sånt som "Det er sikkert," 490 00:26:18,000 --> 00:26:24,000 og jeg egentlig ikke ønsker noen andre knapper, så la oss slette det og lukke braketten. 491 00:26:24,000 --> 00:26:27,000 >> Ok, jeg opprettet en ekstra ett. Det vi går. 492 00:26:27,000 --> 00:26:30,000 Dette er hvordan jeg kan lage en ny popup. 493 00:26:30,000 --> 00:26:35,000 Hvis jeg ønsker å faktisk vise popup jeg vil kalle showet metoden. 494 00:26:35,000 --> 00:26:38,000 For å gjøre det jeg kan si våken og show, 495 00:26:38,000 --> 00:26:40,000 og igjen, var autofullfør super fin. 496 00:26:40,000 --> 00:26:42,000 Hvis jeg har glemt hva det var, hvis jeg bare skrev i s, 497 00:26:42,000 --> 00:26:45,000 Jeg kan bla gjennom her for å finne ut hva det var, 498 00:26:45,000 --> 00:26:48,000 og det filtrerer pent. 499 00:26:48,000 --> 00:26:52,000 Nå har jeg laget denne nye popup. 500 00:26:52,000 --> 00:26:55,000 Vi kommer tilbake til hva representanten betyr senere, 501 00:26:55,000 --> 00:26:58,000 og nå vil jeg si at jeg ønsker denne metoden for å bli sparket 502 00:26:58,000 --> 00:27:01,000 når jeg trykker på knappen, så jeg kommer til å komme tilbake til storyboard min, 503 00:27:01,000 --> 00:27:04,000 og jeg ønsker å nå legge denne IBAction. 504 00:27:04,000 --> 00:27:06,000 Det første du ønsker å gjøre er å klikke på knappen. 505 00:27:06,000 --> 00:27:08,000 Når jeg trykker på denne knappen jeg vil ha noe å skje. 506 00:27:08,000 --> 00:27:10,000 Jeg har ikke tenkt å holde nede kontroll. 507 00:27:10,000 --> 00:27:13,000 Jeg kommer til å klikke og dra fra knappen 508 00:27:13,000 --> 00:27:15,000 til over her hvor står det View Controller. 509 00:27:15,000 --> 00:27:17,000 Vi kan se at det pent lyser opp. 510 00:27:17,000 --> 00:27:22,000 >> Hvis jeg la gå med musen min jeg nå har denne popup over her hvor jeg har noen alternativer. 511 00:27:22,000 --> 00:27:24,000 En av disse er hendelser som jeg kan registrere. 512 00:27:24,000 --> 00:27:28,000 Dette er alle disse metodene jeg erklært i min h-fil som IBActions. 513 00:27:28,000 --> 00:27:31,000 Dette er hvordan XCode vet hva som skal vises i denne lille listen, 514 00:27:31,000 --> 00:27:33,000 så det er bare et hint. 515 00:27:33,000 --> 00:27:37,000 Hvis jeg klikker på knappen inne, har jeg nå registrert hendelseshåndterer. 516 00:27:37,000 --> 00:27:41,000 I JavaScript måtte vi si at jeg har noen kode som er registrert hendelseshåndterer. 517 00:27:41,000 --> 00:27:43,000 I Objective-C var det virkelig så enkelt. 518 00:27:43,000 --> 00:27:46,000 Hvis jeg kjører dette igjen 519 00:27:46,000 --> 00:27:49,000 nå når jeg trykker på knappen min hendelseshåndterer kommer til å skyte, 520 00:27:49,000 --> 00:27:51,000 og jeg kommer til å få dette popup. 521 00:27:51,000 --> 00:27:54,000 Super, super enkelt der. 522 00:27:54,000 --> 00:27:57,000 >> Hvis du noen gang vil se alle hendelsene som skjer skal registreres 523 00:27:57,000 --> 00:28:00,000 på en komponent hvis jeg klikker på denne knappen 524 00:28:00,000 --> 00:28:02,000 og jeg kom hit til høyre side 525 00:28:02,000 --> 00:28:05,000 først kan du se over her jeg kan gjøre ting som den type knappen, 526 00:28:05,000 --> 00:28:08,000 så hvis du ønsker en av de jeg er eller Lagre knappen 527 00:28:08,000 --> 00:28:10,000 eller hva. 528 00:28:10,000 --> 00:28:13,000 Hvis jeg ønsker å se alle hendelsene som er på denne knappen 529 00:28:13,000 --> 00:28:16,000 hvis jeg kommer hele veien hit til høyre side 530 00:28:16,000 --> 00:28:19,000 vi kan se her på hendelsene jeg har alle disse forskjellige hendelser. 531 00:28:19,000 --> 00:28:23,000 Jeg kan trykke på knappen, når jeg slipper knappen, når jeg dobbelt trykk eller noe, 532 00:28:23,000 --> 00:28:26,000 og den jeg bare registrert er denne begivenheten som heter Touch Up Inside, 533 00:28:26,000 --> 00:28:29,000 og dette sier at så snart fingeren kommer av knappen 534 00:28:29,000 --> 00:28:32,000 at hendelsen kommer til brann, og det er akkurat hva som skjedde. 535 00:28:32,000 --> 00:28:36,000 Dette er slags standard-knappen trykkes hendelsen. 536 00:28:36,000 --> 00:28:39,000 >> Eventuelle spørsmål så langt? 537 00:28:39,000 --> 00:28:43,000 Ok, det er hvordan vi kan begynne å kable opp ting i koden vår 538 00:28:43,000 --> 00:28:46,000 inn i ting inne i grensesnittet vårt. 539 00:28:46,000 --> 00:28:49,000 Husk det første vi måtte gjøre var å finne koden, 540 00:28:49,000 --> 00:28:54,000 og deretter vi kablet opp grensesnittet til koden, 541 00:28:54,000 --> 00:28:57,000 og det er vår første app. 542 00:28:57,000 --> 00:29:00,000 Ok, det var kult, og vi skapte denne knappen. 543 00:29:00,000 --> 00:29:03,000 Hva hvis vi ikke ønsker å ha til å lage en haug av eiendommer 544 00:29:03,000 --> 00:29:05,000 representerer disse knappene? 545 00:29:05,000 --> 00:29:08,000 For eksempel, i Tic Tac Toe har jeg 9 knapper, 546 00:29:08,000 --> 00:29:11,000 og det ville være super, super irriterende å måtte dra og slippe 9 ganger 547 00:29:11,000 --> 00:29:14,000 eller om jeg måtte gjøre Tic Tac Toe med 81 i stedet for 9 548 00:29:14,000 --> 00:29:17,000 og jeg måtte dra og slippe 81 ganger, og det er halt. 549 00:29:17,000 --> 00:29:20,000 Hva vi kan gjøre i stedet er mye som en HTML 550 00:29:20,000 --> 00:29:23,000 når vi hadde ting som IDer og navn, og vi kan søke etter ting 551 00:29:23,000 --> 00:29:27,000 av ID sin, det er en lignende forestilling i iOS kalt tags. 552 00:29:27,000 --> 00:29:31,000 >> En kode er rett og slett en unik numerisk identifikator for en komponent. 553 00:29:31,000 --> 00:29:34,000 Hvis jeg sier dette har en tagg på 0, for eksempel, 554 00:29:34,000 --> 00:29:38,000 hvis jeg oppretter en knapp og gi det en kode på 0, og vi får se hvordan du gjør det i løpet av et sekund, 555 00:29:38,000 --> 00:29:41,000 hvis jeg ønsker å få denne knappen kan jeg bare si at jeg ønsker å ringe 556 00:29:41,000 --> 00:29:45,000 den viewWithTag metoden på objektet over her, 557 00:29:45,000 --> 00:29:48,000 den self.view, som representerer den aktuelle skjermen, for eksempel. 558 00:29:48,000 --> 00:29:53,000 Hvis jeg kaller det viewWithTag metoden, kommer jeg til å trekke tilbake knappen med tag 0. 559 00:29:53,000 --> 00:29:58,000 La oss ta en titt på denne ved å bygge Tic Tac Toe. 560 00:29:58,000 --> 00:30:01,000 Først, dette er min storyboard. 561 00:30:01,000 --> 00:30:05,000 Jeg har opprettet disse 10 UI knappene. 562 00:30:05,000 --> 00:30:07,000 Legg merke til de er alle i samme størrelse. 563 00:30:07,000 --> 00:30:11,000 Hvis jeg klikker på en av disse, og jeg kommer tilbake hit på denne høyre side 564 00:30:11,000 --> 00:30:15,000 vil du se jeg justert skriften her, så jeg gjorde skriften litt større, 565 00:30:15,000 --> 00:30:19,000 men det jeg også gjorde var jeg satt denne koden. 566 00:30:19,000 --> 00:30:23,000 Jeg sa at dette har en kode på 1, og det er øverst til venstre. 567 00:30:23,000 --> 00:30:26,000 >> Nå, hvis jeg klikker på en annen knapp, som denne andre en her, 568 00:30:26,000 --> 00:30:29,000 Nå vil du se at min tag er to. 569 00:30:29,000 --> 00:30:32,000 Hver av disse knappene har bare en unik kode, 570 00:30:32,000 --> 00:30:35,000 og så dette er senere hvordan jeg skal begynne å samhandle 571 00:30:35,000 --> 00:30:38,000 med app min. 572 00:30:38,000 --> 00:30:40,000 Dette er alle inne i en View Controller, 573 00:30:40,000 --> 00:30:42,000 men her er hva vi har. 574 00:30:42,000 --> 00:30:44,000 Vi har 3 egenskaper her. 575 00:30:44,000 --> 00:30:49,000 Den første og siste kommer til å representere staten mitt bord. 576 00:30:49,000 --> 00:30:53,000 I utgangspunktet er dette første er en rekke representerer hvor Xs og Os er. 577 00:30:53,000 --> 00:30:57,000 Denne andre forteller oss her hvem sin tur det er. 578 00:30:57,000 --> 00:31:01,000 Du vil merke at jeg også har disse tingene her. 579 00:31:01,000 --> 00:31:05,000 Før når vi erklært egenskapene vi ga dem et navn og en type. 580 00:31:05,000 --> 00:31:08,000 Vi kan også gi dem litt ekstra informasjon her. 581 00:31:08,000 --> 00:31:11,000 Denne første seier nonatomic, og hva dette sier 582 00:31:11,000 --> 00:31:16,000 er i utgangspunktet bare en ting noen gang vil være å prøve å få tilgang til denne variabelen gangen. 583 00:31:16,000 --> 00:31:19,000 Du kan gjøre mer komplekse applikasjoner som er multi-threaded, 584 00:31:19,000 --> 00:31:22,000 og så tilbake i Scratch hadde vi forskjellige tråder, 585 00:31:22,000 --> 00:31:25,000 og ulike sprites kan gjøre forskjellige ting samtidig. 586 00:31:25,000 --> 00:31:29,000 >> Hvis det ikke er tilfelle, som det ikke er i noe som vi vil se på, 587 00:31:29,000 --> 00:31:33,000 hvis vi sier nonatomic det faktisk kommer til å gjøre ting litt raskere. 588 00:31:33,000 --> 00:31:37,000 Vi har også dette som kalles tildele, sterk eller svak. 589 00:31:37,000 --> 00:31:40,000 Dette tilordne bare sier at dette er en standard type. 590 00:31:40,000 --> 00:31:43,000 Dette er ikke et objekt eller en peker fordi dette er bare en bool, 591 00:31:43,000 --> 00:31:46,000 så bool er bygd inn Objective-C. 592 00:31:46,000 --> 00:31:49,000 Dette sier ikke prøv å gjøre noe fancy med pekere her. 593 00:31:49,000 --> 00:31:51,000 Det er en vanlig gammel skalering. 594 00:31:51,000 --> 00:31:54,000 Sterke og svake, sier dette svake som faktisk 595 00:31:54,000 --> 00:31:57,000 Jeg vil at dette skal peke på noe i visningen kontrolleren. 596 00:31:57,000 --> 00:32:00,000 Jeg har ikke tenkt å faktisk tildele eller init dette selv. 597 00:32:00,000 --> 00:32:04,000 Interface Builder, når jeg kjører programmet, kommer til å håndtere alt som initialisering. 598 00:32:04,000 --> 00:32:07,000 Hvis jeg sier svak, sier at noen andre kommer til å være å skape dette. 599 00:32:07,000 --> 00:32:09,000 Hvis jeg sier sterk, sier dette at jeg kommer til å være den 600 00:32:09,000 --> 00:32:12,000 det er å skape dette forumet objekt, 601 00:32:12,000 --> 00:32:14,000 og så her jeg har noen flere metoder her, 602 00:32:14,000 --> 00:32:18,000 for eksempel, en handling for når det nye spillet trykkes, 603 00:32:18,000 --> 00:32:20,000 en handling for når noen av de andre knappene trykkes, 604 00:32:20,000 --> 00:32:23,000 og et cetera. 605 00:32:23,000 --> 00:32:26,000 >> Vi vil ikke komme inn for mye av logikken i Tic Tac Toe, 606 00:32:26,000 --> 00:32:30,000 selv om det er veldig spennende, men la oss ta en titt på 607 00:32:30,000 --> 00:32:33,000 noen av de tingene som vi kan gjøre innsiden av iOS. 608 00:32:33,000 --> 00:32:35,000 Dette nye spillet metoden kommer til å bli sparket 609 00:32:35,000 --> 00:32:37,000 når jeg trykker det nye spillet knappen. 610 00:32:37,000 --> 00:32:41,000 Å koble det opp jeg bare komme over til storyboard min. 611 00:32:41,000 --> 00:32:43,000 Jeg klikket på nytt spill. 612 00:32:43,000 --> 00:32:47,000 Hvis jeg kommer over her til høyre jeg kan se at 613 00:32:47,000 --> 00:32:50,000 Touch Up Innsiden er kablet til newGame metoden. 614 00:32:50,000 --> 00:32:53,000 Det er derfor dette kommer til å få sparken. 615 00:32:53,000 --> 00:32:56,000 Den newGame metoden kommer til å gjøre noen satt opp. 616 00:32:56,000 --> 00:32:59,000 Det kommer til å si at jeg vil at du skal fjerne staten styret. 617 00:32:59,000 --> 00:33:01,000 Dette er en fin metode på foranderlig arrays. 618 00:33:01,000 --> 00:33:03,000 Dette kommer til å si at det er nå X tur, 619 00:33:03,000 --> 00:33:07,000 og nå skal jeg dra nytte av denne viewWithTag ting. 620 00:33:07,000 --> 00:33:11,000 >> Jeg vet at mine knappene har kodene 1-9, 621 00:33:11,000 --> 00:33:13,000 og det er noe jeg vilkårlig plukket. 622 00:33:13,000 --> 00:33:15,000 Hvis jeg ønsker å sette teksten i hver knapp for å være tom 623 00:33:15,000 --> 00:33:17,000 fordi jeg nettopp startet et nytt spill, og jeg vil ikke ha noe 624 00:33:17,000 --> 00:33:20,000 Xs eller Os å være igjen jeg kan gjøre dette. 625 00:33:20,000 --> 00:33:24,000 Jeg kan si jeg vil at visningen med tag, 1, 2, 3, 4 et cetera. 626 00:33:24,000 --> 00:33:27,000 Dette vil trekke en annen knapp hver gang. 627 00:33:27,000 --> 00:33:30,000 Her skal jeg kaste det for UIButton. 628 00:33:30,000 --> 00:33:33,000 Akkurat som vi kunne kaste ints til flyter og vice versa 629 00:33:33,000 --> 00:33:37,000 dette sier at jeg ønsker å kaste dette til en UIButton. 630 00:33:37,000 --> 00:33:40,000 Det betyr den type av dette vil være en UIButton * 631 00:33:40,000 --> 00:33:43,000 på grunn av pekere, men ikke bekymre deg, de er ikke skremmende lenger. 632 00:33:43,000 --> 00:33:47,000 >> Når jeg har på denne knappen jeg skal kalle en metode på den. 633 00:33:47,000 --> 00:33:50,000 Denne metoden kalles setTitle forState, og så dette sier 634 00:33:50,000 --> 00:33:53,000 Jeg ønsker å sette teksten i knappen for å være en tom streng, 635 00:33:53,000 --> 00:33:57,000 og jeg vil at det skal være en tom streng når det ikke er trykket på. 636 00:33:57,000 --> 00:34:01,000 Hvis jeg bruker denne metoden, kan jeg endre teksten på knappen 637 00:34:01,000 --> 00:34:04,000 så snart noen treffer det, men vi ønsker å si når knappen bare sitte der 638 00:34:04,000 --> 00:34:07,000 Jeg vil at teksten skal være tom. 639 00:34:07,000 --> 00:34:10,000 Til slutt, vi kommer til å starte mitt bord, 640 00:34:10,000 --> 00:34:12,000 og jeg kommer til å si at alt er for tiden på 0, 641 00:34:12,000 --> 00:34:15,000 så dette styremedlemmene uforanderlige er en foranderlig array, 642 00:34:15,000 --> 00:34:21,000 som betyr at jeg kan ringe addObject metoden og bare en 0 innsiden av den. 643 00:34:21,000 --> 00:34:23,000 Det er hva som skjer når jeg oppretter et nytt spill. 644 00:34:23,000 --> 00:34:25,000 >> La oss ta en titt på en annen. 645 00:34:25,000 --> 00:34:28,000 Denne metoden her er IBAction som kommer til å bli presset 646 00:34:28,000 --> 00:34:31,000 hver gang en av disse rutene er trykket. 647 00:34:31,000 --> 00:34:33,000 Nå har vi noen Tic Tac Toe logikk her. 648 00:34:33,000 --> 00:34:36,000 Vi finne ut hvem sin tur det er, 649 00:34:36,000 --> 00:34:39,000 og basert på at vi enten sette en X eller en O, 650 00:34:39,000 --> 00:34:43,000 men vi merker at vi er gjenbruk den samme hendelseshåndterer 651 00:34:43,000 --> 00:34:45,000 for hver eneste en av disse knappene. 652 00:34:45,000 --> 00:34:49,000 Det betyr at jeg ikke har en fremgangsmåte for den øverste venstre knapp, 653 00:34:49,000 --> 00:34:52,000 en annen metode for nederste høyre knapp, selv om jeg kunne ha gjort det. 654 00:34:52,000 --> 00:34:54,000 Det ville egentlig ikke være god design. 655 00:34:54,000 --> 00:34:57,000 Hva jeg gjør her er jeg faktisk kommer til å avgjøre 656 00:34:57,000 --> 00:35:00,000 hva koden for knappen som ble trykket er. 657 00:35:00,000 --> 00:35:04,000 Du legger merke til at dette stykket metoden tar ett argument. 658 00:35:04,000 --> 00:35:07,000 Det kalles avsender, og hva avsenderen er er avsender skal 659 00:35:07,000 --> 00:35:10,000 representerer nøyaktig hva som ble tatt handling på. 660 00:35:10,000 --> 00:35:15,000 Hvis jeg trykker på en knapp, dette avsender skal være at UIButton 661 00:35:15,000 --> 00:35:18,000 at jeg faktisk trykket, betyr at det at UIButton 662 00:35:18,000 --> 00:35:20,000 har en tag fordi jeg laget en tag. 663 00:35:20,000 --> 00:35:23,000 >> Hvis jeg ønsker å få på koden jeg kan bare si 664 00:35:23,000 --> 00:35:26,000 Jeg vil koden av avsenderen, 665 00:35:26,000 --> 00:35:28,000 og igjen, jeg har nettopp begynt den til en UIButton. 666 00:35:28,000 --> 00:35:32,000 Jeg tilfeldigvis vite at avsenderen vil være en UIButton. 667 00:35:32,000 --> 00:35:34,000 Det trenger ikke alltid å være en UIButton. 668 00:35:34,000 --> 00:35:36,000 Jeg kunne for eksempel registrerer det samme hendelseshåndterer 669 00:35:36,000 --> 00:35:38,000  for en for en knapp, en for en glidebryter. 670 00:35:38,000 --> 00:35:40,000 I dette tilfellet vet jeg de er alle knapper, så jeg kommer til å si 671 00:35:40,000 --> 00:35:43,000 Jeg vil at dette skal være en knapp, og så kan jeg få koden, 672 00:35:43,000 --> 00:35:48,000 og fra tag nå vet jeg hvor jeg er inne i styret. 673 00:35:48,000 --> 00:35:51,000 Da kan jeg bare sette enten X eller O, kan vende turn, 674 00:35:51,000 --> 00:35:54,000 sjekke hvem som har vunnet, et cetera. 675 00:35:54,000 --> 00:35:59,000 >> Eventuelle spørsmål om dette så langt? 676 00:35:59,000 --> 00:36:02,000 Ok, all koden vi lagt ut på nettet, vi ønsker ikke å komme inn i for mye 677 00:36:02,000 --> 00:36:06,000 av Tic Tac Toe logikk, men nå kan du se at virkelig 678 00:36:06,000 --> 00:36:09,000 alt vi gjør er at vi looping over denne matrisen, 679 00:36:09,000 --> 00:36:13,000 så vi har et par for looper her, og vi bare sammenligne å se 680 00:36:13,000 --> 00:36:18,000 har vi en kamp i alle radene, en kamp i en kolonne eller noe sånt. 681 00:36:18,000 --> 00:36:21,000 Å faktisk kjøre dette programmet, hvis jeg trykker på en av disse knappene 682 00:36:21,000 --> 00:36:24,000 som spiller metoden ble avfyrt, så det betyr at jeg bare satt 683 00:36:24,000 --> 00:36:31,000 på knappen for å være en X, så nå denne knappen vil være en O, og så videre, 684 00:36:31,000 --> 00:36:35,000 og så det er hvordan vi begynner å samhandle med denne enkelt side app. 685 00:36:35,000 --> 00:36:38,000 >> Vi vil legge ut koden, så gjerne lese det, 686 00:36:38,000 --> 00:36:43,000 men la oss nå snakke om noen apps som er mer enn bare én side. 687 00:36:43,000 --> 00:36:47,000 Like spennende som Tic Tac Toe var, mye av apps innsiden av iOS 688 00:36:47,000 --> 00:36:50,000 er slag av disse drill ned ting med flere skjermer. 689 00:36:50,000 --> 00:36:54,000 Det første konseptet som vi må snakke om er protokoller, 690 00:36:54,000 --> 00:36:57,000 og en protokoll er bare et sett av metoder 691 00:36:57,000 --> 00:36:59,000 at du kan love å definere. 692 00:36:59,000 --> 00:37:02,000 Om jeg lager denne nye protokollen med to metoder, denne første, 693 00:37:02,000 --> 00:37:05,000 dersom avkastningen typen er ugyldig, jeg kalte det foo. 694 00:37:05,000 --> 00:37:07,000 Det tar ingen argumenter. Jeg har en annen metode. 695 00:37:07,000 --> 00:37:11,000 Den returnerer en int. Jeg kalte det bar, og det tar ett argument. 696 00:37:11,000 --> 00:37:14,000 Alt dette protokollen er at kalles SomeProtocol opp her, 697 00:37:14,000 --> 00:37:19,000 Dette er et sett av ting som noen kan implementere. 698 00:37:19,000 --> 00:37:22,000 Jeg har ikke på innsiden av denne protokollen sa hva Foo gjør. 699 00:37:22,000 --> 00:37:26,000 I stedet, jeg bare sier at du kan definere foo hvis du vil. 700 00:37:26,000 --> 00:37:30,000 Hvis jeg oppretter en visning kontroller eller opprette en klasse 701 00:37:30,000 --> 00:37:33,000 Jeg kan innsiden av den klassen lover å implementere 702 00:37:33,000 --> 00:37:40,000 noen av disse metodene, slik at for eksempel hvis si 703 00:37:40,000 --> 00:37:43,000 Dette sier nå jeg gjør et løfte til deg som inne 704 00:37:43,000 --> 00:37:50,000 for dette synet kontrolleren klassen vil jeg ha definisjoner for både foo og bar. 705 00:37:50,000 --> 00:37:52,000 >> Hvorfor er det nyttig? 706 00:37:52,000 --> 00:37:55,000 Mange komponenter inne i iOS dra nytte av dette 707 00:37:55,000 --> 00:37:58,000 design mønster kalt delegasjon, og hva delegasjon sier 708 00:37:58,000 --> 00:38:01,000 er at, for eksempel, hvis jeg har en tekstboks 709 00:38:01,000 --> 00:38:04,000 og det er noen hendelser som kan være registrert på innsiden av min tekstboksen, 710 00:38:04,000 --> 00:38:07,000 snarere enn å skape separate hendelser hva jeg kan gjøre er at jeg kan si 711 00:38:07,000 --> 00:38:10,000 representanten for denne tekstboksen vil være noen gjenstand. 712 00:38:10,000 --> 00:38:13,000 Når jeg sier at dette er en representant nå det betyr at 713 00:38:13,000 --> 00:38:16,000 når noen hendelse ville ha blitt sparket i tekstboksen 714 00:38:16,000 --> 00:38:18,000 heller enn å måtte registrere det eller noe sånt 715 00:38:18,000 --> 00:38:21,000 det er bare kommer til å kalle en metode på representanten. 716 00:38:21,000 --> 00:38:24,000 For eksempel, på innsiden av min tekst boksen har jeg en metode for når jeg trykker 717 00:38:24,000 --> 00:38:27,000 det gjort knappen nederst til høyre, 718 00:38:27,000 --> 00:38:30,000 og så heller enn å registrere hendelseshåndterer hva jeg kan si er 719 00:38:30,000 --> 00:38:34,000 tekstboksen, her et objekt som jeg vil at du skal kalle en metode på 720 00:38:34,000 --> 00:38:37,000 Hver gang noen trykker på knappen Ferdig, 721 00:38:37,000 --> 00:38:40,000 og det betyr at det objektet må gjennomføre noen protokoll 722 00:38:40,000 --> 00:38:45,000 som sier at jeg lover å definere det gjort knapp handling, 723 00:38:45,000 --> 00:38:47,000 fordi hvis det ikke definerer som metode, og du trykker på Utført, 724 00:38:47,000 --> 00:38:49,000 så det kommer til å være forvirrende. 725 00:38:49,000 --> 00:38:55,000 >> La oss ta en titt på et eksempel. 726 00:38:55,000 --> 00:38:58,000 Her har jeg rett og slett har en tekstboks, 727 00:38:58,000 --> 00:39:04,000 og en av egenskapene til denne tekstboksen over her på denne høyre side er representanten. 728 00:39:04,000 --> 00:39:06,000 Dette er en egenskap av klassen. 729 00:39:06,000 --> 00:39:09,000 Det jeg gjorde her er jeg kontrollere klikket, og jeg dro fra dette stedet over her 730 00:39:09,000 --> 00:39:13,000 til visningen kontrolleren, og som sier nå representanten for denne tekstboksen 731 00:39:13,000 --> 00:39:18,000 kommer til å være visningen kontrolleren. 732 00:39:18,000 --> 00:39:20,000 Det betyr at når noen handlinger skje, stedet for å registrere 733 00:39:20,000 --> 00:39:25,000 separate hendingsaktivatorar jeg vil at du skal sende dem til representanten. 734 00:39:25,000 --> 00:39:28,000 La oss nå ta en titt på mitt syn kontrolleren. 735 00:39:28,000 --> 00:39:32,000 Innsiden av. H-filen har jeg laget et løfte. 736 00:39:32,000 --> 00:39:36,000 Jeg har lovet å iverksette noen metoder innsiden av denne protokollen 737 00:39:36,000 --> 00:39:38,000 kalt UITextFieldDelegate, og igjen, 738 00:39:38,000 --> 00:39:42,000 Dette er bare noen liste over noen ting som jeg kan velge å implementere. 739 00:39:42,000 --> 00:39:46,000 >> Hvis jeg kommer her i min. M-fil, har jeg gjennomført en slik metode. 740 00:39:46,000 --> 00:39:49,000 Jeg har kalt det textFieldShouldReturn 741 00:39:49,000 --> 00:39:52,000 fordi det er hva det ble kalt inn i protokollen. 742 00:39:52,000 --> 00:39:57,000 Og nå når jeg trykker på knappen ferdig innsiden av dette tekstfeltet 743 00:39:57,000 --> 00:40:00,000 Dette er hva som kommer til å bli kalt, så jeg ikke registrere en hendelseshåndterer. 744 00:40:00,000 --> 00:40:03,000 Jeg koblet representanten, og når denne hendelsen er sparket 745 00:40:03,000 --> 00:40:08,000 Dette er den metoden som vil bli kalt, så hvis jeg kommer over her til dreieboken min og kjøre it- 746 00:40:08,000 --> 00:40:11,000 Mens det er lasting vi kan se hva dette betyr. 747 00:40:11,000 --> 00:40:13,000 På skjermen min har jeg to ting. 748 00:40:13,000 --> 00:40:16,000 Jeg har dette tekstfeltet, og jeg har denne etiketten. 749 00:40:16,000 --> 00:40:19,000 Jeg sier bare jeg vil at teksten på denne etiketten 750 00:40:19,000 --> 00:40:23,000 å være lik hva brukeren skrev i innsiden av tekstfeltet. 751 00:40:23,000 --> 00:40:26,000 Denne neste linje her er rett og slett en metode som jeg ringer 752 00:40:26,000 --> 00:40:29,000 i tekstfeltet som sier jeg vil at du skal skjule tastaturet. 753 00:40:29,000 --> 00:40:33,000 Dette er bare vilkårlig metode som Apple valgte. 754 00:40:33,000 --> 00:40:38,000 >> Igjen, før jeg gjorde noe jeg måtte koble alt opp, så jeg først kom hit. 755 00:40:38,000 --> 00:40:42,000 Fra visningen kontrolleren drar jeg over til tekstboksen. 756 00:40:42,000 --> 00:40:46,000 Jeg la gå, og jeg kan se her at jeg kan gjøre dette tekstfeltet eiendom 757 00:40:46,000 --> 00:40:49,000 siden over her i visningen kontrolleren har jeg definert en eiendom 758 00:40:49,000 --> 00:40:52,000 som er en IBOutlet av et tekstfelt. 759 00:40:52,000 --> 00:40:55,000 Dette sier at jeg kan koble denne egenskapen opp 760 00:40:55,000 --> 00:40:59,000 til et tekstfelt i UI min. 761 00:40:59,000 --> 00:41:03,000 Nå når jeg klikker på denne jeg kan begynne å skrive. 762 00:41:03,000 --> 00:41:06,000 Nå hvis jeg trykker på knappen ferdig dette kommer til å skyte 763 00:41:06,000 --> 00:41:08,000 en hendelse som jeg kan nå svare på. 764 00:41:08,000 --> 00:41:10,000 Ingen hendelsesbehandlinger. 765 00:41:10,000 --> 00:41:13,000 Det er slik jeg nettopp svart på det gjort knapp. 766 00:41:13,000 --> 00:41:15,000 Fornuftig? 767 00:41:15,000 --> 00:41:20,000 >> Dette er ikke et design mønster som-du kanskje ikke skulle finne deg selv 768 00:41:20,000 --> 00:41:23,000 lage din egen protokoll, men bare vet at noen 769 00:41:23,000 --> 00:41:27,000 forskjellige iOS komponenter registrere hendelser på ulike måter. 770 00:41:27,000 --> 00:41:29,000 Knapper, for eksempel, bruker du dem IBActions. 771 00:41:29,000 --> 00:41:32,000 Tekstfelt, på den annen side, kommer til å bruke delegater. 772 00:41:32,000 --> 00:41:36,000 Vi kan se og du kan se alt dette opp innsiden av dokumentasjon. 773 00:41:36,000 --> 00:41:41,000 Forresten, det er faktisk massevis av UI ting innebygd i iOS for deg, 774 00:41:41,000 --> 00:41:46,000 så for eksempel, slik jeg har gjort som sier gjøres nederst til høyre 775 00:41:46,000 --> 00:41:48,000 er jeg valgte dette tekstfeltet. 776 00:41:48,000 --> 00:41:50,000 Jeg kom hit. 777 00:41:50,000 --> 00:41:53,000 Jeg rullet ned litt for å gå tilbake-tasten, 778 00:41:53,000 --> 00:41:56,000 og jeg kan faktisk gjøre dette til en hel haug med ting, som om jeg ønsker at dette skal si 779 00:41:56,000 --> 00:42:00,000 nødanrop stedet jeg kan gjøre det, noe som er helt tilfeldig, 780 00:42:00,000 --> 00:42:02,000 og jeg vet ikke hvorfor det er en innebygd nødnummer knappen, 781 00:42:02,000 --> 00:42:06,000 men det står det nødnummer i veldig små bokstaver. 782 00:42:06,000 --> 00:42:08,000 Der du går. 783 00:42:08,000 --> 00:42:12,000 >> Definitivt utforske alle disse ulike alternativene i iOS. 784 00:42:12,000 --> 00:42:14,000 Eventuelle spørsmål om delegater? 785 00:42:14,000 --> 00:42:18,000 Igjen, bare en interessant design mønster som du bør være klar over. 786 00:42:18,000 --> 00:42:22,000 Ok, la oss neste ta en titt på tabellen visninger. 787 00:42:22,000 --> 00:42:26,000 En tabell visning er utgangspunktet at listen over elementer som er over alt i iOS. 788 00:42:26,000 --> 00:42:29,000 Når du blar gjennom alle kontaktene dine, du ser på 789 00:42:29,000 --> 00:42:34,000 innstillingen siden, og den slags liste over ting kalles en tabellvisning. 790 00:42:34,000 --> 00:42:37,000 Implementere en tabell visning i iOS er ganske enkel. 791 00:42:37,000 --> 00:42:41,000 Stedet for å lage en klasse som stammer fra det UIViewController 792 00:42:41,000 --> 00:42:44,000 som vi har gjort før vi bare trenger å si heller enn 793 00:42:44,000 --> 00:42:46,000 alt en UIViewController gjør jeg ønsker å gjøre, 794 00:42:46,000 --> 00:42:50,000 Jeg sier alt en UITableViewController gjør jeg ønsker å gjøre, 795 00:42:50,000 --> 00:42:54,000 slik at bare legger noen ekstra ting som er helt gjort for oss. 796 00:42:54,000 --> 00:42:58,000 Vi må gjøre svært lite i utgangspunktet fylle ut feltene inne i tabellen. 797 00:42:58,000 --> 00:43:02,000 >> For å vise en tabell jeg trenger å svare på noen spørsmål. 798 00:43:02,000 --> 00:43:06,000 Det første spørsmålet jeg må svare på er hvor mange deler er i tabellen? 799 00:43:06,000 --> 00:43:08,000 Når du blar gjennom kontaktlisten app du vil merke at det er slags 800 00:43:08,000 --> 00:43:12,000 organisert av As, så har du Bs, og du har det lille sub header. 801 00:43:12,000 --> 00:43:14,000 Hver av dem kalles en inndeling. 802 00:43:14,000 --> 00:43:16,000 Du kanskje eller kanskje ikke trenger disse. 803 00:43:16,000 --> 00:43:19,000 Det første du trenger å gjøre er å implementere en metode 804 00:43:19,000 --> 00:43:22,000 heter Tableview: numberOfSectionsInTableView. 805 00:43:22,000 --> 00:43:25,000 Som returnerer bare hvor mange deler du har, 806 00:43:25,000 --> 00:43:29,000 så dette kunne si returnere en hvis du har en stor tabell visning. 807 00:43:29,000 --> 00:43:33,000 Det neste spørsmålet som iOS trenger å vite er hvor mange rader har du? 808 00:43:33,000 --> 00:43:36,000 For eksempel, du blar gjennom en tabellvisning. 809 00:43:36,000 --> 00:43:39,000 Du har et fast antall sanger du ser på eller et fast antall kontakter. 810 00:43:39,000 --> 00:43:41,000 Hvis du er meg, selvfølgelig, ikke så mange, 811 00:43:41,000 --> 00:43:44,000 og så det er hvordan iOS vet hvor mange celler som skal vises. 812 00:43:44,000 --> 00:43:46,000 >> Igjen, dette kan si noe sånt retur 3. 813 00:43:46,000 --> 00:43:49,000 Min tabellvisning har 3 rader. 814 00:43:49,000 --> 00:43:52,000 Til slutt må iOS å vite hva hver celle ser ut, 815 00:43:52,000 --> 00:43:54,000 så hva det faktisk kommer til å gjøre er å ringe denne metoden her nede, 816 00:43:54,000 --> 00:43:57,000 dette Tableview: cellForRowAtIndexPath. 817 00:43:57,000 --> 00:44:01,000 Det kommer til å kalle denne metoden på hver enkelt celle inne i tabellen. 818 00:44:01,000 --> 00:44:03,000 Hvordan vet det hvor mange ganger å kalle det? 819 00:44:03,000 --> 00:44:06,000 Vel, du fortalte det inne i antall rader i seksjonen. 820 00:44:06,000 --> 00:44:08,000 Vi kommer til å kalle dette på hver av våre celler, 821 00:44:08,000 --> 00:44:11,000 og innsiden av dette er der du faktisk kan gjøre ting som 822 00:44:11,000 --> 00:44:16,000 angi tekst eller fortelle deg hva den lille blå knappen på høyre side gjør. 823 00:44:16,000 --> 00:44:19,000 Mønsteret for å få disse cellene, vi kommer til å bruke denne metoden 824 00:44:19,000 --> 00:44:22,000 kalt dequeueReusableCellWithIdentifier. 825 00:44:22,000 --> 00:44:29,000 >> Objective-C er faktisk veldig godt kjent for latterlig lengden på sine metodenavn, 826 00:44:29,000 --> 00:44:32,000 og dette er virkelig en fin sak eksempel. 827 00:44:32,000 --> 00:44:37,000 Hva denne metoden gjør er dette sier jeg bare vil at du skal gi meg en celle. 828 00:44:37,000 --> 00:44:39,000 Bare en iOS ting. 829 00:44:39,000 --> 00:44:41,000 Hvis du har noe som 100.000 sanger på iPod 830 00:44:41,000 --> 00:44:45,000 hva iOS ønsker ikke å gjøre er bevilge 100.000 celler, 831 00:44:45,000 --> 00:44:48,000 fordi hvis du er på toppen av listen, trenger du virkelig trenger å allokere minne 832 00:44:48,000 --> 00:44:51,000 for cellen som er 99 000 rader nedover? 833 00:44:51,000 --> 00:44:55,000 Nei, fordi som du ruller du kan slags tildele etterhvert. 834 00:44:55,000 --> 00:44:57,000 Dette er gjort for deg. 835 00:44:57,000 --> 00:44:59,000 Du trenger ikke å bekymre deg for alt som dumme ytelse ting. 836 00:44:59,000 --> 00:45:02,000 Alt du sier er at du kaller denne metoden dequeueReusableCellWithIdentifier, 837 00:45:02,000 --> 00:45:06,000 og dette sier, ok, hvis du trenger å jeg kommer til å lage en ny celle for deg. 838 00:45:06,000 --> 00:45:09,000 >> Men hvis du er på bunnen av tabellen, og du allerede har tildelt noen celler 839 00:45:09,000 --> 00:45:12,000 på toppen av tabellen som du virkelig ikke kommer til å trenge når som helst snart 840 00:45:12,000 --> 00:45:15,000 Jeg kommer til å gi deg en av de som er igjen i stedet for å fordele en ny, 841 00:45:15,000 --> 00:45:17,000 og så dette er en fin ytelse bekymring. 842 00:45:17,000 --> 00:45:21,000 Du trenger ikke å tildele cellene selv. 843 00:45:21,000 --> 00:45:23,000 Det kommer til å gi deg tilbake en celle. 844 00:45:23,000 --> 00:45:25,000 Det kommer til å gå tilbake til deg en celle objekt. 845 00:45:25,000 --> 00:45:28,000 Når du har cellen objektet du kan gjøre ting til det. 846 00:45:28,000 --> 00:45:32,000 Du kan stille teksten i cellen med denne egenskapen kalles tekstetikett. 847 00:45:32,000 --> 00:45:36,000 Du kan legge til at pilen på høyre eller noen andre tilfeldige ting 848 00:45:36,000 --> 00:45:41,000 med denne andre egenskap kalt accessoryType, og så videre og så videre. 849 00:45:41,000 --> 00:45:46,000 >> La oss ta en titt på faktisk gjennomføre en tabellvisning nå. 850 00:45:46,000 --> 00:45:49,000 Da jeg opprettet dette prosjektet 851 00:45:49,000 --> 00:45:53,000 stedet for å si én visning program jeg faktisk kom over her 852 00:45:53,000 --> 00:45:57,000 til master-detail program, og så i utgangspunktet dette tilsvarer mail app 853 00:45:57,000 --> 00:46:01,000 på iPad med bordet syn på venstre og deretter innholdet på høyre. 854 00:46:01,000 --> 00:46:07,000 På iPod eller iPhone dette kommer til å tilsvare en enkelt tabell visning. 855 00:46:07,000 --> 00:46:10,000 Det er der jeg fikk min starter koden. 856 00:46:10,000 --> 00:46:13,000 >> La oss først ta en titt på storyboard. 857 00:46:13,000 --> 00:46:15,000 Alt dette ble gjort for meg, i utgangspunktet opprettet. 858 00:46:15,000 --> 00:46:18,000 Navigasjonsfeltet viste meg hva et eksempel celle kunne se ut, 859 00:46:18,000 --> 00:46:22,000 og jeg kan dobbeltklikke dette ved å endre tittelen. 860 00:46:22,000 --> 00:46:25,000 Eventuelle andre UI bekymringer jeg kan håndtere det. 861 00:46:25,000 --> 00:46:27,000 Topptekstfilen ser veldig enkel. 862 00:46:27,000 --> 00:46:30,000 Snarere enn å si dette er UIViewController vi nå si dette er en 863 00:46:30,000 --> 00:46:35,000 TableViewController, så vi vet at vi ønsker å kalle alle disse tabellen metoder. 864 00:46:35,000 --> 00:46:38,000 Neste jeg ønsker å lage en eiendom som kommer til å representere 865 00:46:38,000 --> 00:46:40,000 de tingene innsiden av mitt bord. 866 00:46:40,000 --> 00:46:43,000 Denne tabellen skal vilkårlig vise 867 00:46:43,000 --> 00:46:46,000 en liste av frukt, og så må jeg lage noen matrise 868 00:46:46,000 --> 00:46:49,000 hvor kan jeg sette frukt. 869 00:46:49,000 --> 00:46:52,000 Innsiden av min gjennomføringen fil det første ønsker jeg å gjøre 870 00:46:52,000 --> 00:46:55,000 er at jeg ønsker å sørge for at jeg initialisere denne tabellen. 871 00:46:55,000 --> 00:46:58,000 >> Jeg sa Alloc init, skapte min frukt array, 872 00:46:58,000 --> 00:47:03,000 og jeg legger 4 ting til den, hvorav den ene er mye mer kontroversielle enn de andre 3. 873 00:47:03,000 --> 00:47:06,000 Og nå har jeg en rekke størrelse 4. 874 00:47:06,000 --> 00:47:08,000 Vi rister det opp i CS50. 875 00:47:08,000 --> 00:47:11,000 Jeg har nå en rekke størrelse 4. 876 00:47:11,000 --> 00:47:13,000 Nå skal jeg begynne å svare på disse spørsmålene, og faktisk, 877 00:47:13,000 --> 00:47:16,000 da jeg laget dette programmet alt dette var allerede gjort for meg. 878 00:47:16,000 --> 00:47:19,000 Jeg trengte ikke å skrive ut antall seksjoner i tabellvisning. 879 00:47:19,000 --> 00:47:22,000 Det var allerede der, og jeg fyller ut feltene. 880 00:47:22,000 --> 00:47:24,000 Hvor mange deler har jeg? 881 00:47:24,000 --> 00:47:26,000 One. Alle gjort. 882 00:47:26,000 --> 00:47:28,000 Hvor mange rader har jeg? 883 00:47:28,000 --> 00:47:31,000 Vel, jeg har en rad for hver frukt, så dette teller 884 00:47:31,000 --> 00:47:34,000 er en eiendom av noen utvalg som sier hvor stor er den? 885 00:47:34,000 --> 00:47:36,000 Det er hvor mange rader jeg har. 886 00:47:36,000 --> 00:47:42,000 Til slutt må jeg si hvordan ser hver celle ut? 887 00:47:42,000 --> 00:47:46,000 Jeg kommer til å si dequeueReusableCellWithIdentifier. 888 00:47:46,000 --> 00:47:48,000 >> Igjen, dette var allerede skrevet for meg. 889 00:47:48,000 --> 00:47:51,000 Jeg trengte ikke å gjøre dette selv, og jeg ønsker å komme tilbake 890 00:47:51,000 --> 00:47:54,000 denne cellen på dette stedet. 891 00:47:54,000 --> 00:47:57,000 Husk at vi kaller dette samme metode på hver enkelt celle, 892 00:47:57,000 --> 00:48:01,000 og dette argumentet her, denne indexPath argument, 893 00:48:01,000 --> 00:48:03,000 sier hva rad jeg er i. 894 00:48:03,000 --> 00:48:05,000 Hvis jeg sier indexPath.row ned her 895 00:48:05,000 --> 00:48:09,000 dette vil være 0, så vil det være 1, så vil det være to, og dette er så jeg vet 896 00:48:09,000 --> 00:48:11,000 hva cellen jeg i øyeblikket. 897 00:48:11,000 --> 00:48:15,000 Jeg ønsker å sette teksten i cellen ved hjelp av denne textLabel eiendom 898 00:48:15,000 --> 00:48:19,000 å gå inn min frukt array og få 899 00:48:19,000 --> 00:48:21,000 objektet tilsvarer hver rad. 900 00:48:21,000 --> 00:48:24,000 Hvis dette er en streng, er jeg nå setter 901 00:48:24,000 --> 00:48:28,000 teksten eiendom til en streng. 902 00:48:28,000 --> 00:48:30,000 Jeg kan gjøre en annen ting. 903 00:48:30,000 --> 00:48:32,000 Jeg kan også registrere en hendelseshåndterer på hver av cellene, 904 00:48:32,000 --> 00:48:35,000 så når jeg klikker på hver av disse cellene 905 00:48:35,000 --> 00:48:39,000 Dette didSelectRowAtIndexPath, dette kommer til å bli kalt for meg, 906 00:48:39,000 --> 00:48:42,000 så bare ved å definere dette kan jeg nå håndtere hva som skjer 907 00:48:42,000 --> 00:48:46,000 når du trykker på en celle, og igjen, vi passerer der cellen ble tappet 908 00:48:46,000 --> 00:48:50,000 slik at vi kan gjenbruke den samme hendelseshåndterer for alle våre celler. 909 00:48:50,000 --> 00:48:53,000 >> Igjen, dette er noe iOS gjør for meg. 910 00:48:53,000 --> 00:48:55,000 La oss vise en annen irriterende popup 911 00:48:55,000 --> 00:48:59,000 som sier ganske enkelt at du plukket noe der som noe 912 00:48:59,000 --> 00:49:04,000 kommer til å være raden objektet. 913 00:49:04,000 --> 00:49:10,000 Når jeg kjører denne, kommer jeg til å ha denne hyggelig bord visning 914 00:49:10,000 --> 00:49:14,000 med en rad for hver av disse frukter, og hvis trykk jeg en 915 00:49:14,000 --> 00:49:16,000 det forteller meg hva som skjedde. 916 00:49:16,000 --> 00:49:21,000 Fornuftig? 917 00:49:21,000 --> 00:49:24,000 La oss bygge en litt mer komplisert av en app, 918 00:49:24,000 --> 00:49:28,000 så mye som å klikke deg plukket tomat er. 919 00:49:28,000 --> 00:49:31,000 The nice del om storyboards 920 00:49:31,000 --> 00:49:35,000 er det ikke bare kommer til å hjelpe oss å utforme skjermer individuelt, 921 00:49:35,000 --> 00:49:38,000 det er også kommer til å hjelpe oss binde sammen hele app, 922 00:49:38,000 --> 00:49:42,000 så den endelige app vi vil være å bygge dette er hyggelig sports nyhetsleser, 923 00:49:42,000 --> 00:49:45,000 og så det kommer til å ha flere skjermer, og så jeg kan faktisk representere 924 00:49:45,000 --> 00:49:48,000 hver av disse flere skjermer på storyboard, 925 00:49:48,000 --> 00:49:52,000 og jeg kan zoome ut og se min app fra et høyt nivå. 926 00:49:52,000 --> 00:49:55,000 >> For å skape et nytt element innsiden av storyboard min 927 00:49:55,000 --> 00:49:59,000 det er veldig enkelt innsiden av Interface Builder. 928 00:49:59,000 --> 00:50:01,000 Hvis jeg ønsker å legge til et annet skjermbilde til dette, for eksempel, 929 00:50:01,000 --> 00:50:06,000 Jeg kan zoome ut med klype zoom som Apple elsker så mye, 930 00:50:06,000 --> 00:50:09,000 og ned her før jeg søker etter en knapp 931 00:50:09,000 --> 00:50:12,000 og jeg dra og slippe en knapp 932 00:50:12,000 --> 00:50:15,000 hvis jeg ønsker å lage en ny skjerm jeg kan faktisk bare dra og slippe 933 00:50:15,000 --> 00:50:19,000 en hel visning kontroller, så hvis jeg plukke dette, trekk den over her, 934 00:50:19,000 --> 00:50:23,000 hei, det er en annen skjerm, og så nå bruker den samme storyboard fil 935 00:50:23,000 --> 00:50:26,000 Jeg kan ha alle skjermene inne i app min, og jeg kan zoome ut 936 00:50:26,000 --> 00:50:28,000 og se hvordan de samhandler. 937 00:50:28,000 --> 00:50:32,000 Disse vil ikke samhandle ennå. 938 00:50:32,000 --> 00:50:36,000 Måten disse to skjermene samhandle er du definere relasjoner. 939 00:50:36,000 --> 00:50:39,000 Du kan i utgangspunktet si dette skjermbildet når du trykker på denne knappen, 940 00:50:39,000 --> 00:50:42,000 Jeg vil at du skal gli over til denne nye skjermen. 941 00:50:42,000 --> 00:50:44,000 Det betyr at det er denne type forhold mellom 942 00:50:44,000 --> 00:50:46,000  den første skjermen og den andre skjermen. 943 00:50:46,000 --> 00:50:49,000 Du vil ha i utgangspunktet en pil fra den knappen til den andre skjermen 944 00:50:49,000 --> 00:50:53,000 sier at når du trykker på denne knappen som er der jeg ønsker å gå. 945 00:50:53,000 --> 00:50:57,000 Akkurat som vi styrer klikket og dro for å definere disse utsalgssteder 946 00:50:57,000 --> 00:51:01,000 vi kommer til å gjøre det samme for å definere disse segues. 947 00:51:01,000 --> 00:51:05,000 >> Vi får se et eksempel på det, og før vi faktisk overgangen 948 00:51:05,000 --> 00:51:08,000 fra en skjerm til en annen iOS er hyggelig nok til å kalle denne metoden 949 00:51:08,000 --> 00:51:11,000 kalt prepareForSegue, og det er her vi kan starte 950 00:51:11,000 --> 00:51:14,000 sende data fra en applikasjon til en annen. 951 00:51:14,000 --> 00:51:17,000 I eksempelet er vi i ferd med å se på det vil i utgangspunktet tillate oss 952 00:51:17,000 --> 00:51:20,000 å filtrere baseball team av ligaer og divisjoner. 953 00:51:20,000 --> 00:51:23,000 Når jeg velger en liga, for eksempel, jeg ønsker å overgang 954 00:51:23,000 --> 00:51:25,000 til min neste skjermbilde hvor jeg kan vise alle divisjoner 955 00:51:25,000 --> 00:51:27,000 i at league eller alle de forskjellige lagene. 956 00:51:27,000 --> 00:51:31,000 Jeg trenger å sende til at skjermen hva lagene du skal vise. 957 00:51:31,000 --> 00:51:35,000 Å gjøre at jeg kommer til å dra nytte av denne metoden her. 958 00:51:35,000 --> 00:51:39,000 >> Til slutt, bare en tilfeldig punkt på iOS. 959 00:51:39,000 --> 00:51:41,000 Hvis du ønsker å lagre data er det dette som kalles grunndata, 960 00:51:41,000 --> 00:51:44,000 som er faktisk slags komplisert å jobbe med. 961 00:51:44,000 --> 00:51:47,000 Du kan også bruke SQL til å lagre data, 962 00:51:47,000 --> 00:51:51,000 som igjen er fin, men slags på mer komplisert side å jobbe med, 963 00:51:51,000 --> 00:51:55,000 men iOS støtter også disse virkelig kule ting som kalles eiendom lister, 964 00:51:55,000 --> 00:52:00,000 og en eiendom listen er bare en fil som representerer viktige verdi-par. 965 00:52:00,000 --> 00:52:03,000 Du definerer en liste over nøkler, og du sier denne tasten kommer til å være en matrise. 966 00:52:03,000 --> 00:52:06,000 Denne tasten er tenkt å være en streng, og i utgangspunktet alt du kan gjøre 967 00:52:06,000 --> 00:52:10,000 i JSON kan du gjøre inne på en eiendom liste, 968 00:52:10,000 --> 00:52:14,000 og så dette virkelig pent tillater oss å jobbe med noen data. 969 00:52:14,000 --> 00:52:18,000 For eksempel har jeg denne Teams.plist som jeg har laget. 970 00:52:18,000 --> 00:52:22,000 Jeg har opprettet en ny plist fil, og jeg kan bore ned. 971 00:52:22,000 --> 00:52:26,000 Dette er en ordliste, er dette en ordbok, disse er strenger, 972 00:52:26,000 --> 00:52:30,000 og så dette er en fin grafisk fremstilling av et JSON-dokument 973 00:52:30,000 --> 00:52:33,000 eller bare et sett med viktige verdipar, 974 00:52:33,000 --> 00:52:37,000 og så dette er data som jeg skal jobbe med innsiden av app min. 975 00:52:37,000 --> 00:52:40,000 >> La oss først kom hit. Vi har mange flere filer nå. 976 00:52:40,000 --> 00:52:44,000 Men la oss først kom hit til dreieboken. 977 00:52:44,000 --> 00:52:48,000 Dreieboken her-hvis jeg kan zoome ut- 978 00:52:48,000 --> 00:52:51,000 Vi kan nå se at dette er flyten av programmet mitt. 979 00:52:51,000 --> 00:52:53,000 Jeg første kommer til å starte på denne skjermen. 980 00:52:53,000 --> 00:52:55,000 Jeg kommer til å bore ned til denne skjermen, 981 00:52:55,000 --> 00:52:58,000 og jeg kommer til å bore ned til denne skjermen, og vi ser her at hvis jeg slags 982 00:52:58,000 --> 00:53:04,000 flytte en av disse rundt vi har disse pilene går herfra til her, 983 00:53:04,000 --> 00:53:08,000 og måten jeg definerer som pilen var hvis jeg zoome inn litt, 984 00:53:08,000 --> 00:53:12,000 og hvis jeg kommer over til denne visningen kontrolleren, 985 00:53:12,000 --> 00:53:16,000 og her er en celle, og jeg vil si at når du trykker på en celle 986 00:53:16,000 --> 00:53:18,000 Jeg vil at du skal gli over til en annen skjerm. 987 00:53:18,000 --> 00:53:21,000 Jeg kan bare holde nede kontroll, 988 00:53:21,000 --> 00:53:26,000 bla over en liten bit, hold nede kontroll, drar denne cellen over og la gå. 989 00:53:26,000 --> 00:53:30,000 >> Og over her sier vi hva som er overgangen du vil bruke? 990 00:53:30,000 --> 00:53:32,000 Vil du bruke dette lysbildet ting som heter push? 991 00:53:32,000 --> 00:53:34,000 Ønsker du å skyve opp fra bunnen? 992 00:53:34,000 --> 00:53:36,000 Det kalles modal. 993 00:53:36,000 --> 00:53:40,000 Og når jeg klikker på en av disse, kommer det til å trekke denne pilen for meg, 994 00:53:40,000 --> 00:53:44,000 og det betyr at jeg faktisk har håndtert hva som skjer når jeg trykker på denne knappen grafisk. 995 00:53:44,000 --> 00:53:48,000 Jeg skrev ikke noen kode å faktisk skyve fra en skjerm til den neste. 996 00:53:48,000 --> 00:53:51,000 Jeg definerte dette visuelt innsiden av Interface Builder. 997 00:53:51,000 --> 00:53:55,000 Hvis jeg klikker på denne pilen, kan vi se at jeg ga denne tingen et navn. 998 00:53:55,000 --> 00:53:59,000 Jeg kalte det showDivisions, og dette er slik at jeg kan vite 999 00:53:59,000 --> 00:54:03,000 hva overgangen er i ferd med å skje, og vi vil se hvorfor på bare et sekund. 1000 00:54:03,000 --> 00:54:06,000 Det er slik jeg har kablet opp de forskjellige skjermene i app min. 1001 00:54:06,000 --> 00:54:09,000 Hvis dette var en knapp, for eksempel, i stedet for en tabell visning, 1002 00:54:09,000 --> 00:54:11,000 Jeg kunne kontrollere klikk på knappen, dra over til neste skjermbilde, 1003 00:54:11,000 --> 00:54:16,000 og det er hvordan jeg kan gjøre navigasjon på den måten. 1004 00:54:16,000 --> 00:54:19,000 >> Veldig raskt, hvis vi kommer inn i MasterViewController, 1005 00:54:19,000 --> 00:54:22,000 igjen, vi bare kommer til å definere en liste over ting 1006 00:54:22,000 --> 00:54:26,000 som vises i tabellen visning. 1007 00:54:26,000 --> 00:54:29,000 Her jeg sier jeg vil at du skal ta det plist fil, 1008 00:54:29,000 --> 00:54:32,000 og jeg vil at du skal laste det opp i en ordbok, 1009 00:54:32,000 --> 00:54:35,000 og når du har den aktuelle ordlisten, jeg kommer til å svare de samme spørsmålene igjen. 1010 00:54:35,000 --> 00:54:37,000 Her er antall seksjoner. 1011 00:54:37,000 --> 00:54:41,000 En, er det en rad for hver liga, og teksten i hver celle 1012 00:54:41,000 --> 00:54:46,000 bør være enten den første, den første forening, den andre serien, og så videre. 1013 00:54:46,000 --> 00:54:51,000 Til slutt, jeg kommer til å bruke denne metoden som vi nettopp så kalt prepareForSegue, 1014 00:54:51,000 --> 00:54:54,000 og dette er den metoden som kommer til å bli sparket når jeg klikker 1015 00:54:54,000 --> 00:54:57,000 på en av disse rader og derfor aktivere at overgang 1016 00:54:57,000 --> 00:54:59,000 at jeg satt opp med pilene. 1017 00:54:59,000 --> 00:55:02,000 Dette sier at jeg kan ha flere 1018 00:55:02,000 --> 00:55:05,000 relasjoner fra en skjerm til en annen. 1019 00:55:05,000 --> 00:55:08,000 Hvis jeg har to knapper og hver knapp tar deg til en annen skjerm 1020 00:55:08,000 --> 00:55:10,000 Jeg kommer til å ha to segues, 1 for hver knapp. 1021 00:55:10,000 --> 00:55:14,000 Men denne prepareForSegue er, igjen, kommer til å bli gjenbrukt 1022 00:55:14,000 --> 00:55:17,000 for hver av de forskjellige forhold, betyr så at at jeg trenger en måte 1023 00:55:17,000 --> 00:55:21,000 å identifisere hvis du trykker på den første knappen eller du trykker på den andre knappen. 1024 00:55:21,000 --> 00:55:25,000 >> Husker da jeg ga den segue et navn, dette showDivisions, 1025 00:55:25,000 --> 00:55:29,000 det er hvordan jeg nå vet at dette er segue som ble aktivert. 1026 00:55:29,000 --> 00:55:32,000 Alt jeg ønsker å gjøre er at jeg ønsker å si 1027 00:55:32,000 --> 00:55:35,000 Jeg ønsker å finne ut hva jeg bare treffer, 1028 00:55:35,000 --> 00:55:38,000 og så å få det, kan jeg si at jeg vil at indexPath for den valgte raden, 1029 00:55:38,000 --> 00:55:42,000 husker indexPath sier bare hvor jeg bare klikket, 1030 00:55:42,000 --> 00:55:47,000 og da vil jeg si at jeg ønsker å finne ut hvor jeg skal. 1031 00:55:47,000 --> 00:55:50,000 Dette destinationViewController, det er en egenskap ved segue. 1032 00:55:50,000 --> 00:55:53,000 Det er skjermen jeg skal, 1033 00:55:53,000 --> 00:55:56,000 så jeg vet at skjermen jeg skal kalles DivisionsViewController 1034 00:55:56,000 --> 00:55:59,000 fordi jeg laget den klassen, 1035 00:55:59,000 --> 00:56:02,000 og så nå hvis jeg sier d.divisions 1036 00:56:02,000 --> 00:56:06,000 Jeg er nå å sette en eiendom av visningen kontrolleren jeg skal gå til. 1037 00:56:06,000 --> 00:56:10,000 Dette er hvordan jeg sender data fra en skjerm til en annen skjerm. 1038 00:56:10,000 --> 00:56:13,000 >> Bare se på denne DivisionsViewController 1039 00:56:13,000 --> 00:56:16,000 du kan se her at i. h fil 1040 00:56:16,000 --> 00:56:20,000 Det er at eiendommen divisjoner, og det er hva jeg i utgangspunktet fyller, 1041 00:56:20,000 --> 00:56:25,000 så det er hvordan jeg vet at jeg viser divisjonene tilsvarende 1042 00:56:25,000 --> 00:56:28,000 ligaen som jeg klikket, og igjen, 1043 00:56:28,000 --> 00:56:31,000 selve tabellen visningen ser ganske mye det samme, bare svare dem 1044 00:56:31,000 --> 00:56:34,000 3 enkle spørsmål, samt identifisere 1045 00:56:34,000 --> 00:56:37,000 hva som skjer når du flytter til neste skjermbilde. 1046 00:56:37,000 --> 00:56:40,000 Bare et par andre ting her. 1047 00:56:40,000 --> 00:56:43,000 Du legger merke til på toppen her at heller enn å si # include 1048 00:56:43,000 --> 00:56:45,000 Jeg er nå å si # importere. 1049 00:56:45,000 --> 00:56:47,000 Dette er bare en Objective-C tingen. 1050 00:56:47,000 --> 00:56:52,000 Importen er i utgangspunktet en bedre versjon av inkludere, 1051 00:56:52,000 --> 00:56:57,000 og for eksempel trenger vi å vite hva denne klassen er, 1052 00:56:57,000 --> 00:57:00,000 så jeg kan ikke bare si DivisionsViewController. 1053 00:57:00,000 --> 00:57:05,000 Hvis vi ikke hadde hashtag standardio.c innsiden av vår. C-fil 1054 00:57:05,000 --> 00:57:07,000 kompilatoren hadde ingen anelse om hva printf var. 1055 00:57:07,000 --> 00:57:12,000 Tilsvarende, hvis jeg ikke importere DivisionsViewController 1056 00:57:12,000 --> 00:57:16,000 kompilatoren har virkelig ingen anelse om hva en DivisionsViewController er. 1057 00:57:16,000 --> 00:57:19,000 Bare sørg for at innsiden av ulike. M filer du sørge for å importere 1058 00:57:19,000 --> 00:57:25,000 de tilsvarende. h-filer slik at kompilatoren vet hva som skjer. 1059 00:57:25,000 --> 00:57:31,000 >> Til slutt, hva Apple slutt ikke viser er noen data ved hjelp av en web visning, 1060 00:57:31,000 --> 00:57:35,000 og så en web visning er et objekt som du kan bygge inn 1061 00:57:35,000 --> 00:57:37,000 litt nettleser innsiden av programmet ditt. 1062 00:57:37,000 --> 00:57:40,000 Alt du trenger å gjøre er å levere en nettadresse i nettleseren, 1063 00:57:40,000 --> 00:57:43,000 så jeg ønsker å gå til mlb.mlb.com, 1064 00:57:43,000 --> 00:57:46,000 og dette er hvordan jeg kan få tilgang til hjemmesiden for hvert lag, 1065 00:57:46,000 --> 00:57:49,000 og så ved å sende inn denne nettadressen 1066 00:57:49,000 --> 00:57:52,000 web visningen kan vise dette for meg, og jeg kan bla rundt, 1067 00:57:52,000 --> 00:58:01,000 og simulator er i bruk av den. 1068 00:58:01,000 --> 00:58:03,000 Nå kom fra plist min. 1069 00:58:03,000 --> 00:58:07,000 Hvis jeg klikker på denne dette også kom fra plist min, og dette glidende ble håndtert 1070 00:58:07,000 --> 00:58:09,000 ved å definere disse segues. 1071 00:58:09,000 --> 00:58:12,000 Jeg klikker på denne og en til, 1072 00:58:12,000 --> 00:58:15,000 og nå her er min UIWebView, så bare sånn 1073 00:58:15,000 --> 00:58:19,000 her er nettstedet for URL som jeg nettopp innebygd, 1074 00:58:19,000 --> 00:58:21,000 og jeg måtte ikke håndtere noe crazy. 1075 00:58:21,000 --> 00:58:24,000 Dette er hvordan å vise en webside. 1076 00:58:24,000 --> 00:58:27,000 Ting som dette tilbake-knappen her er også gitt til meg 1077 00:58:27,000 --> 00:58:33,000 helt gratis fordi jeg har definert disse relasjonene med segues. 1078 00:58:33,000 --> 00:58:37,000 >> Eventuelle spørsmål? Ja. 1079 00:58:37,000 --> 00:58:40,000 [Student] Så når du bruker Alloc, du aldri trenger å fri noe? 1080 00:58:40,000 --> 00:58:43,000 Akkurat, når du kaller Alloc og init du ikke trenger å frigjøre den. 1081 00:58:43,000 --> 00:58:46,000 IOS kommer til å håndtere alt dette for deg. 1082 00:58:46,000 --> 00:58:51,000 Det er flott, og du ikke bryte noen regler. Ja. 1083 00:58:51,000 --> 00:58:54,000 [Student] Hvis du skulle inkludere flere lag som kunne passe på skjermen, 1084 00:58:54,000 --> 00:58:58,000 ville det automatisk en bla alternativet, eller er det noe du trenger å legge til? 1085 00:58:58,000 --> 00:59:01,000 Akkurat, hvis jeg hadde flere lag, for eksempel, ville det automatisk håndtere 1086 00:59:01,000 --> 00:59:04,000 rullingen for meg, og alle resultatene bekymringer 1087 00:59:04,000 --> 00:59:08,000 med stort bord håndteres også helt for meg. 1088 00:59:08,000 --> 00:59:11,000 >> Andre spørsmål? 1089 00:59:11,000 --> 00:59:13,000 Alt dette koden kommer til å bli lagt ut. 1090 00:59:13,000 --> 00:59:16,000 Vi slags glattet over en liten bit av de mer mindre detaljer, 1091 00:59:16,000 --> 00:59:19,000 men ting som å sette noen egenskaper til web visning 1092 00:59:19,000 --> 00:59:22,000 er bare ting som du kan få ved å bla Apples dokumentasjon, 1093 00:59:22,000 --> 00:59:24,000 som er virkelig, virkelig pent lagt ut. 1094 00:59:24,000 --> 00:59:27,000 De har mye av prøven apps og eksempel bruksområder 1095 00:59:27,000 --> 00:59:34,000 forskjellige APIer, så definitivt lese dem hvis du kan. 1096 00:59:34,000 --> 00:59:36,000 Bare noen nyttige linker du kanskje ønsker å ta en titt på. 1097 00:59:36,000 --> 00:59:38,000 Dette er noen nyttige dokumentasjon guider. 1098 00:59:38,000 --> 00:59:41,000 Nettadressene er massiv, så de er forkortet. 1099 00:59:41,000 --> 00:59:44,000 Dette første er hele biblioteket av dokumentasjon. 1100 00:59:44,000 --> 00:59:46,000 Det er lite søk barer, så hvis du begynner å skrive knapp 1101 00:59:46,000 --> 00:59:50,000 det vil begynne å gi deg all informasjon om alle de tingene du kan gjøre med en knapp. 1102 00:59:50,000 --> 00:59:53,000 Jeg har også tatt med Table View Programming Guide. 1103 00:59:53,000 --> 00:59:56,000 Det håndterer tabellen visninger i mye mer detalj, 1104 00:59:56,000 --> 01:00:00,000 hvordan å gjøre ting som dynamisk legger celler eller redigere celler eller fjerne dem. 1105 01:00:00,000 --> 01:00:02,000 >> Det er massevis av eksempler på apps fra Apple som vil vise deg hvordan du gjør det, 1106 01:00:02,000 --> 01:00:05,000 og til slutt, er dette siste Human Interface Guidelines, 1107 01:00:05,000 --> 01:00:09,000 og dette er i utgangspunktet en del diskusjon om UI komponenter, 1108 01:00:09,000 --> 01:00:12,000 ting som ikke gjør en knapp som er 4 piksler x 4 piksler. 1109 01:00:12,000 --> 01:00:15,000 Det er en dårlig idé, og andre ting som Apple ønsker at du skal gjøre 1110 01:00:15,000 --> 01:00:18,000 å oppmuntre til god design. 1111 01:00:18,000 --> 01:00:23,000 >> Noen siste spørsmål før vi ende opp? 1112 01:00:23,000 --> 01:00:27,000 Greit, definitivt gjerne-Vi kommer til å ha spesielle etiketter på Diskuter. 1113 01:00:27,000 --> 01:00:30,000 Vi vil ha en iOS en, så definitivt gjerne utnytte den. 1114 01:00:30,000 --> 01:00:34,000 Hvis du ønsker å jobbe med klassekameratene dine på prosjekter 1115 01:00:34,000 --> 01:00:37,000 eller hjelpe finne ut noen tilfeldige iOS ting 1116 01:00:37,000 --> 01:00:40,000 gjerne send meg, og definitivt lese all koden online fordi 1117 01:00:40,000 --> 01:00:43,000 bare i interesse av tid slags vi glattet over mer 1118 01:00:43,000 --> 01:00:45,000 finere kornet detaljene av ting. 1119 01:00:45,000 --> 01:00:47,000 Men hvis ikke, så lykke til på iOS-prosjekter, og jeg håper vi har 1120 01:00:47,000 --> 01:00:53,000 en stor tilstrømning av apps i App Store. 1121 01:00:53,000 --> 01:00:56,000 [CS50.TV]