1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminar] [iOS: Skrivning 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 >> Okay, alle sammen, velkommen til iOS: Skrivning Apps som en Boss. 5 00:00:12,000 --> 00:00:16,000 Dette seminar vil fokusere på at skrive apps til iPhone 6 00:00:16,000 --> 00:00:19,000 og til gengæld skriftligt apps til iPad, og så vi dybest set kommer til at gå igennem 7 00:00:19,000 --> 00:00:23,000 et par forskellige eksempler på, hvordan man laver en app, et simpelt spil som Tic Tac Toe, 8 00:00:23,000 --> 00:00:26,000 eller hvis du er mere interesseret i at gøre en app som en slags nyhedslæser 9 00:00:26,000 --> 00:00:30,000 eller noget, der interagerer med internettet vil jeg tale om, at så godt. 10 00:00:30,000 --> 00:00:32,000 Her er vores korte dagsorden. 11 00:00:32,000 --> 00:00:36,000 >> IOS apps er skrevet i et sprog kaldet Objective-C, 12 00:00:36,000 --> 00:00:39,000 og så dette er en lille smule svarende til C, men ikke virkelig overhovedet, 13 00:00:39,000 --> 00:00:41,000 så vi vil tale lidt om selve sproget 14 00:00:41,000 --> 00:00:45,000 og derefter hvordan man opbygger iPhone apps ved hjælp af denne app program kaldet XCode, 15 00:00:45,000 --> 00:00:48,000 som hvis du ikke har downloadet det endnu er du velkommen til at starte download nu. 16 00:00:48,000 --> 00:00:50,000 Det er flere gigabytes. 17 00:00:50,000 --> 00:00:54,000 Det bør være gratis i App Store, så du bliver nødt til at have en Mac 18 00:00:54,000 --> 00:00:57,000 ideelt kører den nyeste version af OS X. 19 00:00:57,000 --> 00:00:59,000 Hvis du ikke er, ikke noget problem. 20 00:00:59,000 --> 00:01:02,000 Vi har Mac'er i science center til din rådighed 21 00:01:02,000 --> 00:01:05,000 med XCode installeret, og så er du velkommen til at bruge dem til udvikling. 22 00:01:05,000 --> 00:01:07,000 Hvis du ønsker at lave en app, men ikke har en Mac, så fortvivl ikke. 23 00:01:07,000 --> 00:01:09,000 Der er masser af campus ressourcer til det. 24 00:01:09,000 --> 00:01:15,000 Og så så vi kommer til at dække 2 større eksempler på forskellige apps, du kan gøre. 25 00:01:15,000 --> 00:01:19,000 Objective-C er teknisk, hvad der kaldes en super sæt C. 26 00:01:19,000 --> 00:01:24,000 Det betyder, at enhver C-kode gælder også Objective-C kode. 27 00:01:24,000 --> 00:01:29,000 Det betyder, at vi slags rørledning tapede på nogle ekstra funktioner til C. 28 00:01:29,000 --> 00:01:33,000 Nogle af disse funktioner omfatter ikke skulle nogensinde skrive malloc igen, gudskelov, 29 00:01:33,000 --> 00:01:36,000 ingen behøver at bekymre sig om de dumme pointers og frigøre dem og alt det der 30 00:01:36,000 --> 00:01:40,000 du hadede om C, og det er lidt væk i Objective-C. 31 00:01:40,000 --> 00:01:43,000 >> Nu, Objective-C har også en meget større standard bibliotek, 32 00:01:43,000 --> 00:01:47,000 så der er en masse mere funktionalitet, du får gratis inde i Objective-C. 33 00:01:47,000 --> 00:01:50,000 Husk når vi skriver PHP bemærkede vi, at vi gik fra 34 00:01:50,000 --> 00:01:54,000 dette mindste sprog til den gigantiske bibliotek af alle disse skøre ting, du kan gøre. 35 00:01:54,000 --> 00:01:56,000 Det samme sker i iOS. 36 00:01:56,000 --> 00:01:59,000 Der er objekter for ting som den buddhistiske kalender, og virkelig noget 37 00:01:59,000 --> 00:02:05,000 du kan muligvis tænke på sandsynligvis allerede findes i Objective-C gennemførelse. 38 00:02:05,000 --> 00:02:08,000 Formålet del af Objective-C refererer noget 39 00:02:08,000 --> 00:02:11,000 kaldet objektorienteret programmering. 40 00:02:11,000 --> 00:02:14,000 Det er lidt af et nyt begreb, men vi har faktisk for det meste lært 41 00:02:14,000 --> 00:02:17,000 en masse af disse begreber allerede. 42 00:02:17,000 --> 00:02:19,000 Ideen bag objektorienteret programmering er, at du kommer til at strukturere 43 00:02:19,000 --> 00:02:23,000 en masse af din kode omkring disse ting kaldet klasser, 44 00:02:23,000 --> 00:02:26,000 og disse klasser er virkelig glorificeret struct. 45 00:02:26,000 --> 00:02:30,000 Inde i en struct vi dybest set sagt her er der en ting, 46 00:02:30,000 --> 00:02:32,000 og denne ting kan have medlemmer. 47 00:02:32,000 --> 00:02:35,000 For eksempel kan en knude i en forbundet liste har andre ting 48 00:02:35,000 --> 00:02:38,000 som en værdi, en markør til den næste node i listen 49 00:02:38,000 --> 00:02:44,000 og sammen at pointer, og at værdien komponeret denne ene forekomst af en struct. 50 00:02:44,000 --> 00:02:47,000 Klasserne er meget ens bortset 51 00:02:47,000 --> 00:02:50,000 klasser kan også have funktioner inde i dem. 52 00:02:50,000 --> 00:02:54,000 Når vi erklæret en struct, kunne vi kun sige int n eller node * næste. 53 00:02:54,000 --> 00:02:57,000 >> Nu med Objective-C kan vi faktisk lægge funktioner 54 00:02:57,000 --> 00:02:59,000 indersiden af ​​disse ting. 55 00:02:59,000 --> 00:03:03,000 En anden ting, at klasser kan gø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 flok indbygget i Objective-C-klasser. 57 00:03:07,000 --> 00:03:11,000 En af dem kan være den klasse, der repræsenterer visning for en skærm, 58 00:03:11,000 --> 00:03:14,000 og så ved at sige jeg ønsker at implementere min egen opfattelse 59 00:03:14,000 --> 00:03:18,000 vi dybest set sige nogen over på Apple, sandsynligvis virkelig nice mennesker, 60 00:03:18,000 --> 00:03:21,000 skrev denne klasse for mig, og det håndterer ting som visning af knapper 61 00:03:21,000 --> 00:03:25,000 eller gøre skærmen, og vi ville være virkelig forpint 62 00:03:25,000 --> 00:03:28,000 at gennemføre alle denne funktionalitet selv, og så ved blot 63 00:03:28,000 --> 00:03:31,000 arver data vi kan sige alt det, du gjorde i denne klasse 64 00:03:31,000 --> 00:03:34,000 Jeg vil også gerne inde i min klasse, og så jeg har tænkt mig at gøre nogle andre ting, 65 00:03:34,000 --> 00:03:37,000 nemlig gennemføre en app. 66 00:03:37,000 --> 00:03:40,000 Det er, hvad dette ord arv betyder. Vi vil se en mere konkret eksempel. 67 00:03:40,000 --> 00:03:42,000 >> Og endelig, nøglen med objektorienteret programmering, er, at 68 00:03:42,000 --> 00:03:45,000 det fører til data indkapsling. 69 00:03:45,000 --> 00:03:48,000 I nogle af vores problem sætter vi kunne have disse store, globale variable 70 00:03:48,000 --> 00:03:51,000 og globals overalt, og det er, hvordan vi ville holde styr på statens. 71 00:03:51,000 --> 00:03:55,000 Med klasser kan vi begynde at indkapsle information inde i et objekt. 72 00:03:55,000 --> 00:03:58,000 Hvis vi har en skærm på vores app, behøver vi ikke virkelig har brug for at have nogen data fra 73 00:03:58,000 --> 00:04:01,000 anden skærm i vores app inde i denne, 74 00:04:01,000 --> 00:04:04,000 og så ved at indkapsle ting inden klasser dette rent faktisk fører 75 00:04:04,000 --> 00:04:08,000 til langt bedre kode design, og dette er muligt med nogle af de ekstra funktioner 76 00:04:08,000 --> 00:04:11,000 af Objective-C. 77 00:04:11,000 --> 00:04:15,000 Forvarsel, syntaksen for Objective-C er bananer. 78 00:04:15,000 --> 00:04:19,000 Det er ligesom noget vi har set før, 79 00:04:19,000 --> 00:04:22,000 så det er lidt af en indlæringskurve at vænne sig til 80 00:04:22,000 --> 00:04:24,000 hvad dælen betyder det? 81 00:04:24,000 --> 00:04:27,000 Men når du kommer forbi, at den indledende indlæringskurve, det er virkelig, virkelig glat 82 00:04:27,000 --> 00:04:29,000 at begynde at skrive apps. 83 00:04:29,000 --> 00:04:33,000 >> At erklære en klasse, for at sige her er min klasse, den eksisterer, 84 00:04:33,000 --> 00:04:35,000 og måske her er nogle ting, som jeg har tænkt mig at definere senere, 85 00:04:35,000 --> 00:04:38,000 Jeg har tænkt mig at sige @ interface. 86 00:04:38,000 --> 00:04:41,000 Jeg har tænkt mig at sige @ interface. Jeg har tænkt mig at give min klasse et navn. 87 00:04:41,000 --> 00:04:43,000 Og så senere et andet sted jeg har tænkt mig at sige @ ende, 88 00:04:43,000 --> 00:04:46,000 og alt i mellem @ interface og @ ende 89 00:04:46,000 --> 00:04:48,000 vil være min klasse. 90 00:04:48,000 --> 00:04:51,000 Det kommer til at være, hvad der er inde i vores. H-filer. 91 00:04:51,000 --> 00:04:55,000 Ligesom i C vores. H-filer grundlæggende sagde her er nogle ting, der vil eksistere. 92 00:04:55,000 --> 00:04:57,000 Jeg er ikke nødvendigvis fortælle dig, hvad de gør endnu, 93 00:04:57,000 --> 00:04:59,000 men compileren brug for at vide, at de eksisterer. 94 00:04:59,000 --> 00:05:04,000 Senere inde i vores. M. filer-fordi m for Objective-C 95 00:05:04,000 --> 00:05:08,000 er, hvor vi faktisk kommer til at definere, hvad disse klasser gør. 96 00:05:08,000 --> 00:05:11,000 Meget gerne vores. C-filer, forudsat at vi en implementering af funktioner. 97 00:05:11,000 --> 00:05:15,000 Inderside i vores. M. fil vi vil sige her er, hvad alle de funktioner 98 00:05:15,000 --> 00:05:18,000 indersiden af ​​min klasse-hvad de alle gør. 99 00:05:18,000 --> 00:05:22,000 Og endelig, inde i en struct vi kunne sige indersiden af ​​disse krøllede parenteser 100 00:05:22,000 --> 00:05:25,000 int n eller node * næste, 101 00:05:25,000 --> 00:05:28,000 og i Objective-C vi kommer til at bruge søgeordet @ ejendom, 102 00:05:28,000 --> 00:05:31,000 og dette er hvad der kommer til at definere de egenskaber, 103 00:05:31,000 --> 00:05:36,000 eller de ikke-funktioner, der er en del af mine klasser. 104 00:05:36,000 --> 00:05:40,000 >> Opkald funktioner i Objective-C er også bananer. 105 00:05:40,000 --> 00:05:43,000 Når vi erklærede funktioner i C vi sagde noget lignende int Foo 106 00:05:43,000 --> 00:05:46,000 og åben parentes og derefter gav det en liste over argumenter. 107 00:05:46,000 --> 00:05:51,000 Dette er, hvad erklære metoder eller funktioner ser ud i Objective-C. 108 00:05:51,000 --> 00:05:54,000 Hvis jeg ønsker at erklære en funktion eller en metode 109 00:05:54,000 --> 00:05:58,000 hvor jeg siger metode er egentlig bare en funktion, der er et medlem af en klasse, 110 00:05:58,000 --> 00:06:01,000 så slags substituerbare, men ikke rigtig, 111 00:06:01,000 --> 00:06:03,000 så indersiden af ​​min metode jeg ønsker at oprette en ny metode. 112 00:06:03,000 --> 00:06:06,000 Det kommer til at returnere noget, så det kommer til at være af typen ugyldige. 113 00:06:06,000 --> 00:06:08,000 Dette er returtypen min funktion. 114 00:06:08,000 --> 00:06:11,000 Nu har vi parens her fordi, jeg ikke kender. 115 00:06:11,000 --> 00:06:14,000 Næste bliver navnet på min funktion, 116 00:06:14,000 --> 00:06:17,000 og så endelig har vi et semikolon ligesom vi havde i C. 117 00:06:17,000 --> 00:06:19,000 Hvad er nyt her er denne fyr her. 118 00:06:19,000 --> 00:06:22,000 Denne bindestreg er faktisk nødvendigt, og hvad det siger, er, at 119 00:06:22,000 --> 00:06:26,000 denne metode her skal kaldes på en instans af en klasse. 120 00:06:26,000 --> 00:06:29,000 >> Efter at vi erklærede vores struct vi sandsynligvis sagde noget i retning 121 00:06:29,000 --> 00:06:32,000 struct node n, og den faktisk skabte 122 00:06:32,000 --> 00:06:35,000 eller instantieres en af ​​disse struct, så jeg kunne faktisk begynde at arbejde 123 00:06:35,000 --> 00:06:38,000 med, hvad der er inde i det, denne streg så betyder, at vi er nødt til at 124 00:06:38,000 --> 00:06:41,000 instantiere klassen ligesom vi instantieres at struct 125 00:06:41,000 --> 00:06:43,000 før vi kan kalde denne metode på det. 126 00:06:43,000 --> 00:06:46,000 Hvis jeg ønsker at begynde at tilføje argumenter til mine metoder 127 00:06:46,000 --> 00:06:48,000 det bliver endnu 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 har tænkt mig at få et kolon, og efter denne kolon der står her kommer nogle argumenter. 130 00:06:53,000 --> 00:06:56,000 Denne metode kræver ét argument. 131 00:06:56,000 --> 00:06:59,000 Den type for sin argumentation er en int, og navnet på dette argument 132 00:06:59,000 --> 00:07:03,000 eller den variabel, jeg har tænkt mig at begynde at bruge indersiden af ​​metoden kaldes i. 133 00:07:03,000 --> 00:07:05,000 Igen, dette er metode. Den har et argument. 134 00:07:05,000 --> 00:07:10,000 >> Hvis du ønsker at begynde at tilføje flere argumenter det får flere bananer 135 00:07:10,000 --> 00:07:13,000 i, at vi har denne kolon, der siger her kommer min liste over argumenter. 136 00:07:13,000 --> 00:07:15,000 Denne første argument er et heltal. 137 00:07:15,000 --> 00:07:17,000 Nu dette andet argument er interessant. 138 00:07:17,000 --> 00:07:20,000 Variablen at jeg har tænkt mig at bruge indersiden af ​​min funktion 139 00:07:20,000 --> 00:07:23,000 kaldes f, så indersiden af ​​min funktion jeg kunne sige 140 00:07:23,000 --> 00:07:25,000 f + = 1 eller noget. 141 00:07:25,000 --> 00:07:30,000 Denne ting her er dybest set en nøgle til dette argument eller parameter. 142 00:07:30,000 --> 00:07:34,000 Ligesom vi havde centrale værdipar og noget som JSON eller associative arrays 143 00:07:34,000 --> 00:07:37,000 Objective-C taget beslutningen om at sige, okay, bare så det er virkelig klar 144 00:07:37,000 --> 00:07:39,000 når du kalder en metode, hvad alle disse parametre er 145 00:07:39,000 --> 00:07:41,000 Jeg er faktisk kommer til at nævne dem alle. 146 00:07:41,000 --> 00:07:45,000 Når du ringer til en metode, vil du faktisk sige andFloat, 147 00:07:45,000 --> 00:07:47,000 og så skal du passere det i. 148 00:07:47,000 --> 00:07:50,000 >> Interessant, er dette en ikke navngivet, men alle de andre parametre er, 149 00:07:50,000 --> 00:07:53,000 så hvis vi havde en 3rd argument jeg kunne sige andFloat 150 00:07:53,000 --> 00:07:56,000 og en anden flydende og så videre. 151 00:07:56,000 --> 00:08:01,000 Når jeg kalder disse metoder er det naturligvis bananer, 152 00:08:01,000 --> 00:08:04,000 så hvis jeg har et objekt, og jeg defineret en metode, der hedder foo, 153 00:08:04,000 --> 00:08:09,000 og jeg vil kalde det, i stedet for at sige Foo åben / luk parens 154 00:08:09,000 --> 00:08:11,000 Jeg har tænkt mig at åbne en konsol. 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 har tænkt mig at lukke bøjlen, og det er formålet, jeg ringer det på. 157 00:08:17,000 --> 00:08:20,000 Husk, alle disse metoder eksisterer i klasser 158 00:08:20,000 --> 00:08:23,000 fordi klasser kan have metoderne defineret inde i dem. 159 00:08:23,000 --> 00:08:26,000 >> Her har jeg vilkårligt oprettet et objekt af en vis klasse, 160 00:08:26,000 --> 00:08:28,000 og dette er den syntaks for at gøre det. 161 00:08:28,000 --> 00:08:31,000 Der er 2 skridt til at oprette et objekt. 162 00:08:31,000 --> 00:08:34,000 Det første skridt er at sige, at jeg ønsker at afsætte plads. 163 00:08:34,000 --> 00:08:37,000 Dette svarer til en malloc. Vi har ikke sige allokere mere. 164 00:08:37,000 --> 00:08:42,000 Vi droppede m, gjorde det alloc, og erstattet den. C med. M. 165 00:08:42,000 --> 00:08:47,000 Efter vi Alloc noget, vi så nødt til at initialisere det. 166 00:08:47,000 --> 00:08:49,000 Dybest set, når du opretter objekter du måske ønsker at have en vis logik 167 00:08:49,000 --> 00:08:53,000 der udfører når de er oprettet, så du kan passere i nogle standardværdier 168 00:08:53,000 --> 00:08:57,000 eller noget lignende, og så denne init metode er hvad der rent faktisk skaber objektet. 169 00:08:57,000 --> 00:08:59,000 Vi først afsætte plads, ligesom vi gjorde i C, 170 00:08:59,000 --> 00:09:04,000 og så har vi initialisere det, som måske eller måske ikke gøre en hel masse. 171 00:09:04,000 --> 00:09:07,000 Så vi vender tilbage denne ting ind i et objekt o. 172 00:09:07,000 --> 00:09:09,000 Der er en stjerne her, fordi dette er teknisk en pegepind, 173 00:09:09,000 --> 00:09:12,000 men fortvivl ikke, pointers er ikke så stor en aftale i Objective-C længere. 174 00:09:12,000 --> 00:09:15,000 >> Nu har vi instantieret denne klasse kaldet NSObject, 175 00:09:15,000 --> 00:09:19,000 og dette er blot en tilfældig klasse, at Apple har. 176 00:09:19,000 --> 00:09:22,000 Vi har instantieret dette, og nu har jeg en instans af denne klasse 177 00:09:22,000 --> 00:09:25,000 i dette formål o, at det betyder, at hvis jeg definerede 178 00:09:25,000 --> 00:09:29,000 disse metoder jeg kunne kalde dem sådan. 179 00:09:29,000 --> 00:09:31,000 Tilsvarende, hvis jeg ønskede at kalde en metode med ét argument, 180 00:09:31,000 --> 00:09:34,000 så dette er den bar metode, der tager et argument, 181 00:09:34,000 --> 00:09:38,000 og her er det baz: qux metode, så dette tager 2 argumenter. 182 00:09:38,000 --> 00:09:44,000 Dette kalder en funktion på dette objekt o. 183 00:09:44,000 --> 00:09:46,000 Give mening? 184 00:09:46,000 --> 00:09:50,000 Syntaksen skal give mening, men du slags vænne sig til det. 185 00:09:50,000 --> 00:09:54,000 >> Okay, lad os tale om et par ting, der er indbygget i Objective-C 186 00:09:54,000 --> 00:09:56,000 , som ikke nødvendigvis er indbygget i C. 187 00:09:56,000 --> 00:09:59,000 I C vi sådan skulle håndtere strenge som disse dumme tegndatatabeller, 188 00:09:59,000 --> 00:10:01,000 og det fik virkelig irriterende. 189 00:10:01,000 --> 00:10:04,000 Objective-C har de alle bygget i for os, og det er bygget i 190 00:10:04,000 --> 00:10:06,000 ved hjælp af denne klasse kaldet NSString. 191 00:10:06,000 --> 00:10:10,000 Når jeg ønsker at skabe en NSString vi har flere mystiske syntaks. 192 00:10:10,000 --> 00:10:15,000 Snarere end at sige "CS50", siger vi @ "CS50" 193 00:10:15,000 --> 00:10:17,000 og dette er kun syntaksen for at erklære strenge i Objective-C. 194 00:10:17,000 --> 00:10:21,000 Det er ekstremt let at glemme, så gør det ikke. 195 00:10:21,000 --> 00:10:24,000 Nu, når jeg har det, det er en streng, men bemærker 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 sagde NSString, hvilket betyder, at jeg instantieres klassen 198 00:10:30,000 --> 00:10:32,000 kaldet NSString, som en anden skrev til mig, 199 00:10:32,000 --> 00:10:35,000 og de var meget nice om det, og så nu 200 00:10:35,000 --> 00:10:37,000 Jeg kan begynde at kalde metoder på det. 201 00:10:37,000 --> 00:10:40,000 Hvis jeg kalder metoden længde på dette objekt s 202 00:10:40,000 --> 00:10:43,000 det vil vende tilbage til mig længden af ​​strengen. 203 00:10:43,000 --> 00:10:45,000 Det er ligesom strlen i C. 204 00:10:45,000 --> 00:10:47,000 Dette ville vende tilbage 4. 205 00:10:47,000 --> 00:10:51,000 >> Ligeledes en anden metode jeg måske ønsker at bekymre sig om, er denne characterAtIndex. 206 00:10:51,000 --> 00:10:54,000 Dette er en metode, der siger på denne streng s 207 00:10:54,000 --> 00:10:57,000 Jeg vil have dig til at få den nulte karakter, 208 00:10:57,000 --> 00:10:59,000 og så dette ville vende tilbage til mig karakter c, 209 00:10:59,000 --> 00:11:02,000 og der er en hel masse flere af disse metoder, du kan Google virkelig nemt. 210 00:11:02,000 --> 00:11:07,000 Apples dokumentation er stor, og vi vil tage et kig på det i en smule. 211 00:11:07,000 --> 00:11:09,000 Det er strenge. 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ærede et array 214 00:11:13,000 --> 00:11:16,000 vi havde at sige du har 5 elementer, slutningen af ​​historien. 215 00:11:16,000 --> 00:11:18,000 Da vi fik til JavaScript og PHP vi kunne starte 216 00:11:18,000 --> 00:11:20,000 gøre ting som at tilføje elementer eller flytte elementer. 217 00:11:20,000 --> 00:11:22,000 Vi kan gøre det samme i Objective-C. 218 00:11:22,000 --> 00:11:26,000 Snarere end at skabe et array i den normale C vej 219 00:11:26,000 --> 00:11:30,000 Vi har igen en anden klasse kaldet NSMutableArray. 220 00:11:30,000 --> 00:11:33,000 Der er også NSArray, 221 00:11:33,000 --> 00:11:35,000 og dette vil dybest set indkapsle nogle array. 222 00:11:35,000 --> 00:11:38,000 Det siger det første, jeg vil gøre, er jeg ønsker at tildele 223 00:11:38,000 --> 00:11:41,000 plads til et nyt array, og efter at jeg tildeler det 224 00:11:41,000 --> 00:11:43,000 Jeg skal derefter initialisere det. 225 00:11:43,000 --> 00:11:45,000 Igen, bare kalde disse 2 metoder. 226 00:11:45,000 --> 00:11:48,000 Nu betyder det, at indersiden af ​​dette objekt en 227 00:11:48,000 --> 00:11:50,000 Jeg har en tom række sidder der. 228 00:11:50,000 --> 00:11:54,000 Hvis jeg ønsker at tilføje noget til dette array, kan jeg kalde addObject metode. 229 00:11:54,000 --> 00:11:59,000 Jeg vil tilføje et objekt til arrayet a, og jeg vil tilføje strengen CS50. 230 00:11:59,000 --> 00:12:02,000 Hvis jeg ønskede at omvendt fjerne, at jeg kan sige, at jeg gerne vil 231 00:12:02,000 --> 00:12:09,000 fjern genstanden på det første sted på arrayet eller gøre indsigelse en. 232 00:12:09,000 --> 00:12:11,000 >> Give mening? 233 00:12:11,000 --> 00:12:14,000 Okay, du slags vænne sig til denne firkantet beslag ting. 234 00:12:14,000 --> 00:12:18,000 Af den måde, du inde i en masse af Apples biblioteker vil se denne NS. 235 00:12:18,000 --> 00:12:21,000 NS faktisk står for næste skridt, som var en af ​​Steve Jobs første virksomheder, 236 00:12:21,000 --> 00:12:24,000 og det er her han virkelig begyndte at skrive en masse af koden 237 00:12:24,000 --> 00:12:27,000 som en slags grundlag for Mac OS X og alle de andre ting, 238 00:12:27,000 --> 00:12:32,000 og så denne NS er sådan denne nice arv råbe ud til en af ​​de tidligere selskaber 239 00:12:32,000 --> 00:12:34,000 tilbage, når Apple blev først starter ud. 240 00:12:34,000 --> 00:12:36,000 Det er overalt. 241 00:12:36,000 --> 00:12:41,000 Lad os tage et kig på en mere holistisk Objective-C eksempel. 242 00:12:41,000 --> 00:12:44,000 Her er jeg inde i XCode. 243 00:12:44,000 --> 00:12:47,000 For at komme her, jeg første gang hentede XCode fra App Store, 244 00:12:47,000 --> 00:12:50,000 åbnede det op, og så gik jeg op her til fil, 245 00:12:50,000 --> 00:12:54,000 herover til ny, og derefter projekt. 246 00:12:54,000 --> 00:12:57,000 Efter jeg gøre, at jeg har alle disse muligheder for, hvad jeg ønsker at skabe, 247 00:12:57,000 --> 00:12:59,000 og så vil vi tage et kig på disse muligheder senere, 248 00:12:59,000 --> 00:13:03,000 men kun for dette eksempel, fordi vi ikke er faktisk kommer til at have en app endnu, 249 00:13:03,000 --> 00:13:06,000 Jeg kom herned, og jeg sagde Command Line Tool, 250 00:13:06,000 --> 00:13:09,000 og dette er en app, at jeg kunne løbe på kommandolinjen 251 00:13:09,000 --> 00:13:12,000 ligesom vi har kørt fra C. 252 00:13:12,000 --> 00:13:16,000 Det er, hvordan jeg skabte dette projekt, og så nu er jeg her, 253 00:13:16,000 --> 00:13:20,000 så lad os først se på denne fil, og dette bør se temmelig bekendt. 254 00:13:20,000 --> 00:13:24,000 Jeg har en int navn. Der er min ven argc, min anden kammerat argv. 255 00:13:24,000 --> 00:13:30,000 Og så vi kan se, at det er indgang til min første Objective-C program. 256 00:13:30,000 --> 00:13:32,000 Her kan vi se bort fra dette for nu. 257 00:13:32,000 --> 00:13:35,000 Dette er dybest set noget hukommelse management ting, du vil ikke rigtig 258 00:13:35,000 --> 00:13:37,000 nogensinde nødt til at bekymre sig om. 259 00:13:37,000 --> 00:13:39,000 >> Lad os se på dette første blok her. 260 00:13:39,000 --> 00:13:46,000 Denne første linje, hvis jeg siger Student * alice = [[Student alloc] init] hvad er det gør? 261 00:13:46,000 --> 00:13:50,000 Denne første student her, det er nok 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 gøre, er jeg ønsker at afsætte plads til en ny elev, 264 00:13:57,000 --> 00:14:00,000 og så vil jeg initialisere det, så det giver mig tilbage 265 00:14:00,000 --> 00:14:05,000 denne nye elev objekt, og jeg gemme dette i en variabel kaldet Alice. 266 00:14:05,000 --> 00:14:07,000 Hvor kom denne klasse komme fra? 267 00:14:07,000 --> 00:14:12,000 Tja, her over på venstre side disse er alle de forskellige filer inde i mit projekt. 268 00:14:12,000 --> 00:14:16,000 Vi kan se her har jeg en Student.h og en Student.m. 269 00:14:16,000 --> 00:14:20,000 Den. H-filen, skal du huske, hvor jeg erklærer alle de ting 270 00:14:20,000 --> 00:14:22,000 der vil eksistere inden for klassen. 271 00:14:22,000 --> 00:14:25,000 >> Lad os tage et kig på det. 272 00:14:25,000 --> 00:14:29,000 Okay, her har vi denne @ interface, og det siger, at her kommer 273 00:14:29,000 --> 00:14:33,000 erklæringerne om alt det, der vil eksistere i min klasse. 274 00:14:33,000 --> 00:14:36,000 Så jeg har et kolon. Så jeg har denne NSObject ting. 275 00:14:36,000 --> 00:14:40,000 Denne kolon betyder, at arv bit vi diskuterede lidt tidligere. 276 00:14:40,000 --> 00:14:43,000 Det siger alt en NSObject kan gøre 277 00:14:43,000 --> 00:14:46,000 hvor NSObject er denne klasse skrevet af en anden, 278 00:14:46,000 --> 00:14:50,000 alt dette NSObject kan gøre Jeg ønsker at være i stand til at gøre det. 279 00:14:50,000 --> 00:14:54,000 Ved at sige: NSObject det betyder, at jeg dybest set 280 00:14:54,000 --> 00:14:58,000 arvet alle funktioner af en anden klasse. 281 00:14:58,000 --> 00:15:02,000 Det gav mig virkelig en hel masse forskellige metoder og egenskaber, som jeg kan bruge. 282 00:15:02,000 --> 00:15:05,000 Hernede Jeg skaber 2 ejendomme. 283 00:15:05,000 --> 00:15:08,000 Det betyder min elev, hvis dette var en struct, ville disse være de 2 ting 284 00:15:08,000 --> 00:15:11,000 inde i min struct, så hver elev har et navn 285 00:15:11,000 --> 00:15:14,000 der er en streng, og en studerende 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 >> Endelig hernede jeg har tænkt mig at skabe en metode til min elev. 288 00:15:23,000 --> 00:15:26,000 Jeg ringede til min metode, initWithName, og det tager et argument, 289 00:15:26,000 --> 00:15:31,000 og dette argument er en streng, og jeg kaldte det navn. 290 00:15:31,000 --> 00:15:35,000 Lad os nu se på, hvordan vi rent faktisk gennemføres denne klasse. 291 00:15:35,000 --> 00:15:38,000 Her, nu er jeg inde i mit. M-fil, 292 00:15:38,000 --> 00:15:40,000 m for implementering, tror jeg. 293 00:15:40,000 --> 00:15:44,000 Jeg har min implementering, min ende, og her er hvor jeg er faktisk at definere 294 00:15:44,000 --> 00:15:47,000 hvad initWithName gør. 295 00:15:47,000 --> 00:15:50,000 Jeg har initWithName, navnet på min parameter, og derefter dette 296 00:15:50,000 --> 00:15:53,000 er, hvor jeg er faktisk at skabe en elev, 297 00:15:53,000 --> 00:15:56,000 og så dette er en lille smule kryptisk, men det er lidt af standardteksten 298 00:15:56,000 --> 00:15:58,000 at du ønsker at medtage i dine konstruktører. 299 00:15:58,000 --> 00:16:02,000 Denne initialisering funktion her, initWithName, er en form for constructor. 300 00:16:02,000 --> 00:16:05,000 Du er dybest set at konstruere en ny elev objekt 301 00:16:05,000 --> 00:16:07,000 og måske sende nogle data i den. 302 00:16:07,000 --> 00:16:11,000 Det første, jeg vil gøre, er jeg ønsker at kalde init på denne super ting. 303 00:16:11,000 --> 00:16:15,000 >> Husk, at når jeg sagde tilbage her i. H-filen 304 00:16:15,000 --> 00:16:21,000 at alt en NSObject har en elev også har. 305 00:16:21,000 --> 00:16:24,000 Det betyder, når jeg opretter en elev, hvad jeg også nødt til at gøre, er 306 00:16:24,000 --> 00:16:28,000 sørg for, at NSObject at jeg arver alle disse data fra 307 00:16:28,000 --> 00:16:32,000 er også initialiseret korrekt. 308 00:16:32,000 --> 00:16:36,000 Hvad jeg behøver at sige er dette super rent faktisk kommer til at henvise til den forælder klasse 309 00:16:36,000 --> 00:16:39,000 at jeg arver fra, så jeg vil være sikker på jeg initialisere 310 00:16:39,000 --> 00:16:43,000 alt, hvad jeg afhængig af, før jeg begynder at prøve at bruge det. 311 00:16:43,000 --> 00:16:46,000 Så hvis det initialiseret korrekt dette er ligesom at sige, om malloc 312 00:16:46,000 --> 00:16:50,000 vendte ikke tilbage null så jeg kan begynde at sætte nogle egenskaber. 313 00:16:50,000 --> 00:16:54,000 >> I JavaScript og PHP vi havde dette søgeord kaldes dette, 314 00:16:54,000 --> 00:16:58,000 og det nævnte nuværende instans af en klasse. 315 00:16:58,000 --> 00:17:00,000 I Objective-C kalder vi det selv. 316 00:17:00,000 --> 00:17:04,000 Når jeg siger self.name, der betyder, at objektet 317 00:17:04,000 --> 00:17:07,000 Jeg har lige oprettet, da jeg sagde student alloc init, 318 00:17:07,000 --> 00:17:09,000 der kommer til at give mig tilbage et objekt. 319 00:17:09,000 --> 00:17:12,000 Det betyder, at jeg ønsker at indstille navnet på den pågældende genstand 320 00:17:12,000 --> 00:17:15,000 til, hvad jeg lige passeret i. 321 00:17:15,000 --> 00:17:18,000 Ligesom i C, vi adgang medlemmer med denne prik, 322 00:17:18,000 --> 00:17:21,000 så self.name siger navnet på den studerendes objektet 323 00:17:21,000 --> 00:17:24,000 skal nu være, hvad du lige har passeret i. 324 00:17:24,000 --> 00:17:28,000 Og så til sidst, kan jeg returnere det, så jeg rent faktisk får noget tilbage. 325 00:17:28,000 --> 00:17:30,000 >> Spørgsmål? 326 00:17:30,000 --> 00:17:34,000 Okay, så denne selv = super init, 327 00:17:34,000 --> 00:17:37,000 hvis du ikke helt forstår arven ting du ikke bekymre dig. 328 00:17:37,000 --> 00:17:40,000 Bare vide, at hvis du nogensinde ønsker at lave din egen init metode bare 329 00:17:40,000 --> 00:17:42,000 gøre det, og du vil være god til at gå. 330 00:17:42,000 --> 00:17:44,000 Ja. >> [Student] Hvad gør, hvis self betyde? 331 00:17:44,000 --> 00:17:49,000 Det betyder, at når vi malloc noget, vi altid kontrolleres, hvis det var lig med nul, 332 00:17:49,000 --> 00:17:51,000 og hvis det var nul, så vi afsluttet. 333 00:17:51,000 --> 00:17:55,000 Det er det samme, for hvis dette afkast null, så er vi sandsynligvis vil seg fejl 334 00:17:55,000 --> 00:17:57,000 Hvis vi begynder at prøve at manipulere det. 335 00:17:57,000 --> 00:18:01,000 Det er vores elev klasse. 336 00:18:01,000 --> 00:18:03,000 Det betyder, at vi kan initialisere vores elever på en af ​​to måder. 337 00:18:03,000 --> 00:18:08,000 Hvis jeg siger student alloc init Jeg bruger ikke denne metode, som jeg netop skrev, 338 00:18:08,000 --> 00:18:11,000 og i stedet kan jeg blot sige alice.name, 339 00:18:11,000 --> 00:18:14,000 og nu vil jeg til at indstille denne egenskab navn. 340 00:18:14,000 --> 00:18:17,000 >> Tilsvarende, hvis jeg ønsker at bruge denne initWithName metode 341 00:18:17,000 --> 00:18:20,000 Jeg kan blot sige alloc, og derefter i stedet for at sige init 342 00:18:20,000 --> 00:18:24,000 Jeg har tænkt mig at kalde denne metode, som jeg lige har oprettet, og jeg har tænkt mig at passere i Bob. 343 00:18:24,000 --> 00:18:30,000 På dette tidspunkt har det formål Bob et navn lig med Bob. 344 00:18:30,000 --> 00:18:35,000 Okay, ned her jeg bruger det NSMutableArray at vi kiggede på tidligere. 345 00:18:35,000 --> 00:18:38,000 Jeg fordeling space.Then jeg initialisere et nyt array. 346 00:18:38,000 --> 00:18:40,000 Jeg har tænkt mig at tilføje 2 ting til det. 347 00:18:40,000 --> 00:18:43,000 Dette array har nu studerende objekter. 348 00:18:43,000 --> 00:18:46,000 Bemærk, at intetsteds havde jeg skal sige dette er en vifte af studerende. 349 00:18:46,000 --> 00:18:48,000 Jeg sagde, det er et array, periode. 350 00:18:48,000 --> 00:18:50,000 Så kan jeg sætte uanset inde i det, jeg vil. 351 00:18:50,000 --> 00:18:52,000 Her har jeg 2 objekter. 352 00:18:52,000 --> 00:18:56,000 >> Endelig har jeg et andet objekt her, denne TF. 353 00:18:56,000 --> 00:18:59,000 Herovre i TF.h stort set det samme. 354 00:18:59,000 --> 00:19:01,000 Jeg arver fra NSObject, og af den måde, 355 00:19:01,000 --> 00:19:03,000 når du opretter klasser foregår det hele for dig, 356 00:19:03,000 --> 00:19:06,000 denne form for grænseflade standardtekst. 357 00:19:06,000 --> 00:19:08,000 Det har en egenskab af studerende. 358 00:19:08,000 --> 00:19:15,000 Jeg har et par metoder her, der ikke rigtig gøre en hel masse, 359 00:19:15,000 --> 00:19:18,000 og så det betyder, når jeg har oprettet denne TF objekt 360 00:19:18,000 --> 00:19:23,000 Jeg kan kalde denne metode klasse på det på denne måde. 361 00:19:23,000 --> 00:19:26,000 Eventuelle spørgsmål om Objective-C syntaks, før vi begynder at flytte ind i nogle mere 362 00:19:26,000 --> 00:19:30,000 interessante apps udvikling stuff? 363 00:19:30,000 --> 00:19:34,000 >> Okay, så lad os faktisk gøre en iPhone app. 364 00:19:34,000 --> 00:19:39,000 De centrale klasser, som du skal bruge inde i din iPhone app kaldes view controllere, 365 00:19:39,000 --> 00:19:42,000 og en visning controller dybest set repræsenterer en enkelt skærm 366 00:19:42,000 --> 00:19:46,000 indersiden af ​​din app, hvis så jeg er på den musik app, for eksempel, 367 00:19:46,000 --> 00:19:50,000 én visning controller kunne repræsentere den visning, hvor jeg se alle de sange på min iPhone. 368 00:19:50,000 --> 00:19:53,000 Another view controller kunne være, når jeg klikker på en sang og begynde at spille det 369 00:19:53,000 --> 00:19:55,000 eller som jeg bore ned i kunstnere. 370 00:19:55,000 --> 00:19:59,000 Hver af disse forskellige skærme kan være repræsenteret som en anden opfattelse controller, 371 00:19:59,000 --> 00:20:04,000 og en visning controller er egentlig bare en klasse, der siger, hvordan dette skærmbillede fungerer. 372 00:20:04,000 --> 00:20:07,000 Ting inde af en visning controller, vi vil have egenskaber, 373 00:20:07,000 --> 00:20:10,000 så ting som en knap der vil være en egenskab ved vores opfattelse controller. 374 00:20:10,000 --> 00:20:13,000 >> Vi vil også have metoder, og disse er dybest set hændelseshandlere. 375 00:20:13,000 --> 00:20:16,000 Denne metode siger, når du trykker på denne knap 376 00:20:16,000 --> 00:20:19,000 Jeg ønsker at gøre noget, og endelig, igen, 377 00:20:19,000 --> 00:20:24,000 vi skal bruge denne self søgeord for at få adgang til den aktuelle forekomst. 378 00:20:24,000 --> 00:20:29,000 At opbygge grænseflader i iOS er faktisk virkelig, virkelig nemt. 379 00:20:29,000 --> 00:20:32,000 De har denne nice drag and drop interface kaldet Interface Builder, 380 00:20:32,000 --> 00:20:37,000 og de 2 centrale begreber, wire op 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 blot siger, at hvis du erklærer en ejendom, der er en knap, 383 00:20:44,000 --> 00:20:47,000 og du ønsker at tilslutte den til noget i din faktiske UI, 384 00:20:47,000 --> 00:20:49,000 du kommer til at sige, det er en stikkontakt. 385 00:20:49,000 --> 00:20:51,000 Tilsvarende, hvis du ønsker at repræsentere en hændelseshandler 386 00:20:51,000 --> 00:20:54,000 så du kommer til at sige, det er en handling. 387 00:20:54,000 --> 00:20:57,000 >> For rent faktisk at wire op denne grafiske repræsentation 388 00:20:57,000 --> 00:21:00,000 og din kode, det er virkelig, virkelig simpelt. 389 00:21:00,000 --> 00:21:03,000 Hvis du ønsker at vedhæfte en IBOutlet, alt hvad du skal gøre, er at du kontrollerer klik, 390 00:21:03,000 --> 00:21:05,000 og vi vil se et eksempel på dette virkelig hurtig. 391 00:21:05,000 --> 00:21:07,000 Du styrer klik hvor der står View Controller. 392 00:21:07,000 --> 00:21:09,000 Du kommer til at trække ind i grænsefladen, eller omvendt, 393 00:21:09,000 --> 00:21:13,000 hvis du ønsker at tilslutte en hændelseshandler du vil trække fra grænsefladen 394 00:21:13,000 --> 00:21:15,000 i den anden retning. 395 00:21:15,000 --> 00:21:20,000 Lad os tage et kig på en meget simpel iOS eksempel. 396 00:21:20,000 --> 00:21:23,000 >> Lad os oprette et nyt projekt. 397 00:21:23,000 --> 00:21:25,000 Jeg har tænkt mig at komme herop til Anvendelse, 398 00:21:25,000 --> 00:21:28,000 og jeg har tænkt mig at klikke på Enkeltvisning Application. 399 00:21:28,000 --> 00:21:31,000 Jeg har tænkt mig at klikke næste. Jeg vil give mit projekt et navn. 400 00:21:31,000 --> 00:21:33,000 Jeg vil kalde det Hej. 401 00:21:33,000 --> 00:21:36,000 Interessant Apple påtager du opretter et produkt 402 00:21:36,000 --> 00:21:38,000 så du kan sælge det, og de kan tjene penge. 403 00:21:38,000 --> 00:21:41,000 Hernede vil jeg sige, at dette er en iPhone app. 404 00:21:41,000 --> 00:21:44,000 Du kan oprette en iPad app, eller hvis du vil oprette en af ​​disse apps 405 00:21:44,000 --> 00:21:47,000 der understøtter begge enheder, du kan gøre det også. 406 00:21:47,000 --> 00:21:49,000 Disse er, hvad du vil have dine checkmarks at se ud. 407 00:21:49,000 --> 00:21:51,000 >> Du ønsker at bruge storyboards, som vi vil se senere, 408 00:21:51,000 --> 00:21:54,000 og du absolut vil bruge automatisk henvisning optælling, 409 00:21:54,000 --> 00:21:58,000 som er en nice funktion, der forhindrer dig i at skulle sige malloc og gratis. 410 00:21:58,000 --> 00:22:03,000 Medmindre du vil ringe til malloc og fri, ville jeg forlade denne kontrolleret. 411 00:22:03,000 --> 00:22:07,000 Jeg vil klikke næste, og endelig er dette vil spørge mig, hvor jeg vil gemme det. 412 00:22:07,000 --> 00:22:14,000 Jeg slår skabe, og her er vi gå. 413 00:22:14,000 --> 00:22:16,000 Jeg har oprettet et nyt projekt. 414 00:22:16,000 --> 00:22:19,000 Herovre på venstre er alle de filer, der er inde i mit projekt, 415 00:22:19,000 --> 00:22:22,000 og bemærk, at jeg fik en hel masse, og jeg har ikke selv gøre noget. 416 00:22:22,000 --> 00:22:24,000 IOS er stor. 417 00:22:24,000 --> 00:22:27,000 >> For eksempel, her i ViewController.h 418 00:22:27,000 --> 00:22:30,000 dette vil repræsentere min første visning controller, 419 00:22:30,000 --> 00:22:32,000 så det første skærmbillede inde i min app. 420 00:22:32,000 --> 00:22:34,000 Nu ved vi, hvad det siger. 421 00:22:34,000 --> 00:22:36,000 Vi siger jeg ringer denne klasse viewcontroller, 422 00:22:36,000 --> 00:22:40,000 og en viewcontroller gør alt, hvad en UIViewController gør, 423 00:22:40,000 --> 00:22:43,000 og dette igen, er nogle klasse, at Apple skrev, at gør en masse praktisk ting for os 424 00:22:43,000 --> 00:22:46,000 gerne vise skærmen. 425 00:22:46,000 --> 00:22:50,000 Her er der, hvor jeg rent faktisk kan begynde at definere, hvad min opfattelse controller gør, 426 00:22:50,000 --> 00:22:52,000 og det viser sig, at jeg virkelig ikke brug for noget af dette. 427 00:22:52,000 --> 00:22:55,000 Dette er standardtekst kode, som Apple giver mig gratis. 428 00:22:55,000 --> 00:22:59,000 Jeg behøvede at første linje, eller jeg ikke har en klasse, 429 00:22:59,000 --> 00:23:02,000 så vi kan slippe af med det og slippe af med dette. 430 00:23:02,000 --> 00:23:05,000 Okay, så dette er min tomme skærm. 431 00:23:05,000 --> 00:23:08,000 >> Lad os nu klikke på dette MainStoryboard.storyboard, 432 00:23:08,000 --> 00:23:11,000 og det er her det begynder at blive interessant. 433 00:23:11,000 --> 00:23:14,000 Dette er den første skærm på min app. 434 00:23:14,000 --> 00:23:17,000 Hvis jeg ønsker at tilføje en knap, i HTML jeg var nødt til at oprette en knap tag. 435 00:23:17,000 --> 00:23:20,000 I Android du nødt til at oprette en knap tag, 436 00:23:20,000 --> 00:23:23,000 men i iOS, hvis jeg bare komme herned til nederste højre 437 00:23:23,000 --> 00:23:27,000 og hvis jeg klikker på denne 3. en her hvor der står Objects, 438 00:23:27,000 --> 00:23:31,000 og jeg kan rulle ned, eller jeg kan starte søgningen efter knap. 439 00:23:31,000 --> 00:23:35,000 Og se, en knap, så hvis jeg faktisk trække og slippe denne dér, 440 00:23:35,000 --> 00:23:38,000 Jeg har lige tilføjet en knap til dette skærmbillede på min app. 441 00:23:38,000 --> 00:23:41,000 Hvis jeg ønsker at ændre teksten, kan jeg dobbeltklikke på det, 442 00:23:41,000 --> 00:23:47,000 sige noget lokkende lignende "Tryk mig." 443 00:23:47,000 --> 00:23:51,000 Okay, nu, hvis jeg kører denne app, så vi kompilere det, 444 00:23:51,000 --> 00:23:54,000 så at køre det jeg klikker på play-knappen i øverste venstre, og der er min app. 445 00:23:54,000 --> 00:23:58,000 Jeg gjorde ikke noget, og jeg fik en sød leder iPhone app. 446 00:23:58,000 --> 00:24:01,000 Hvis jeg ønsker at stoppe den, kan du klikke på stopknappen 447 00:24:01,000 --> 00:24:03,000 fordi det er sjovere. 448 00:24:03,000 --> 00:24:07,000 >> Lad os sige, at jeg faktisk vil have noget til at ske, når jeg trykker på denne knap. 449 00:24:07,000 --> 00:24:09,000 For at gøre dette, hvad jeg skal gøre, er jeg nødt til at oprette 450 00:24:09,000 --> 00:24:13,000 en ny hændelseshandler eller en handling. 451 00:24:13,000 --> 00:24:16,000 Det betyder, at jeg er nødt til at skabe nogle metode, jeg ønsker at blive kaldt 452 00:24:16,000 --> 00:24:18,000 når jeg trykker på knappen, så lad os skabe en ny metode. 453 00:24:18,000 --> 00:24:20,000 Jeg er inde i ViewController.h. 454 00:24:20,000 --> 00:24:22,000 Jeg er nødt til at sige, at en metode findes. 455 00:24:22,000 --> 00:24:26,000 Jeg skal bruge en bindestreg første fordi jeg har tænkt mig at kalde dette på den opfattelse controller. 456 00:24:26,000 --> 00:24:28,000 Jeg er nødt til at give dette en type. 457 00:24:28,000 --> 00:24:31,000 Typen af ​​dette vil være, at IBAction ting, som vi så tidligere. 458 00:24:31,000 --> 00:24:35,000 Dette er en event handler, så det kommer til at returnere en IBAction, 459 00:24:35,000 --> 00:24:38,000 og dette er en antydning til XCode sige, at 460 00:24:38,000 --> 00:24:40,000 det er noget, jeg ønsker at wire noget til. 461 00:24:40,000 --> 00:24:45,000 Jeg kan give den et navn, ligesom buttonPressed, semikolon. 462 00:24:45,000 --> 00:24:48,000 >> Nu har jeg erklæret en ny metode inde i min klasse. 463 00:24:48,000 --> 00:24:50,000 Jeg har sagt denne metode har at eksistere. 464 00:24:50,000 --> 00:24:53,000 Lad os nu komme i ViewController.m, 465 00:24:53,000 --> 00:24:56,000 og lad os sige, hvad denne metode kan gøre. 466 00:24:56,000 --> 00:25:03,000 Hvis jeg begynder at skrive, for eksempel, buttonPressed (void) 467 00:25:03,000 --> 00:25:06,000 varsel XCode er virkelig rart og autocompletes for mig. 468 00:25:06,000 --> 00:25:09,000 Det er virkelig vidunderlig. 469 00:25:09,000 --> 00:25:12,000 Bemærk her, at indersiden af. M. fil jeg kan også sige ugyldig, 470 00:25:12,000 --> 00:25:15,000 og dette skyldes, at IBAction ikke er faktisk en form. 471 00:25:15,000 --> 00:25:19,000 Det er faktisk hashtag defineret et sted at være et tomrum, 472 00:25:19,000 --> 00:25:22,000 og igen, det er bare en antydning til XCode, der siger 473 00:25:22,000 --> 00:25:25,000 Jeg ønsker, at dette skal være en hændelseshandler, og vi vil se hvorfor i bare et sekund. 474 00:25:25,000 --> 00:25:28,000 Når denne knap trykkes Jeg har tænkt mig at gøre noget irriterende 475 00:25:28,000 --> 00:25:30,000 gerne vise en popup. 476 00:25:30,000 --> 00:25:35,000 >> For at gøre, at jeg kan oprette en ny instans af denne klasse kaldet UIAlertView, 477 00:25:35,000 --> 00:25:39,000 og dette er en klasse, at Apple skrev, at der kommer til at vise irriterende popups. 478 00:25:39,000 --> 00:25:43,000 Vi kalder denne popup advarsel, og jeg har 2 trin, skal du huske, at skabe dette objekt. 479 00:25:43,000 --> 00:25:46,000 Den første ting jeg skal gøre, er afsætte plads. 480 00:25:46,000 --> 00:25:48,000 Jeg vil have en UIAlertView. 481 00:25:48,000 --> 00:25:51,000 Jeg ønsker at afsætte plads. Det er min første metode. 482 00:25:51,000 --> 00:25:53,000 Mit næste metode er jeg ønsker at initialisere den, 483 00:25:53,000 --> 00:25:58,000 og så har jeg denne store, lange metode kaldet initWithTitle. 484 00:25:58,000 --> 00:26:01,000 Det er dybest set kommer til at kontrollere, hvad denne popup siger. 485 00:26:01,000 --> 00:26:04,000 Titlen på min pop kan være goddag. 486 00:26:04,000 --> 00:26:08,000 Budskabet i denne popup kan være "Dette er iOS." 487 00:26:08,000 --> 00:26:10,000 Delegate ting, jeg ved ikke hvad det er. 488 00:26:10,000 --> 00:26:13,000 Lad os sige, det er ikke noget. 489 00:26:13,000 --> 00:26:18,000 Nu den knap, der kommer til at blive vist kan sige noget lignende "Det er godt nok," 490 00:26:18,000 --> 00:26:24,000 og jeg har ikke rigtig lyst nogen andre knapper, så lad os slette det og lukke beslag. 491 00:26:24,000 --> 00:26:27,000 >> Okay, jeg oprettede en ekstra. Der vi går. 492 00:26:27,000 --> 00:26:30,000 Dette er, hvordan jeg kan oprette en ny popup. 493 00:26:30,000 --> 00:26:35,000 Hvis jeg ønsker at faktisk vise popup jeg vil kalde showet metode. 494 00:26:35,000 --> 00:26:38,000 For at gøre, at jeg kan sige opmærksomme og show, 495 00:26:38,000 --> 00:26:40,000 og igen, autocomplete var super nice. 496 00:26:40,000 --> 00:26:42,000 Hvis jeg har glemt, hvad det var, hvis jeg lige har skrevet i s, 497 00:26:42,000 --> 00:26:45,000 Jeg kan rulle igennem her for at finde ud af, hvad det var, 498 00:26:45,000 --> 00:26:48,000 og det filtrerer pænt. 499 00:26:48,000 --> 00:26:52,000 Nu har jeg oprettet denne nye popup. 500 00:26:52,000 --> 00:26:55,000 Vi vil vende tilbage til det delegerede betyder senere, 501 00:26:55,000 --> 00:26:58,000 og nu vil jeg gerne sige, at jeg ønsker, at denne metode til at blive fyret 502 00:26:58,000 --> 00:27:01,000 når jeg trykker på knappen, så jeg har tænkt mig at vende tilbage til mit storyboard, 503 00:27:01,000 --> 00:27:04,000 og jeg vil gerne nu vedhæfte denne IBAction. 504 00:27:04,000 --> 00:27:06,000 Den første ting du vil gøre, er at klikke på knappen. 505 00:27:06,000 --> 00:27:08,000 Når jeg trykker på denne knap, jeg vil have noget til at ske. 506 00:27:08,000 --> 00:27:10,000 Jeg har ikke tænkt mig at holde kontrol. 507 00:27:10,000 --> 00:27:13,000 Jeg har tænkt mig at klikke og trække fra knappen 508 00:27:13,000 --> 00:27:15,000 til herovre, hvor der står View Controller. 509 00:27:15,000 --> 00:27:17,000 Vi kan se, at det pænt lyser op. 510 00:27:17,000 --> 00:27:22,000 >> Hvis jeg lader gå med min mus jeg har nu denne popup herovre, hvor jeg har nogle valgmuligheder. 511 00:27:22,000 --> 00:27:24,000 En af disse er de begivenheder, jeg kan registrere. 512 00:27:24,000 --> 00:27:28,000 Disse er alle disse metoder, jeg erklærede i min h-fil som IBActions. 513 00:27:28,000 --> 00:27:31,000 Dette er, hvordan XCode ved, hvad der skal vises i denne lille liste, 514 00:27:31,000 --> 00:27:33,000 så det er bare en antydning. 515 00:27:33,000 --> 00:27:37,000 Hvis jeg klikker på trykket på knappen, har jeg nu registreret hændelseshandler. 516 00:27:37,000 --> 00:27:41,000 I JavaScript vi havde at sige jeg har noget kode der registreret hændelseshandler. 517 00:27:41,000 --> 00:27:43,000 I Objective-C var det virkelig så let. 518 00:27:43,000 --> 00:27:46,000 Hvis jeg køre dette igen 519 00:27:46,000 --> 00:27:49,000 nu, når jeg trykker på knappen min hændelseshandler vil fyre, 520 00:27:49,000 --> 00:27:51,000 og jeg har tænkt mig at få denne popup. 521 00:27:51,000 --> 00:27:54,000 Super, super simpelt der. 522 00:27:54,000 --> 00:27:57,000 >> Hvis du nogensinde ønsker at se alle de begivenheder, der sker for at blive registreret 523 00:27:57,000 --> 00:28:00,000 på en komponent, hvis jeg klikker på denne knap 524 00:28:00,000 --> 00:28:02,000 og jeg kommer herover til højre 525 00:28:02,000 --> 00:28:05,000 første kan du se herovre jeg kan gøre ting som typen af ​​knappen, 526 00:28:05,000 --> 00:28:08,000 så hvis du ønsker en af ​​dem, jeg er eller add kontakt knappen 527 00:28:08,000 --> 00:28:10,000 eller hvad. 528 00:28:10,000 --> 00:28:13,000 Hvis jeg ønsker at se alle de begivenheder, der er på denne knap 529 00:28:13,000 --> 00:28:16,000 hvis jeg kommer hele vejen herover til højre 530 00:28:16,000 --> 00:28:19,000 vi kan se her på de begivenheder, jeg har alle disse forskellige begivenheder. 531 00:28:19,000 --> 00:28:23,000 Jeg kan trykke på knappen, når jeg slipper knappen, når jeg trykke to gange eller hvad ved jeg, 532 00:28:23,000 --> 00:28:26,000 og den ene jeg bare registreret, er denne begivenhed kaldet Touch Up Inside, 533 00:28:26,000 --> 00:28:29,000 og det siger, at så snart min finger kommer fra knappen 534 00:28:29,000 --> 00:28:32,000 denne begivenhed vil brand, og det er præcis, hvad der lige er sket. 535 00:28:32,000 --> 00:28:36,000 Det er en slags standard nede begivenhed. 536 00:28:36,000 --> 00:28:39,000 >> Eventuelle spørgsmål indtil videre? 537 00:28:39,000 --> 00:28:43,000 Okay, det er, hvordan vi kan begynde at wire op ting i vores kode 538 00:28:43,000 --> 00:28:46,000 ind i ting inde i vores interface. 539 00:28:46,000 --> 00:28:49,000 Husk det første, vi havde at gøre var at finde koden, 540 00:28:49,000 --> 00:28:54,000 og derefter vi kablet op grænsefladen til koden, 541 00:28:54,000 --> 00:28:57,000 og der er vores første app. 542 00:28:57,000 --> 00:29:00,000 Okay, det var virkelig cool, og vi skabte denne knap. 543 00:29:00,000 --> 00:29:03,000 Hvad hvis vi ikke ønsker at skulle skabe en masse ejendomme 544 00:29:03,000 --> 00:29:05,000 repræsenterer disse knapper? 545 00:29:05,000 --> 00:29:08,000 For eksempel, jeg i Tic Tac Toe har 9 knapper, 546 00:29:08,000 --> 00:29:11,000 og det ville være super, super irriterende at skulle trække og slippe 9 gange 547 00:29:11,000 --> 00:29:14,000 eller hvis jeg havde at gøre Tic Tac Toe med 81 i stedet for 9 548 00:29:14,000 --> 00:29:17,000 og jeg var nødt til at trække og slippe 81 gange, og det er halt. 549 00:29:17,000 --> 00:29:20,000 Det, vi kan gøre i stedet er meget ligesom en HTML 550 00:29:20,000 --> 00:29:23,000 når vi havde ting som ID'er og navne, og vi kan søge efter ting 551 00:29:23,000 --> 00:29:27,000 af deres id, er der en tilsvarende begreb i iOS kaldet tags. 552 00:29:27,000 --> 00:29:31,000 >> Et mærke er ganske enkelt et unikt identifikationsnummer for en komponent. 553 00:29:31,000 --> 00:29:34,000 Hvis jeg siger dette har en tag på 0, for eksempel, 554 00:29:34,000 --> 00:29:38,000 hvis jeg opretter en knap og give det et tag på 0, og vi vil se hvordan man gør det på bare et sekund, 555 00:29:38,000 --> 00:29:41,000 hvis jeg ønsker at få det knap kan jeg bare sige, jeg vil ringe til 556 00:29:41,000 --> 00:29:45,000 den viewWithTag metode på objektet herovre, 557 00:29:45,000 --> 00:29:48,000 den self.view, som repræsenterer det aktuelle skærmbillede, f.eks. 558 00:29:48,000 --> 00:29:53,000 Hvis jeg kalder viewWithTag metode, vil jeg trække tilbage knappen med tag 0. 559 00:29:53,000 --> 00:29:58,000 Lad os tage et kig på dette ved at bygge Tic Tac Toe. 560 00:29:58,000 --> 00:30:01,000 Først, dette er mit storyboard. 561 00:30:01,000 --> 00:30:05,000 Jeg har oprettet disse 10 UI knapper. 562 00:30:05,000 --> 00:30:07,000 Bemærk de er alle samme størrelse. 563 00:30:07,000 --> 00:30:11,000 Hvis jeg klikker på en af ​​disse, og jeg kommer tilbage her over på denne højre side 564 00:30:11,000 --> 00:30:15,000 vil du se, at jeg justeret fonten lige her, så jeg lavede fonten en lille smule større, 565 00:30:15,000 --> 00:30:19,000 men hvad jeg også gjorde, var jeg sat dette tag. 566 00:30:19,000 --> 00:30:23,000 Jeg sagde, at dette har en tag på 1, og det er øverst til venstre. 567 00:30:23,000 --> 00:30:26,000 >> Nu, hvis jeg klikker på en anden knap, som denne anden her, 568 00:30:26,000 --> 00:30:29,000 Nu vil du se, at mit tag er 2. 569 00:30:29,000 --> 00:30:32,000 Hver af disse knapper lige har en unik tag, 570 00:30:32,000 --> 00:30:35,000 og så dette er senere, hvordan jeg har tænkt mig at begynde at interagere 571 00:30:35,000 --> 00:30:38,000 med min app. 572 00:30:38,000 --> 00:30:40,000 Det er alt sammen inde i én visning controller, 573 00:30:40,000 --> 00:30:42,000 men her er hvad vi har. 574 00:30:42,000 --> 00:30:44,000 Vi har 3 ejendomme her. 575 00:30:44,000 --> 00:30:49,000 Den første og sidste kommer til at repræsentere staten mit bord. 576 00:30:49,000 --> 00:30:53,000 Dybest set dette første er et array, der repræsenterer hvor Xs og OS er. 577 00:30:53,000 --> 00:30:57,000 Denne anden her fortæller os, hvis tur det er. 578 00:30:57,000 --> 00:31:01,000 Du vil bemærke, at jeg også har disse ting her. 579 00:31:01,000 --> 00:31:05,000 Før da vi erklærede egenskaber vi gav dem et navn og en type. 580 00:31:05,000 --> 00:31:08,000 Vi kan også give dem nogle supplerende oplysninger her. 581 00:31:08,000 --> 00:31:11,000 Denne første siger nonatomic, og hvad det siger 582 00:31:11,000 --> 00:31:16,000 er dybest set kun én ting vil nogensinde være at forsøge at få adgang til denne variabel ad gangen. 583 00:31:16,000 --> 00:31:19,000 Du kan gøre mere komplekse applikationer, der er multi-threaded, 584 00:31:19,000 --> 00:31:22,000 og så tilbage i Scratch havde vi forskellige tråde, 585 00:31:22,000 --> 00:31:25,000 og forskellige sprites kunne gøre forskellige ting på samme tid. 586 00:31:25,000 --> 00:31:29,000 >> Hvis det ikke er tilfældet, som det ikke i noget, som vi vil se på, 587 00:31:29,000 --> 00:31:33,000 hvis vi siger nonatomic det er faktisk kommer til at gøre tingene en lille smule hurtigere. 588 00:31:33,000 --> 00:31:37,000 Vi har også denne ting kaldet tildele, stærk eller svag. 589 00:31:37,000 --> 00:31:40,000 Dette tildele bare siger, at det er en standard type. 590 00:31:40,000 --> 00:31:43,000 Dette er ikke et objekt eller en pegepind, fordi dette er blot en bool, 591 00:31:43,000 --> 00:31:46,000 så bool er indbygget i Objective-C. 592 00:31:46,000 --> 00:31:49,000 Det siger du ikke forsøge at gøre noget fancy med pointere her. 593 00:31:49,000 --> 00:31:51,000 Det er en almindelig gammel scaler. 594 00:31:51,000 --> 00:31:54,000 Stærk og svag, denne svage siger, at der faktisk 595 00:31:54,000 --> 00:31:57,000 Jeg ønsker, at dette skal pege på noget i udsigt controller. 596 00:31:57,000 --> 00:32:00,000 Jeg har ikke tænkt mig at faktisk tildele eller init dette selv. 597 00:32:00,000 --> 00:32:04,000 Interfacet builder, når jeg kører app, vil håndtere alt det initialiseringen. 598 00:32:04,000 --> 00:32:07,000 Hvis jeg siger svag, der siger en anden vil være at skabe denne. 599 00:32:07,000 --> 00:32:09,000 Hvis jeg siger stærk, det siger, at jeg har tænkt mig at være den ene 600 00:32:09,000 --> 00:32:12,000 der er at skabe dette board objekt, 601 00:32:12,000 --> 00:32:14,000 og så her jeg har nogle flere metoder her, 602 00:32:14,000 --> 00:32:18,000 for eksempel, med påstand om, når det nye spil trykkes 603 00:32:18,000 --> 00:32:20,000 en sag om, når nogen af ​​de andre der trykkes på knapperne, 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 ind i for meget af logikken i Tic Tac Toe, 606 00:32:26,000 --> 00:32:30,000 selvom det er meget spændende, men lad os tage et kig på 607 00:32:30,000 --> 00:32:33,000 nogle af de ting, vi kan gøre inde i iOS. 608 00:32:33,000 --> 00:32:35,000 Dette nye spil metode vil blive affyret 609 00:32:35,000 --> 00:32:37,000 hver gang jeg trykker på nye spil-knappen. 610 00:32:37,000 --> 00:32:41,000 At tilslutte det op jeg simpelthen komme over til min storyboard. 611 00:32:41,000 --> 00:32:43,000 Jeg klikkede på nyt spil. 612 00:32:43,000 --> 00:32:47,000 Hvis jeg kommer herover til højre jeg kan se, at 613 00:32:47,000 --> 00:32:50,000 Touch Up Inside er sluttet til den newGame metode. 614 00:32:50,000 --> 00:32:53,000 Det er derfor, det vil blive fyret. 615 00:32:53,000 --> 00:32:56,000 Den newGame Metoden kommer til at gøre nogle sæt op. 616 00:32:56,000 --> 00:32:59,000 Det kommer til at sige, at jeg vil have dig til at slette tilstand af brættet. 617 00:32:59,000 --> 00:33:01,000 Dette er en nice metode på bevægelige arrays. 618 00:33:01,000 --> 00:33:03,000 Dette vil sige, det er nu X tur, 619 00:33:03,000 --> 00:33:07,000 og nu vil jeg til at drage fordel af denne viewWithTag ting. 620 00:33:07,000 --> 00:33:11,000 >> Jeg ved, at mine knapper har de tags 1-9, 621 00:33:11,000 --> 00:33:13,000 og det er noget jeg tilfældigt plukket. 622 00:33:13,000 --> 00:33:15,000 Hvis jeg ønsker at indstille teksten til hver knap til at være tom 623 00:33:15,000 --> 00:33:17,000 fordi jeg lige startet et nyt spil, og jeg vil ikke have nogen 624 00:33:17,000 --> 00:33:20,000 Xs eller O'er at blive tilovers jeg kan gøre dette. 625 00:33:20,000 --> 00:33:24,000 Jeg kan sige, jeg vil have det synspunkt, med tag, 1, 2, 3, 4 et cetera. 626 00:33:24,000 --> 00:33:27,000 Dette vil trække en anden knap hver gang. 627 00:33:27,000 --> 00:33:30,000 Her vil jeg har tænkt mig at kaste det til UIButton. 628 00:33:30,000 --> 00:33:33,000 Ligesom vi kunne kaste int'er til flåd og omvendt 629 00:33:33,000 --> 00:33:37,000 dette siger, at jeg ønsker at kaste dette til en UIButton. 630 00:33:37,000 --> 00:33:40,000 Det betyder typen af ​​dette vil være en UIButton * 631 00:33:40,000 --> 00:33:43,000 på grund af pegepinde, men bare rolig, de er ikke skræmmende længere. 632 00:33:43,000 --> 00:33:47,000 >> Når jeg har denne knap, jeg har tænkt mig at kalde en metode på det. 633 00:33:47,000 --> 00:33:50,000 Denne metode kaldes setTitle forState, og så det siger 634 00:33:50,000 --> 00:33:53,000 Jeg ønsker at indstille teksten til knappen for at være den tomme streng, 635 00:33:53,000 --> 00:33:57,000 og jeg ønsker det skal være den tomme streng, når den ikke holdes nede. 636 00:33:57,000 --> 00:34:01,000 Hvis jeg bruger denne metode, kan jeg ændre teksten på knappen 637 00:34:01,000 --> 00:34:04,000 så snart en person rammer det, men vi ønsker at sige, når knappen bare sidder der 638 00:34:04,000 --> 00:34:07,000 Jeg ønsker, at teksten skal være tom. 639 00:34:07,000 --> 00:34:10,000 Endelig vil vi initialisere mit bord, 640 00:34:10,000 --> 00:34:12,000 og jeg har tænkt mig at sige, at alt er i øjeblikket på 0, 641 00:34:12,000 --> 00:34:15,000 så denne bestyrelsesmedlemmer uforanderlige er en foranderlig array, 642 00:34:15,000 --> 00:34:21,000 hvilket betyder, at jeg kan ringe til addObject metode og bare en 0 inde i den. 643 00:34:21,000 --> 00:34:23,000 Det er, hvad der sker, når jeg opretter et nyt spil. 644 00:34:23,000 --> 00:34:25,000 >> Lad os tage et kig på en anden. 645 00:34:25,000 --> 00:34:28,000 Denne metode her er det IBAction der kommer til at blive presset 646 00:34:28,000 --> 00:34:31,000 hver gang en af ​​disse felter er trykket. 647 00:34:31,000 --> 00:34:33,000 Nu har vi nogle Tic Tac Toe logik her. 648 00:34:33,000 --> 00:34:36,000 Vi regne ud, hvis tur det er, 649 00:34:36,000 --> 00:34:39,000 og baseret på, at vi enten indstille en X eller en O, 650 00:34:39,000 --> 00:34:43,000 men vi bemærker, at vi genbruge den samme hændelseshandler 651 00:34:43,000 --> 00:34:45,000 for hver enkelt af disse knapper. 652 00:34:45,000 --> 00:34:49,000 Det betyder, at jeg ikke har en fremgangsmåde til den øverste venstre knap, 653 00:34:49,000 --> 00:34:52,000 en anden metode til knappen nederst til højre, selv om jeg kunne have gjort. 654 00:34:52,000 --> 00:34:54,000 Det ville egentlig ikke være godt design. 655 00:34:54,000 --> 00:34:57,000 Hvad jeg laver her, er jeg faktisk kommer til at bestemme 656 00:34:57,000 --> 00:35:00,000 hvad tag af den knap, der blev trykket er. 657 00:35:00,000 --> 00:35:04,000 Du bemærker, at denne leg metode tager ét argument. 658 00:35:04,000 --> 00:35:07,000 Det hedder afsender, og hvad afsenderen er er afsender vil 659 00:35:07,000 --> 00:35:10,000 repræsentere præcis hvad der blev truffet foranstaltninger på. 660 00:35:10,000 --> 00:35:15,000 Hvis jeg trykker på en knap, er denne afsender vil være at UIButton 661 00:35:15,000 --> 00:35:18,000 at jeg faktisk presset, så det betyder, at UIButton 662 00:35:18,000 --> 00:35:20,000 har et tag, fordi jeg skabte et tag. 663 00:35:20,000 --> 00:35:23,000 >> Hvis jeg ønsker at komme på tag jeg kan blot sige 664 00:35:23,000 --> 00:35:26,000 Jeg vil have mærket på afsenderen, 665 00:35:26,000 --> 00:35:28,000 og igen, jeg har lige støbt det til en UIButton. 666 00:35:28,000 --> 00:35:32,000 Jeg ved, at afsenderen vil være en UIButton. 667 00:35:32,000 --> 00:35:34,000 Det behøver ikke altid at være en UIButton. 668 00:35:34,000 --> 00:35:36,000 Jeg kunne for eksempel registrere den samme hændelseshandler 669 00:35:36,000 --> 00:35:38,000  for en for en knap, en for en skyder. 670 00:35:38,000 --> 00:35:40,000 I dette tilfælde ved jeg, de er alle knapper, så jeg har tænkt mig at sige 671 00:35:40,000 --> 00:35:43,000 Jeg ønsker, at dette at være en knap, og så jeg kan få tag, 672 00:35:43,000 --> 00:35:48,000 og fra tag jeg nu, hvor jeg er inde i bestyrelsen. 673 00:35:48,000 --> 00:35:51,000 Så kan jeg blot indstille enten X eller O, kan vende igen, 674 00:35:51,000 --> 00:35:54,000 kontrollere, hvem har vundet, et cetera. 675 00:35:54,000 --> 00:35:59,000 >> Eventuelle spørgsmål om dette indtil videre? 676 00:35:59,000 --> 00:36:02,000 Okay, al den kode, vi lagt online-vi ønsker ikke at komme ind i for meget 677 00:36:02,000 --> 00:36:06,000 af Tic Tac Toe logik, men nu kan du se, der virkelig 678 00:36:06,000 --> 00:36:09,000 alt, hvad vi gør, er vi looping over denne array, 679 00:36:09,000 --> 00:36:13,000 så vi har et par efter sløjfer her, og vi er bare sammenligne til at se 680 00:36:13,000 --> 00:36:18,000 har vi en kamp i alle rækker, en kamp i en kolonne eller sådan noget. 681 00:36:18,000 --> 00:36:21,000 For rent faktisk at køre denne app, hvis jeg klikker på en af ​​disse knapper 682 00:36:21,000 --> 00:36:24,000 at spille metode blev fyret, så det betyder, at jeg netop har indstillet 683 00:36:24,000 --> 00:36:31,000 på knappen for at være et X, så nu denne knap vil være en O, og så videre, 684 00:36:31,000 --> 00:36:35,000 og så det er, hvordan vi er begyndt at interagere med denne enkelt side app. 685 00:36:35,000 --> 00:36:38,000 >> Vi vil sende koden, så er du velkommen til at granske det, 686 00:36:38,000 --> 00:36:43,000 men lad os nu tale om nogle apps, der er mere end bare én side. 687 00:36:43,000 --> 00:36:47,000 Så spændende som Tic Tac Toe var, en masse apps inde i iOS 688 00:36:47,000 --> 00:36:50,000 er slags af disse drill down ting med flere skærme. 689 00:36:50,000 --> 00:36:54,000 Det første koncept, som vi bliver nødt til at snakke om er protokoller, 690 00:36:54,000 --> 00:36:57,000 og en protokol er blot et sæt metoder 691 00:36:57,000 --> 00:36:59,000 at du kan love at definere. 692 00:36:59,000 --> 00:37:02,000 Hvis jeg opretter denne nye protokol med 2 metoder, denne første, 693 00:37:02,000 --> 00:37:05,000 hvis afkastet type er ugyldig, jeg kaldte det foo. 694 00:37:05,000 --> 00:37:07,000 Det tager ingen argumenter. Jeg har en anden metode. 695 00:37:07,000 --> 00:37:11,000 Den returnerer en int. Jeg kaldte det bar, og det har et argument. 696 00:37:11,000 --> 00:37:14,000 Alt denne protokol er, at kaldes SomeProtocol heroppe, 697 00:37:14,000 --> 00:37:19,000 Dette er et sæt af ting at nogen kan gennemføre. 698 00:37:19,000 --> 00:37:22,000 Jeg har ikke inde i denne protokol sagt, hvad Foo gør. 699 00:37:22,000 --> 00:37:26,000 I stedet, jeg siger bare, du kunne definere Foo, hvis du vil. 700 00:37:26,000 --> 00:37:30,000 Hvis jeg opretter en visning controller eller oprette en klasse 701 00:37:30,000 --> 00:37:33,000 Jeg kan indersiden af ​​denne klasse løfte om at gennemføre 702 00:37:33,000 --> 00:37:40,000 nogle af disse metoder, så for eksempel, hvis sige 703 00:37:40,000 --> 00:37:43,000 dette nu siger, at jeg gør et løfte til dig, at inde 704 00:37:43,000 --> 00:37:50,000 af dette synspunkt controller klasse jeg vil have definitioner for både foo og bar. 705 00:37:50,000 --> 00:37:52,000 >> Hvorfor er det nyttigt? 706 00:37:52,000 --> 00:37:55,000 En masse af komponenter inde i iOS drage fordel af dette 707 00:37:55,000 --> 00:37:58,000 design mønster kaldet delegation, og hvad delegation siger 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 der er nogle begivenheder, der kunne registreres inde i min tekst boks, 710 00:38:04,000 --> 00:38:07,000 snarere end at skabe separate hændelser hvad jeg kan gøre, er jeg kan sige 711 00:38:07,000 --> 00:38:10,000 den delegerede af denne tekstboks vil være nogle objekt. 712 00:38:10,000 --> 00:38:13,000 Når jeg siger, at dette er en delegeret nu, betyder, at 713 00:38:13,000 --> 00:38:16,000 hver gang en begivenhed ville være blevet fyret i tekstboksen 714 00:38:16,000 --> 00:38:18,000 snarere end at skulle registrere det eller noget lignende 715 00:38:18,000 --> 00:38:21,000 det er bare at kalde en metode på den delegerede. 716 00:38:21,000 --> 00:38:24,000 For eksempel, på min tekstboks inde har jeg en metode til når jeg trykker 717 00:38:24,000 --> 00:38:27,000 det gjort knappen i nederste højre, 718 00:38:27,000 --> 00:38:30,000 og så i stedet for at registrere hændelseshandler hvad jeg kan sige er 719 00:38:30,000 --> 00:38:34,000 tekstboks, her er et objekt, som jeg vil have dig til at kalde en metode på 720 00:38:34,000 --> 00:38:37,000 hver gang nogen trykker på knappen Udført, 721 00:38:37,000 --> 00:38:40,000 og det betyder, at det pågældende objekt har at gennemføre nogle protokol 722 00:38:40,000 --> 00:38:45,000 der siger jeg lover at definere det gjort knap handling, 723 00:38:45,000 --> 00:38:47,000 fordi hvis det ikke definerer denne metode, og du trykker på Udført, 724 00:38:47,000 --> 00:38:49,000 så det kommer til at være forvirrende. 725 00:38:49,000 --> 00:38:55,000 >> Lad os tage et kig på et eksempel. 726 00:38:55,000 --> 00:38:58,000 Her har jeg simpelthen har en tekstboks, 727 00:38:58,000 --> 00:39:04,000 og en af ​​egenskaberne for denne tekstboks herovre på denne højre side er stedfortræderen. 728 00:39:04,000 --> 00:39:06,000 Dette er en egenskab af klassen. 729 00:39:06,000 --> 00:39:09,000 Hvad jeg gjorde her er jeg styre klikkede, og jeg trak fra denne plet herovre 730 00:39:09,000 --> 00:39:13,000 til visningen controller, og det siger nu delegeret fra denne tekstboks 731 00:39:13,000 --> 00:39:18,000 bliver visningen controller. 732 00:39:18,000 --> 00:39:20,000 Det betyder, at når visse foranstaltninger ske i stedet for at registrere 733 00:39:20,000 --> 00:39:25,000 separate hændelseshandlere jeg ønsker, at du sende dem til den delegerede. 734 00:39:25,000 --> 00:39:28,000 Lad os nu tage et kig på min opfattelse controller. 735 00:39:28,000 --> 00:39:32,000 Inde i. H. fil jeg har lavet et løfte. 736 00:39:32,000 --> 00:39:36,000 Jeg har lovet at gennemføre nogle metoder inde i denne protokol 737 00:39:36,000 --> 00:39:38,000 kaldet UITextFieldDelegate, og igen, 738 00:39:38,000 --> 00:39:42,000 Dette er blot nogle liste over nogle ting, som jeg kan vælge at gennemføre. 739 00:39:42,000 --> 00:39:46,000 >> Hvis jeg kommer her i min. M-fil, har jeg implementeret en sådan metode. 740 00:39:46,000 --> 00:39:49,000 Jeg har kaldt det textFieldShouldReturn 741 00:39:49,000 --> 00:39:52,000 fordi det er hvad det blev kaldt inde i protokollen. 742 00:39:52,000 --> 00:39:57,000 Og nu når jeg trykker på knappen Udført indersiden af ​​denne tekstfelt 743 00:39:57,000 --> 00:40:00,000 dette er, hvad der kommer til at blive kaldt, så jeg ikke registrere en event handler. 744 00:40:00,000 --> 00:40:03,000 Jeg har tilsluttet delegerede, og når denne begivenhed er fyret 745 00:40:03,000 --> 00:40:08,000 det er den metode, der vil blive kaldt, så hvis jeg kommer herover til min storyboard og køre det- 746 00:40:08,000 --> 00:40:11,000 mens der er indlæsning vi kan se, hvad det gør. 747 00:40:11,000 --> 00:40:13,000 På min skærm jeg har 2 ting. 748 00:40:13,000 --> 00:40:16,000 Jeg har dette tekstfelt, og jeg har denne etiket. 749 00:40:16,000 --> 00:40:19,000 Jeg siger blot jeg vil have teksten til denne etiket 750 00:40:19,000 --> 00:40:23,000 at være lig med, hvad brugeren har indtastet inde i tekstfeltet. 751 00:40:23,000 --> 00:40:26,000 Denne næste linje her er simpelthen en metode, som jeg ringer 752 00:40:26,000 --> 00:40:29,000 på tekstfeltet, der siger jeg vil have dig til at skjule tastaturet. 753 00:40:29,000 --> 00:40:33,000 Dette er blot den vilkårlige metode, som Apple har valgt. 754 00:40:33,000 --> 00:40:38,000 >> Igen, før jeg gjorde noget jeg var nødt til at wire det hele op, så jeg først kom herover. 755 00:40:38,000 --> 00:40:42,000 Fra det synspunkt controller jeg trækker over til tekstfeltet. 756 00:40:42,000 --> 00:40:46,000 Jeg slap, og jeg kan se her, at jeg kan gøre dette tekstfeltet ejendom 757 00:40:46,000 --> 00:40:49,000 da herovre i det synspunkt controller jeg har defineret en ejendom 758 00:40:49,000 --> 00:40:52,000 der er en IBOutlet af et tekstfelt. 759 00:40:52,000 --> 00:40:55,000 Det siger, at jeg kan wire denne egenskab op 760 00:40:55,000 --> 00:40:59,000 til et tekstfelt i min UI. 761 00:40:59,000 --> 00:41:03,000 Nu når jeg klikker på denne jeg kan begynde at skrive. 762 00:41:03,000 --> 00:41:06,000 Nu, hvis jeg klikker på knappen Udført dette vil fyre 763 00:41:06,000 --> 00:41:08,000 en begivenhed, som jeg nu kan reagere på. 764 00:41:08,000 --> 00:41:10,000 Ingen hændelseshandlere. 765 00:41:10,000 --> 00:41:13,000 Det er sådan jeg bare reagerede på det gjort knap. 766 00:41:13,000 --> 00:41:15,000 Give mening? 767 00:41:15,000 --> 00:41:20,000 >> Dette er ikke et design mønster, at-du måske ikke nogensinde finde dig selv 768 00:41:20,000 --> 00:41:23,000 oprette din egen protokol, men bare vide, at nogle 769 00:41:23,000 --> 00:41:27,000 forskellige iOS-komponenter registrere begivenheder på forskellige måder. 770 00:41:27,000 --> 00:41:29,000 Knapper, for eksempel, bruge disse IBActions. 771 00:41:29,000 --> 00:41:32,000 Tekstfelter, på den anden side, går er at bruge delegerede. 772 00:41:32,000 --> 00:41:36,000 Vi kan se, og du kan se alt dette på indersiden af ​​dokumentationen. 773 00:41:36,000 --> 00:41:41,000 Af den måde, er der faktisk et ton af UI ting indbygget i iOS for dig, 774 00:41:41,000 --> 00:41:46,000 så for eksempel, den måde, jeg gjorde, at sige gjort nederst til højre 775 00:41:46,000 --> 00:41:48,000 er jeg valgt dette tekstfelt. 776 00:41:48,000 --> 00:41:50,000 Jeg kom herover. 777 00:41:50,000 --> 00:41:53,000 Jeg rullet ned lidt at vende nøgle, 778 00:41:53,000 --> 00:41:56,000 og jeg kan faktisk gøre dette til en hel masse ting, ligesom hvis jeg ønsker at sige 779 00:41:56,000 --> 00:42:00,000 nødopkald i stedet jeg kan gøre det, som er helt tilfældigt, 780 00:42:00,000 --> 00:42:02,000 og jeg ved ikke, hvorfor der er en indbygget alarmopkald knap, 781 00:42:02,000 --> 00:42:06,000 men der, det siger nødopkald i virkelig små bogstaver. 782 00:42:06,000 --> 00:42:08,000 Værsgo. 783 00:42:08,000 --> 00:42:12,000 >> Absolut udforske alle disse forskellige muligheder i iOS. 784 00:42:12,000 --> 00:42:14,000 Eventuelle spørgsmål vedrørende delegerede? 785 00:42:14,000 --> 00:42:18,000 Igen, bare en interessant design mønster, som du bør være opmærksom på. 786 00:42:18,000 --> 00:42:22,000 Okay, lad os næste tage et kig på tabelvisninger. 787 00:42:22,000 --> 00:42:26,000 En tabelvisning er dybest set denne liste af emner, der er overalt i iOS. 788 00:42:26,000 --> 00:42:29,000 Når du bladre gennem alle dine kontaktpersoner, du ser på 789 00:42:29,000 --> 00:42:34,000 Indstillingssiden, og den slags liste over ting, kaldes en tabelvisning. 790 00:42:34,000 --> 00:42:37,000 Implementering af en tabelvisning i iOS er ret enkel. 791 00:42:37,000 --> 00:42:41,000 I stedet for at lave en klasse, der nedstammer fra det UIViewController 792 00:42:41,000 --> 00:42:44,000 ligesom vi har gjort før vi simpelthen nødt til at sige i stedet for 793 00:42:44,000 --> 00:42:46,000 alt, hvad en UIViewController gør jeg ønsker at gøre, 794 00:42:46,000 --> 00:42:50,000 Jeg siger alt en UITableViewController gør jeg ønsker at gøre, 795 00:42:50,000 --> 00:42:54,000 så der blot tilføjer nogle ekstra ting, der er fuldstændig gjort for os. 796 00:42:54,000 --> 00:42:58,000 Vi skal gøre meget lidt for stort set udfylde de tomme felter inde i tabellen. 797 00:42:58,000 --> 00:43:02,000 >> For at vise en tabel jeg har brug for at besvare nogle spørgsmål. 798 00:43:02,000 --> 00:43:06,000 Det første spørgsmål, jeg skal besvare, er, hvor mange sektioner er i tabellen? 799 00:43:06,000 --> 00:43:08,000 Når du bladre gennem dine kontakter app du vil opdage, at det er lidt 800 00:43:08,000 --> 00:43:12,000 arrangeret af As, så har du den Bs, og du har den lille sub header. 801 00:43:12,000 --> 00:43:14,000 Hver af disse kaldes en sektion. 802 00:43:14,000 --> 00:43:16,000 Du måske eller måske ikke brug for disse. 803 00:43:16,000 --> 00:43:19,000 Den første ting du skal gøre, er at implementere en metode 804 00:43:19,000 --> 00:43:22,000 kaldet tableView: numberOfSectionsInTableView. 805 00:43:22,000 --> 00:43:25,000 Det er simpelthen returnerer hvor mange sektioner du har, 806 00:43:25,000 --> 00:43:29,000 så dette kunne sige returnere en, hvis du har en stor tabel visning. 807 00:43:29,000 --> 00:43:33,000 Det næste spørgsmål, som iOS brug for at vide er, hvor mange rækker har du? 808 00:43:33,000 --> 00:43:36,000 For eksempel, du bladre gennem en tabelvisning. 809 00:43:36,000 --> 00:43:39,000 Du har et fast antal sange du kigger på eller et fast antal kontakter. 810 00:43:39,000 --> 00:43:41,000 Hvis du er mig naturligvis ikke, at mange, 811 00:43:41,000 --> 00:43:44,000 og så det er hvordan iOS ved hvor mange celler til at vise. 812 00:43:44,000 --> 00:43:46,000 >> Igen kan dette sige noget afkast 3. 813 00:43:46,000 --> 00:43:49,000 Min tabelvisning har 3 rækker. 814 00:43:49,000 --> 00:43:52,000 Endelig iOS brug for at vide, hvad hver enkelt celle ser ud, 815 00:43:52,000 --> 00:43:54,000 så hvad det er faktisk kommer til at gøre, er at kalde denne metode hernede, 816 00:43:54,000 --> 00:43:57,000 denne tableView: cellForRowAtIndexPath. 817 00:43:57,000 --> 00:44:01,000 Det kommer til at kalde denne metode på hver enkelt celle inde i tabellen. 818 00:44:01,000 --> 00:44:03,000 Hvordan det, hvor mange gange at kalde det? 819 00:44:03,000 --> 00:44:06,000 Tja, du fortalte det inde i antallet af rækker i sektionen. 820 00:44:06,000 --> 00:44:08,000 Vi vil kalde dette på hver af vores celler, 821 00:44:08,000 --> 00:44:11,000 og inde i dette er, hvor du rent faktisk kan gøre ting som 822 00:44:11,000 --> 00:44:16,000 indstille teksten eller fortælle dig, hvad den lille blå knap på højre side gør. 823 00:44:16,000 --> 00:44:19,000 Mønstret for at få disse celler, vi kommer til at bruge denne metode 824 00:44:19,000 --> 00:44:22,000 kaldet dequeueReusableCellWithIdentifier. 825 00:44:22,000 --> 00:44:29,000 >> Objective-C er faktisk meget kendt for den latterlige længden af ​​deres metode navne, 826 00:44:29,000 --> 00:44:32,000 og det er virkelig en dejlig sag i punkt eksempel. 827 00:44:32,000 --> 00:44:37,000 Hvad denne metode gør, er det bare siger, jeg vil have dig til at give mig 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 noget lignende 100.000 sange på din iPod 830 00:44:41,000 --> 00:44:45,000 hvad iOS ikke ønsker at gøre, er tildele 100.000 celler, 831 00:44:45,000 --> 00:44:48,000 fordi hvis du er på toppen af ​​din liste, har du virkelig brug for at allokere hukommelse 832 00:44:48,000 --> 00:44:51,000 for den celle, der er 99.000 rækker ned? 833 00:44:51,000 --> 00:44:55,000 Nej, for som du ruller du kan slags tildele som du går sammen. 834 00:44:55,000 --> 00:44:57,000 Dette er gjort for dig. 835 00:44:57,000 --> 00:44:59,000 Du behøver ikke at bekymre dig om alt det dumme ydeevne stuff. 836 00:44:59,000 --> 00:45:02,000 Alt du siger er du kalder denne metode dequeueReusableCellWithIdentifier, 837 00:45:02,000 --> 00:45:06,000 og det siger, okay, hvis du har brug for jeg har tænkt mig at oprette en ny celle til dig. 838 00:45:06,000 --> 00:45:09,000 >> Men hvis du er i bunden af ​​tabellen, og du har allerede afsat nogle celler 839 00:45:09,000 --> 00:45:12,000 øverst i tabellen, du virkelig ikke vil få brug for når som helst snart 840 00:45:12,000 --> 00:45:15,000 Jeg har tænkt mig at give dig en af ​​dem tilbage i stedet for at tildele et nyt, 841 00:45:15,000 --> 00:45:17,000 og så dette er en fin forestilling bekymring. 842 00:45:17,000 --> 00:45:21,000 Du behøver ikke at afsætte de celler selv. 843 00:45:21,000 --> 00:45:23,000 Det kommer til at give dig tilbage en celle. 844 00:45:23,000 --> 00:45:25,000 Det kommer til at vende tilbage til dig en celle objekt. 845 00:45:25,000 --> 00:45:28,000 Når du har den celle objekt, du kan gøre ting til det. 846 00:45:28,000 --> 00:45:32,000 Du kan indstille teksten i cellen med denne egenskab kaldes tekstetiket. 847 00:45:32,000 --> 00:45:36,000 Du kan tilføje, at pilen til højre eller nogle andre tilfældige ting 848 00:45:36,000 --> 00:45:41,000 med denne anden ejendom kaldet accessoryType, og så videre og så videre. 849 00:45:41,000 --> 00:45:46,000 >> Lad os tage et kig på faktisk at gennemføre en tabelvisning nu. 850 00:45:46,000 --> 00:45:49,000 Da jeg skabte dette projekt 851 00:45:49,000 --> 00:45:53,000 snarere end at sige en enkelt visning applikation jeg faktisk kom herover 852 00:45:53,000 --> 00:45:57,000 til master-detail ansøgning, og så dybest set svarer det til den mail app 853 00:45:57,000 --> 00:46:01,000 på iPad med tabelvisningen til venstre og derefter indholdet til højre. 854 00:46:01,000 --> 00:46:07,000 På iPod eller iPhone dette vil svare til en enkelt tabel visning. 855 00:46:07,000 --> 00:46:10,000 Det er der, jeg fik min starter kode. 856 00:46:10,000 --> 00:46:13,000 >> Lad os først tage et kig på storyboard. 857 00:46:13,000 --> 00:46:15,000 Alt dette blev gjort for mig, dybest set skabt. 858 00:46:15,000 --> 00:46:18,000 Denne navigationslinjen viste mig, hvad et eksempel celle kunne se ud, 859 00:46:18,000 --> 00:46:22,000 og jeg kan dobbeltklikke på dette, ændre titlen. 860 00:46:22,000 --> 00:46:25,000 Alle andre UI bekymringer, som jeg kan klare det. 861 00:46:25,000 --> 00:46:27,000 Den header fil ser virkelig simpelt. 862 00:46:27,000 --> 00:46:30,000 Snarere end at sige dette er UIViewController vi nu siger dette er et 863 00:46:30,000 --> 00:46:35,000 TableViewController, så vi ved, at vi ønsker at kalde alle disse bordet metoder. 864 00:46:35,000 --> 00:46:38,000 Næste jeg ønsker at oprette en ejendom, der kommer til at repræsentere 865 00:46:38,000 --> 00:46:40,000 de ting inde i mit bord. 866 00:46:40,000 --> 00:46:43,000 Denne tabel vil vilkårligt vise 867 00:46:43,000 --> 00:46:46,000 en liste over frugt, og så jeg er nødt til at skabe nogle række 868 00:46:46,000 --> 00:46:49,000 hvor jeg kan indsætte frugt. 869 00:46:49,000 --> 00:46:52,000 Inde i mit gennemførelsen fil den første ting jeg ønsker at gøre 870 00:46:52,000 --> 00:46:55,000 er jeg vil være sikker på jeg initialisere denne array. 871 00:46:55,000 --> 00:46:58,000 >> Jeg sagde Alloc init, skabte min frugt array, 872 00:46:58,000 --> 00:47:03,000 og jeg tilsætning af 4 ting til det, hvoraf den ene er noget mere vanskelig end de andre 3. 873 00:47:03,000 --> 00:47:06,000 Og nu har jeg en vifte af størrelse 4. 874 00:47:06,000 --> 00:47:08,000 Vi ryster det op i CS50. 875 00:47:08,000 --> 00:47:11,000 Jeg har nu en bred vifte af størrelse 4. 876 00:47:11,000 --> 00:47:13,000 Nu jeg har tænkt mig at begynde at besvare disse spørgsmål, og faktisk, 877 00:47:13,000 --> 00:47:16,000 når jeg oprettet denne app alt dette blev allerede gjort for mig. 878 00:47:16,000 --> 00:47:19,000 Jeg behøvede ikke at skrive ud i antallet af sektioner i tabelvisning. 879 00:47:19,000 --> 00:47:22,000 Det var der allerede, og jeg udfylde de tomme felter. 880 00:47:22,000 --> 00:47:24,000 Hvor mange sektioner 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 rækker har jeg? 883 00:47:28,000 --> 00:47:31,000 Tja, jeg har én række for hver frugt, så denne tælling 884 00:47:31,000 --> 00:47:34,000 er en egenskab ved enhver array, der siger hvor stor er den? 885 00:47:34,000 --> 00:47:36,000 Det er sådan mange rækker jeg har. 886 00:47:36,000 --> 00:47:42,000 Endelig vil jeg nødt til at sige, hvad betyder hver celle ud? 887 00:47:42,000 --> 00:47:46,000 Jeg har tænkt mig at sige dequeueReusableCellWithIdentifier. 888 00:47:46,000 --> 00:47:48,000 >> Igen var dette allerede skrevet til mig. 889 00:47:48,000 --> 00:47:51,000 Jeg behøvede ikke at gøre det selv, og jeg ønsker at komme tilbage 890 00:47:51,000 --> 00:47:54,000 denne celle på dette sted. 891 00:47:54,000 --> 00:47:57,000 Husk, at vi kalder den samme metode på hver enkelt celle, 892 00:47:57,000 --> 00:48:01,000 og dette argument her, denne indexPath argument, 893 00:48:01,000 --> 00:48:03,000 siger, hvad rækken, jeg er i. 894 00:48:03,000 --> 00:48:05,000 Hvis jeg siger indexPath.row hernede 895 00:48:05,000 --> 00:48:09,000 dette vil være 0, vil det være 1, så vil det være 2, og det er så jeg ved 896 00:48:09,000 --> 00:48:11,000 hvilken celle Jeg er i øjeblikket viser. 897 00:48:11,000 --> 00:48:15,000 Jeg ønsker at indstille teksten i cellen ved hjælp af denne TextLabel ejendom 898 00:48:15,000 --> 00:48:19,000 at gå ind i mit frugt array og få 899 00:48:19,000 --> 00:48:21,000 objektet, der svarer til hver række. 900 00:48:21,000 --> 00:48:24,000 Hvis dette er en streng, jeg sætter nu 901 00:48:24,000 --> 00:48:28,000 teksten ejendom til en streng. 902 00:48:28,000 --> 00:48:30,000 Jeg kan gøre en anden ting. 903 00:48:30,000 --> 00:48:32,000 Jeg kan også registrere en event handler på hver af cellerne, 904 00:48:32,000 --> 00:48:35,000 så når jeg trykker hver af disse celler 905 00:48:35,000 --> 00:48:39,000 denne didSelectRowAtIndexPath, vil dette blive kaldt for mig, 906 00:48:39,000 --> 00:48:42,000 så blot ved at definere dette jeg kan nu håndtere, hvad der sker 907 00:48:42,000 --> 00:48:46,000 når du trykker på en celle, og igen, vi passerer i hvilken celle blev aflyttet 908 00:48:46,000 --> 00:48:50,000 således at vi kan genbruge den samme event handler for alle vores celler. 909 00:48:50,000 --> 00:48:53,000 >> Igen, det er noget iOS gør for mig. 910 00:48:53,000 --> 00:48:55,000 Lad os vise en anden irriterende popup 911 00:48:55,000 --> 00:48:59,000 der simpelthen siger du plukket noget, hvor at noget 912 00:48:59,000 --> 00:49:04,000 bliver rækken objekt. 913 00:49:04,000 --> 00:49:10,000 Når jeg kører denne, vil jeg have denne nice tabelvisning 914 00:49:10,000 --> 00:49:14,000 med én række for hver af disse frugter, og hvis jeg trykker på en 915 00:49:14,000 --> 00:49:16,000 det fortæller mig, hvad der skete. 916 00:49:16,000 --> 00:49:21,000 Give mening? 917 00:49:21,000 --> 00:49:24,000 Lad os bygge en lidt mere kompleks af en app, 918 00:49:24,000 --> 00:49:28,000 så meget som at klikke dig plukket tomat er. 919 00:49:28,000 --> 00:49:31,000 Den pæne del om storyboarding 920 00:49:31,000 --> 00:49:35,000 er det ikke kun kommer til at hjælpe os med at designe skærme individuelt, 921 00:49:35,000 --> 00:49:38,000 det er også vil hjælpe os med at binde sammen hele vores app, 922 00:49:38,000 --> 00:49:42,000 så den endelige app vi vil være bygning er denne nice sportsnyheder læser, 923 00:49:42,000 --> 00:49:45,000 og så det kommer til at have flere skærme, og så jeg kan faktisk repræsentere 924 00:49:45,000 --> 00:49:48,000 hver af disse mange skærme på storyboard, 925 00:49:48,000 --> 00:49:52,000 og jeg kan zoome ud og se min app fra et højt niveau. 926 00:49:52,000 --> 00:49:55,000 >> For at oprette et nyt element inde i mit storyboard 927 00:49:55,000 --> 00:49:59,000 det er meget simpelt inde i Interface Builder. 928 00:49:59,000 --> 00:50:01,000 Hvis jeg ønsker at tilføje en anden skærm til dette, for eksempel, 929 00:50:01,000 --> 00:50:06,000 Jeg kan først zoome ud med pinch zoom, at Apple elsker så meget, 930 00:50:06,000 --> 00:50:09,000 og hernede før jeg søge efter en knap 931 00:50:09,000 --> 00:50:12,000 og jeg trække og slippe en knap 932 00:50:12,000 --> 00:50:15,000 hvis jeg ønsker at oprette en ny skærm jeg kan faktisk bare trække og slippe 933 00:50:15,000 --> 00:50:19,000 en hel visning controller, så hvis jeg vælger dette, skal du trække det over her, 934 00:50:19,000 --> 00:50:23,000 hey, der er en anden skærm, og så nu bruger denne samme storyboard fil 935 00:50:23,000 --> 00:50:26,000 Jeg kan have alle de skærme inde i min app, og jeg kan zoome ud 936 00:50:26,000 --> 00:50:28,000 og se, hvordan de interagerer. 937 00:50:28,000 --> 00:50:32,000 Disse vil ikke interagere endnu. 938 00:50:32,000 --> 00:50:36,000 Den måde, hvorpå disse 2 skærme interagerer er du definere relationer. 939 00:50:36,000 --> 00:50:39,000 Du kan stort set sige dette skærmbillede, når du trykker på denne knap, 940 00:50:39,000 --> 00:50:42,000 Jeg vil have dig til at glide over til denne nye skærm. 941 00:50:42,000 --> 00:50:44,000 Det betyder, at der er denne form for relation mellem 942 00:50:44,000 --> 00:50:46,000  det første skærmbillede, og den anden skærm. 943 00:50:46,000 --> 00:50:49,000 Du har dybest set en pil fra denne knap til den anden skærm 944 00:50:49,000 --> 00:50:53,000 at sige, at når du trykker på denne knap, er hvor jeg vil hen. 945 00:50:53,000 --> 00:50:57,000 Ligesom vi kontrol klikkede og slæbt for at definere disse forretninger 946 00:50:57,000 --> 00:51:01,000 vi vil gøre det samme for at definere disse segues. 947 00:51:01,000 --> 00:51:05,000 >> Vi vil se et eksempel for det, og før vi faktisk overgang 948 00:51:05,000 --> 00:51:08,000 fra den ene skærm til den anden iOS er rart nok at kalde denne metode 949 00:51:08,000 --> 00:51:11,000 kaldet prepareForSegue, og det er her, vi kan begynde 950 00:51:11,000 --> 00:51:14,000 afsendelse af data fra én app til en anden. 951 00:51:14,000 --> 00:51:17,000 I det eksempel, vi er ved at se på det vil som udgangspunkt give os 952 00:51:17,000 --> 00:51:20,000 at filtrere baseball hold af ligaer og divisioner. 953 00:51:20,000 --> 00:51:23,000 Når jeg vælger en liga, for eksempel, vil jeg overgang 954 00:51:23,000 --> 00:51:25,000 til min næste skærm, hvor jeg kan vise alle divisionerne 955 00:51:25,000 --> 00:51:27,000 i denne liga eller alle de forskellige teams. 956 00:51:27,000 --> 00:51:31,000 Jeg er nødt til at sende til denne skærm hvilke hold, du skal vise. 957 00:51:31,000 --> 00:51:35,000 For at gøre, at jeg har tænkt mig at drage fordel af denne metode her. 958 00:51:35,000 --> 00:51:39,000 >> Endelig bare et tilfældigt sted på iOS. 959 00:51:39,000 --> 00:51:41,000 Hvis du ønsker at gemme data der er denne ting kaldet centrale data, 960 00:51:41,000 --> 00:51:44,000 der er faktisk lidt kompliceret at arbejde med. 961 00:51:44,000 --> 00:51:47,000 Du kan også bruge SQL til at gemme data, 962 00:51:47,000 --> 00:51:51,000 , som igen er rart men slags på de mere komplicerede side at arbejde med, 963 00:51:51,000 --> 00:51:55,000 men iOS understøtter også disse virkelig cool ting kaldet ejendom lister, 964 00:51:55,000 --> 00:52:00,000 og en ejendom liste er bare en fil, der repræsenterer centrale værdipar. 965 00:52:00,000 --> 00:52:03,000 Du definerer en liste af nøgler, og du siger denne tast bliver et array. 966 00:52:03,000 --> 00:52:06,000 Denne nøgle vil være en streng, og dybest set noget du kan gøre 967 00:52:06,000 --> 00:52:10,000 i JSON kan du gøre inde i en ejendom liste, 968 00:52:10,000 --> 00:52:14,000 og så dette virkelig pænt giver os mulighed for at arbejde med nogle data. 969 00:52:14,000 --> 00:52:18,000 For eksempel har jeg denne Teams.plist at jeg har oprettet. 970 00:52:18,000 --> 00:52:22,000 Jeg har oprettet en ny plist fil, og jeg kan bore ned. 971 00:52:22,000 --> 00:52:26,000 Dette er en ordbog, er dette en ordbog, er disse strenge, 972 00:52:26,000 --> 00:52:30,000 og så dette er en pæn grafisk repræsentation af en JSON dokument 973 00:52:30,000 --> 00:52:33,000 eller bare en række centrale værdi par, 974 00:52:33,000 --> 00:52:37,000 og så dette er de data, som jeg vil arbejde med indersiden af ​​min app. 975 00:52:37,000 --> 00:52:40,000 >> Lad os først komme herover. Vi har en masse flere filer nu. 976 00:52:40,000 --> 00:52:44,000 Men lad os først komme herover til storyboardet. 977 00:52:44,000 --> 00:52:48,000 Storyboard her-hvis jeg kan zoome ud- 978 00:52:48,000 --> 00:52:51,000 kan vi nu se, at dette er strømmen af ​​min app. 979 00:52:51,000 --> 00:52:53,000 Jeg først at gå til at starte på denne skærm. 980 00:52:53,000 --> 00:52:55,000 Jeg har tænkt mig at bore ned til denne skærm, 981 00:52:55,000 --> 00:52:58,000 og jeg har tænkt mig at bore ned til denne skærm, og vi kan se her, at hvis jeg slags 982 00:52:58,000 --> 00:53:04,000 flytte en af ​​disse omkring vi har disse pile går herfra til her, 983 00:53:04,000 --> 00:53:08,000 og den måde jeg definere, at pilen var, hvis jeg zoome ind en lille smule, 984 00:53:08,000 --> 00:53:12,000 og hvis jeg kommer over til dette synspunkt controller, 985 00:53:12,000 --> 00:53:16,000 og her er en celle, og jeg vil gerne sige, at når du trykker på en celle 986 00:53:16,000 --> 00:53:18,000 Jeg vil have dig til at glide over til en anden skærm. 987 00:53:18,000 --> 00:53:21,000 Jeg kan simpelthen holde kontrol, 988 00:53:21,000 --> 00:53:26,000 rulle over en lille smule, hold, skal du trække denne celle over og give slip. 989 00:53:26,000 --> 00:53:30,000 >> Og herovre vi siger, hvad der er den overgang, du vil bruge? 990 00:53:30,000 --> 00:53:32,000 Ønsker du at bruge denne slide ting, der kaldes push? 991 00:53:32,000 --> 00:53:34,000 Ønsker du at glide op fra bunden? 992 00:53:34,000 --> 00:53:36,000 Det kaldes modal. 993 00:53:36,000 --> 00:53:40,000 Og når jeg klikker på en af ​​disse, går det at tegne denne pil for mig, 994 00:53:40,000 --> 00:53:44,000 og det betyder, at jeg faktisk har håndteret hvad der sker når jeg trykker på denne knap grafisk. 995 00:53:44,000 --> 00:53:48,000 Jeg skrev ikke noget kode til rent faktisk at glide fra den ene skærm til den næste. 996 00:53:48,000 --> 00:53:51,000 Jeg definerede denne visuelt inde i Interface Builder. 997 00:53:51,000 --> 00:53:55,000 Hvis jeg klikker på denne pil, kan vi se, at jeg gav denne ting et navn. 998 00:53:55,000 --> 00:53:59,000 Jeg kaldte det showDivisions, og det er, så jeg kan kende 999 00:53:59,000 --> 00:54:03,000 hvilken overgang er ved at opstå, og vi vil se hvorfor i bare et sekund. 1000 00:54:03,000 --> 00:54:06,000 Det er sådan jeg har kablet op til de forskellige skærme i min app. 1001 00:54:06,000 --> 00:54:09,000 Hvis dette var en knap, for eksempel i stedet for en tabel visning, 1002 00:54:09,000 --> 00:54:11,000 Jeg kunne styre klikke på knappen, trække over til den næste skærm, 1003 00:54:11,000 --> 00:54:16,000 og det er sådan jeg kan gøre navigationen på den måde. 1004 00:54:16,000 --> 00:54:19,000 >> Virkelig hurtigt, hvis vi kommer ind i MasterViewController, 1005 00:54:19,000 --> 00:54:22,000 igen, vi simpelthen kommer til at definere en liste over ting 1006 00:54:22,000 --> 00:54:26,000 der vil blive vist i tabellen visning. 1007 00:54:26,000 --> 00:54:29,000 Her Jeg siger jeg vil have dig til at tage det plist fil, 1008 00:54:29,000 --> 00:54:32,000 og jeg vil have dig til at lægge det op i en ordbog, 1009 00:54:32,000 --> 00:54:35,000 og når du har at ordbogen, vil jeg besvare de samme spørgsmål igen. 1010 00:54:35,000 --> 00:54:37,000 Her er antallet af sektioner. 1011 00:54:37,000 --> 00:54:41,000 Den ene, der er én række for hver liga, og teksten af ​​hver celle 1012 00:54:41,000 --> 00:54:46,000 være enten den første, den første liga, den anden liga, og så videre. 1013 00:54:46,000 --> 00:54:51,000 Endelig vil jeg benytte denne metode, som vi lige har set kaldet prepareForSegue, 1014 00:54:51,000 --> 00:54:54,000 og det er den metode, der kommer til at blive fyret, når jeg klikker 1015 00:54:54,000 --> 00:54:57,000 på en af ​​disse rækker, og således aktivere denne overgang 1016 00:54:57,000 --> 00:54:59,000 at jeg er oprettet med pilene. 1017 00:54:59,000 --> 00:55:02,000 Det siger, at jeg kan have flere 1018 00:55:02,000 --> 00:55:05,000 relationer fra den ene skærm til den anden. 1019 00:55:05,000 --> 00:55:08,000 Hvis jeg har 2 knapper, og hver knap tager dig til en anden skærm 1020 00:55:08,000 --> 00:55:10,000 Jeg har tænkt mig at have 2 segues, 1 for hver knap. 1021 00:55:10,000 --> 00:55:14,000 Men denne prepareForSegue er igen vil blive genanvendt 1022 00:55:14,000 --> 00:55:17,000 for hver af de forskellige relationer, betyder så, at jeg har brug for en måde 1023 00:55:17,000 --> 00:55:21,000 at identificere, hvis du trykker på den første knap, eller du trykker på den anden knap. 1024 00:55:21,000 --> 00:55:25,000 >> Husk da jeg gav det Segue et navn, dette showDivisions, 1025 00:55:25,000 --> 00:55:29,000 det er sådan jeg ved nu, at dette er Segue der blev aktiveret. 1026 00:55:29,000 --> 00:55:32,000 Alt hvad jeg ønsker at gøre, er jeg ønsker at sige 1027 00:55:32,000 --> 00:55:35,000 Jeg ønsker at finde ud af hvad jeg bare ramt, 1028 00:55:35,000 --> 00:55:38,000 og så for at få det, kan jeg sige, at jeg ønsker, at indexPath for den valgte række, 1029 00:55:38,000 --> 00:55:42,000 huske indexPath bare siger, hvor jeg bare klikkede, 1030 00:55:42,000 --> 00:55:47,000 og så vil jeg sige, at jeg ønsker at finde ud af, hvor jeg skal hen. 1031 00:55:47,000 --> 00:55:50,000 Denne destinationViewController, det er en egenskab af Segue. 1032 00:55:50,000 --> 00:55:53,000 Det er skærmen jeg har tænkt mig at, 1033 00:55:53,000 --> 00:55:56,000 så jeg ved, at skærmen vil jeg kaldes DivisionsViewController 1034 00:55:56,000 --> 00:55:59,000 fordi jeg oprettede denne klasse, 1035 00:55:59,000 --> 00:56:02,000 og så nu, hvis jeg siger d.divisions 1036 00:56:02,000 --> 00:56:06,000 Jeg sætter nu en ejendom af den opfattelse controller jeg er ved at gå til. 1037 00:56:06,000 --> 00:56:10,000 Dette er, hvordan jeg sender data fra den ene skærm til den anden skærm. 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 der i. h-filen 1040 00:56:16,000 --> 00:56:20,000 der er, at ejendommen divisioner, og det er hvad jeg dybest set befolker, 1041 00:56:20,000 --> 00:56:25,000 så det er sådan jeg ved, at jeg viser de divisioner, der svarer til 1042 00:56:25,000 --> 00:56:28,000 ligaen, at jeg klikkede, og igen, 1043 00:56:28,000 --> 00:56:31,000 den faktiske tabelvisningen ser temmelig meget den samme, blot at besvare dem 1044 00:56:31,000 --> 00:56:34,000 3 simple spørgsmål samt identificere 1045 00:56:34,000 --> 00:56:37,000 hvad der sker, når du flytter til det næste skærmbillede. 1046 00:56:37,000 --> 00:56:40,000 Blot et par andre ting her. 1047 00:56:40,000 --> 00:56:43,000 Du bemærker øverst her, at i stedet for at sige # include 1048 00:56:43,000 --> 00:56:45,000 Jeg siger nu # importere. 1049 00:56:45,000 --> 00:56:47,000 Dette er blot en Objective-C ting. 1050 00:56:47,000 --> 00:56:52,000 Importen er dybest set en pænere version af indbefatter, 1051 00:56:52,000 --> 00:56:57,000 og for eksempel, har vi brug for at vide, hvad denne klasse er, 1052 00:56:57,000 --> 00:57:00,000 så jeg kan ikke bare sige DivisionsViewController. 1053 00:57:00,000 --> 00:57:05,000 Hvis vi ikke hashtag standardio.c inde i vores. C. fil 1054 00:57:05,000 --> 00:57:07,000 compileren havde ingen idé om, hvad printf var. 1055 00:57:07,000 --> 00:57:12,000 Tilsvarende, hvis jeg ikke importerer den DivisionsViewController 1056 00:57:12,000 --> 00:57:16,000 compileren har virkelig ingen idé om, hvad en DivisionsViewController er. 1057 00:57:16,000 --> 00:57:19,000 Bare sørg for, at indersiden af ​​dine forskellige. M filer du sørge for at importere 1058 00:57:19,000 --> 00:57:25,000 de tilsvarende. H filer, så compileren ved, hvad der foregår. 1059 00:57:25,000 --> 00:57:31,000 >> Endelig, hvad Apple i sidste ende gør, er at vise noget data fra en web visning, 1060 00:57:31,000 --> 00:57:35,000 og så en web visning er et objekt, som du kan integrere 1061 00:57:35,000 --> 00:57:37,000 en lille webbrowser indersiden af ​​din app. 1062 00:57:37,000 --> 00:57:40,000 Alt du skal gøre er at levere en URL til din webbrowser, 1063 00:57:40,000 --> 00:57:43,000 så jeg ønsker at gå til mlb.mlb.com, 1064 00:57:43,000 --> 00:57:46,000 og det er sådan jeg kan få adgang til hjemmesiden for hvert hold, 1065 00:57:46,000 --> 00:57:49,000 og så ved at passere i denne URL 1066 00:57:49,000 --> 00:57:52,000 web view kan vise dette for mig, og jeg kan browse rundt, 1067 00:57:52,000 --> 00:58:01,000 og simulator er i brug af det ene. 1068 00:58:01,000 --> 00:58:03,000 Nu dette kom fra min plist. 1069 00:58:03,000 --> 00:58:07,000 Hvis jeg klikker på denne dette også kom fra min plist, og denne glidende blev håndteret 1070 00:58:07,000 --> 00:58:09,000 ved at definere disse segues. 1071 00:58:09,000 --> 00:58:12,000 Jeg klikker på denne og en mere, 1072 00:58:12,000 --> 00:58:15,000 og nu her er mit UIWebView, så ligesom det 1073 00:58:15,000 --> 00:58:19,000 Her er hjemmesiden for den webadresse, som jeg netop indlejret, 1074 00:58:19,000 --> 00:58:21,000 og jeg behøvede ikke at håndtere noget vanvittigt. 1075 00:58:21,000 --> 00:58:24,000 Dette er hvordan du får vist en webside. 1076 00:58:24,000 --> 00:58:27,000 Ting som dette tilbage-knap her er også givet til mig 1077 00:58:27,000 --> 00:58:33,000 helt gratis, fordi jeg har defineret disse relationer ved hjælp segues. 1078 00:58:33,000 --> 00:58:37,000 >> Eventuelle spørgsmål? Yeah. 1079 00:58:37,000 --> 00:58:40,000 [Student] Så når du bruger alloc, du aldrig behøver at fri noget? 1080 00:58:40,000 --> 00:58:43,000 Præcis, når du ringer Alloc og init du behøver ikke at befri dem. 1081 00:58:43,000 --> 00:58:46,000 IOS kommer til at håndtere alt dette for dig. 1082 00:58:46,000 --> 00:58:51,000 Det er vidunderligt, og du ikke bryde nogen regler. Yeah. 1083 00:58:51,000 --> 00:58:54,000 [Student] Hvis du skulle til at omfatte flere hold, der kunne passe på skærmen, 1084 00:58:54,000 --> 00:58:58,000 vil det automatisk have en rulle mulighed, eller er det noget du har brug for at tilføje? 1085 00:58:58,000 --> 00:59:01,000 Præcis, hvis jeg havde flere hold, for eksempel, vil det automatisk håndtere 1086 00:59:01,000 --> 00:59:04,000 rulningen for mig, og alle de præstationer bekymringer 1087 00:59:04,000 --> 00:59:08,000 med den enorme bord håndteres også helt for mig. 1088 00:59:08,000 --> 00:59:11,000 >> Andre spørgsmål? 1089 00:59:11,000 --> 00:59:13,000 Alt dette kodeks vil blive udstationeret. 1090 00:59:13,000 --> 00:59:16,000 Vi slags tilsløret lidt af de mere mindre detaljer, 1091 00:59:16,000 --> 00:59:19,000 men ting som at sætte nogle egenskaber til web visning 1092 00:59:19,000 --> 00:59:22,000 er bare ting, som du kan få ved at browse Apples dokumentation, 1093 00:59:22,000 --> 00:59:24,000 der er virkelig, virkelig pænt lagt ud. 1094 00:59:24,000 --> 00:59:27,000 De har en masse eksempler på apps og eksempel kutymer 1095 00:59:27,000 --> 00:59:34,000 af forskellige API'er, gennemlæse så absolut dem, hvis du kan. 1096 00:59:34,000 --> 00:59:36,000 Blot nogle nyttige links, du måske ønsker at tage et kig på. 1097 00:59:36,000 --> 00:59:38,000 Disse er nogle praktiske dokumentation guider. 1098 00:59:38,000 --> 00:59:41,000 De webadresser er massiv, så de er afkortet. 1099 00:59:41,000 --> 00:59:44,000 Denne første er hele biblioteket af dokumentation. 1100 00:59:44,000 --> 00:59:46,000 Der er lidt søgning barer, så hvis du begynder at skrive knap 1101 00:59:46,000 --> 00:59:50,000 vil det begynde at give dig alle oplysninger om alle de ting, du kan gøre med en knap. 1102 00:59:50,000 --> 00:59:53,000 Jeg har også inkluderet den Table View Programming Guide. 1103 00:59:53,000 --> 00:59:56,000 Det håndterer tabelvisninger i langt flere detaljer, 1104 00:59:56,000 --> 01:00:00,000 hvordan man gør ting som dynamisk tilføje celler eller redigere celler eller fjerne dem. 1105 01:00:00,000 --> 01:00:02,000 >> Der er masser af eksempler på apps fra Apple, som vil vise dig, hvordan du gør det, 1106 01:00:02,000 --> 01:00:05,000 og endelig den sidste er den menneskelige grænseflade retningslinjerne, 1107 01:00:05,000 --> 01:00:09,000 og det er dybest set en diskussion af UI komponenter, 1108 01:00:09,000 --> 01:00:12,000 ting som ikke gør en knap, der er 4 pixels med 4 pixels. 1109 01:00:12,000 --> 01:00:15,000 Det er en dårlig idé, og andre ting, som Apple ønsker dig at gøre 1110 01:00:15,000 --> 01:00:18,000 at fremme godt design. 1111 01:00:18,000 --> 01:00:23,000 >> Eventuelle sidste spørgsmål, før vi slutter op? 1112 01:00:23,000 --> 01:00:27,000 Okay, helt sikkert velkommen til-Vi kommer til at have særlige etiketter på Diskuter. 1113 01:00:27,000 --> 01:00:30,000 Vi vil have en iOS en, så absolut velkommen til at udnytte det. 1114 01:00:30,000 --> 01:00:34,000 Hvis du ønsker at arbejde med dine klassekammerater om projekter 1115 01:00:34,000 --> 01:00:37,000 eller hjælpe regne ud nogle tilfældige iOS stuff 1116 01:00:37,000 --> 01:00:40,000 velkommen til at kontakte mig, og helt sikkert gennemlæse al den kode online, fordi 1117 01:00:40,000 --> 01:00:43,000 bare af hensyn til tid, vi slags tilsløret mere 1118 01:00:43,000 --> 01:00:45,000 finere kornet detaljer ting. 1119 01:00:45,000 --> 01:00:47,000 Men hvis ikke, så held og lykke på dine iOS-projekter, og jeg håber, at vi har 1120 01:00:47,000 --> 01:00:53,000 en stor tilstrømning af apps i App Store. 1121 01:00:53,000 --> 01:00:56,000 [CS50.TV]