1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Seminarium] [iOS: Skriva 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 [Detta är CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Okej, alla, välkommen till iOS: Skriva Apps som en Boss. 5 00:00:12,000 --> 00:00:16,000 Detta seminarium kommer att fokusera på att skriva program för iPhone 6 00:00:16,000 --> 00:00:19,000 och i sin tur skriver program för iPad, och så vi i grund och botten kommer att gå igenom 7 00:00:19,000 --> 00:00:23,000 ett par olika exempel på hur man gör en app, ett enkelt spel som Tic Tac Toe, 8 00:00:23,000 --> 00:00:26,000 eller om du är mer intresserad av att göra en app som något slags nyhetsläsare 9 00:00:26,000 --> 00:00:30,000 eller något som interagerar med Internet kommer jag att tala om det också. 10 00:00:30,000 --> 00:00:32,000 Här är våra kort dagordning. 11 00:00:32,000 --> 00:00:36,000 >> IOS apps är skrivna på ett språk som kallas Objective-C, 12 00:00:36,000 --> 00:00:39,000 och så detta är lite liknande C men inte riktigt alls, 13 00:00:39,000 --> 00:00:41,000 så vi kommer att prata lite om själva språket 14 00:00:41,000 --> 00:00:45,000 och sedan hur man bygger iPhone apps som använder denna app program som heter Xcode, 15 00:00:45,000 --> 00:00:48,000 som om du inte har hämtat den ännu gärna starta hämtningen nu. 16 00:00:48,000 --> 00:00:50,000 Det är flera gigabyte. 17 00:00:50,000 --> 00:00:54,000 Det bör vara gratis på App Store, så du måste ha en Mac 18 00:00:54,000 --> 00:00:57,000 idealiskt kör den senaste versionen av OS X. 19 00:00:57,000 --> 00:00:59,000 Om du inte, inga problem. 20 00:00:59,000 --> 00:01:02,000 Vi har Mac-datorer i science center tillgängliga för dig 21 00:01:02,000 --> 00:01:05,000 med XCode installerat och så känn dig fri att använda dem för utveckling. 22 00:01:05,000 --> 00:01:07,000 Om du vill göra en app men inte har en Mac, oroa dig inte. 23 00:01:07,000 --> 00:01:09,000 Det finns gott om campus resurser för det. 24 00:01:09,000 --> 00:01:15,000 Och så då ska vi täcka 2 större exempel på olika program du kan göra. 25 00:01:15,000 --> 00:01:19,000 Objective-C är tekniskt vad som kallas en super uppsättning C. 26 00:01:19,000 --> 00:01:24,000 Det innebär att alla C-kod gäller även Objective-C-kod. 27 00:01:24,000 --> 00:01:29,000 Det betyder att vi typ av trumman tejpade på några extra funktioner till C. 28 00:01:29,000 --> 00:01:33,000 Vissa av dessa funktioner inkluderar inte behöva någonsin skriva malloc igen, tack och lov, 29 00:01:33,000 --> 00:01:36,000 ingen behöva oroa de dumma pekare och frigöra dem och allt det där 30 00:01:36,000 --> 00:01:40,000 du hatade om C, och det är typ av gått i Objective-C. 31 00:01:40,000 --> 00:01:43,000 >> Nu har Objective-C också en mycket större standardbiblioteket, 32 00:01:43,000 --> 00:01:47,000 så det finns mycket mer funktionalitet du får gratis inne i Objective-C. 33 00:01:47,000 --> 00:01:50,000 Kommer du ihåg när vi skrev PHP märkte vi att vi gick från 34 00:01:50,000 --> 00:01:54,000 Detta minsta språk till jätten biblioteket av alla dessa galna saker du kan göra. 35 00:01:54,000 --> 00:01:56,000 Samma sak händer i iOS. 36 00:01:56,000 --> 00:01:59,000 Det finns objekt för saker som den buddhistiska kalendern, och verkligen något 37 00:01:59,000 --> 00:02:05,000 du kan möjligen tänka förmodligen finns redan i Objective-C genomförande. 38 00:02:05,000 --> 00:02:08,000 Målet delen av Objective-C är refererar något 39 00:02:08,000 --> 00:02:11,000 kallas Objektorienterad programmering. 40 00:02:11,000 --> 00:02:14,000 Detta är typ av ett nytt koncept, men vi har faktiskt mest lärt 41 00:02:14,000 --> 00:02:17,000 många av dessa begrepp redan. 42 00:02:17,000 --> 00:02:19,000 Tanken bakom Objektorienterad programmering är att du kommer att strukturera 43 00:02:19,000 --> 00:02:23,000 mycket av din kod runt dessa saker som kallas klasser, 44 00:02:23,000 --> 00:02:26,000 och dessa klasser är verkligen högstämd structs. 45 00:02:26,000 --> 00:02:30,000 Inne i en struct vi i princip sagt här är en sak, 46 00:02:30,000 --> 00:02:32,000 och denna sak kan ha medlemmar. 47 00:02:32,000 --> 00:02:35,000 Exempelvis kan en nod i en länkad lista ha andra saker 48 00:02:35,000 --> 00:02:38,000 som ett värde, en pekare till nästa nod i listan, 49 00:02:38,000 --> 00:02:44,000 och tillsammans att pekaren och detta värde består detta en instans av en struct. 50 00:02:44,000 --> 00:02:47,000 Klasserna är mycket lika förutom 51 00:02:47,000 --> 00:02:50,000 klasser kan också ha funktioner inne i dem. 52 00:02:50,000 --> 00:02:54,000 När vi förklarade en struct, kan vi bara säga int n eller nod * nästa. 53 00:02:54,000 --> 00:02:57,000 >> Nu med Objective-C kan vi faktiskt sätta funktioner 54 00:02:57,000 --> 00:02:59,000 inuti dessa saker. 55 00:02:59,000 --> 00:03:03,000 En annan sak som klasser kan göra är att de kan ärva data från andra klasser. 56 00:03:03,000 --> 00:03:07,000 Till exempel kommer vi att titta på ett gäng inbyggd i Objective-C klasser. 57 00:03:07,000 --> 00:03:11,000 En av dem skulle kunna vara den klass som representerar vyn för en skärm, 58 00:03:11,000 --> 00:03:14,000 och så genom att säga jag vill genomföra min egen åsikt 59 00:03:14,000 --> 00:03:18,000 vi säga i princip någon över på Apple, förmodligen riktigt trevligt folk, 60 00:03:18,000 --> 00:03:21,000 skrev denna klass för mig, och den hanterar saker som att visa knappar 61 00:03:21,000 --> 00:03:25,000 eller göra skärmen, och vi skulle vara riktigt smärtade 62 00:03:25,000 --> 00:03:28,000 att genomföra allt som funktionalitet själva, och det genom att helt enkelt 63 00:03:28,000 --> 00:03:31,000 arv data vi kan säga allt som du gjorde i den klassen 64 00:03:31,000 --> 00:03:34,000 Jag vill också inne i min klass, och då ska jag göra lite andra grejer, 65 00:03:34,000 --> 00:03:37,000 nämligen att genomföra en app. 66 00:03:37,000 --> 00:03:40,000 Det är vad det ordet arv betyder. Vi får se en mer konkret exempel. 67 00:03:40,000 --> 00:03:42,000 >> Och slutligen, är nyckeln till Objektorienterad programmering som 68 00:03:42,000 --> 00:03:45,000 det leder till data inkapsling. 69 00:03:45,000 --> 00:03:48,000 I vissa av våra problem sätter vi kunde ha dessa stora, globala variabler 70 00:03:48,000 --> 00:03:51,000 och globals överallt, och det är hur vi skulle hålla reda på stat. 71 00:03:51,000 --> 00:03:55,000 Med klasser vi kan börja kapsla informationen inuti ett objekt. 72 00:03:55,000 --> 00:03:58,000 Om vi ​​har en skärm på vår app, vi egentligen inte behöver ha några data från 73 00:03:58,000 --> 00:04:01,000 en annan skärm i vår app inuti det, 74 00:04:01,000 --> 00:04:04,000 och så genom att kapsla saker i klasserna leder faktiskt 75 00:04:04,000 --> 00:04:08,000 till mycket bättre kod konstruktion, och detta är möjligt med några av de ytterligare funktioner 76 00:04:08,000 --> 00:04:11,000 av Objective-C. 77 00:04:11,000 --> 00:04:15,000 Förvarning, är syntaxen för Objective-C bananer. 78 00:04:15,000 --> 00:04:19,000 Det är som något vi har sett tidigare, 79 00:04:19,000 --> 00:04:22,000 så det är lite av en inlärningskurva att vänja sig 80 00:04:22,000 --> 00:04:24,000 vad sjutton betyder det? 81 00:04:24,000 --> 00:04:27,000 Men när du komma förbi denna första inlärningskurva det riktigt, riktigt jämn 82 00:04:27,000 --> 00:04:29,000 att börja skriva program. 83 00:04:29,000 --> 00:04:33,000 >> Att deklarera en klass, att säga här är min klass, den finns, 84 00:04:33,000 --> 00:04:35,000 och kanske här är några saker som jag kommer att definiera senare, 85 00:04:35,000 --> 00:04:38,000 Jag ska säga @ gränssnitt. 86 00:04:38,000 --> 00:04:41,000 Jag ska säga @ gränssnitt. Jag ska ge min klass ett namn. 87 00:04:41,000 --> 00:04:43,000 Och sedan någon annanstans ska jag säga @ slut, 88 00:04:43,000 --> 00:04:46,000 och allt mellan @ gränssnittet och @ änden 89 00:04:46,000 --> 00:04:48,000 kommer att bli min klass. 90 00:04:48,000 --> 00:04:51,000 Det kommer att bli vad som finns inuti våra. H-filer. 91 00:04:51,000 --> 00:04:55,000 Precis som i C vår. H-filer sade i princip här är några saker som kommer att finnas. 92 00:04:55,000 --> 00:04:57,000 Jag är inte nödvändigtvis berätta vad de gör ännu, 93 00:04:57,000 --> 00:04:59,000 men kompilatorn behöver veta att de finns. 94 00:04:59,000 --> 00:05:04,000 Senare inne i vår. M. filer, eftersom m för Objective-C 95 00:05:04,000 --> 00:05:08,000 är där vi faktiskt kommer att definiera vad dessa klasser gör. 96 00:05:08,000 --> 00:05:11,000 Ungefär som våra. C-filer, förutsatt att vi en implementering för funktioner. 97 00:05:11,000 --> 00:05:15,000 Inuti vår. M. fil vi ska säga här är vad alla funktioner 98 00:05:15,000 --> 00:05:18,000 insidan av min klass vad alla gör. 99 00:05:18,000 --> 00:05:22,000 Och slutligen, inne i en struct vi kunde säga inuti dessa klammerparenteser 100 00:05:22,000 --> 00:05:25,000 int n eller nod * nästa, 101 00:05:25,000 --> 00:05:28,000 och i Objective-C ska vi använda nyckelordet @ egendom, 102 00:05:28,000 --> 00:05:31,000 och detta är vad som kommer att definiera egenskaper, 103 00:05:31,000 --> 00:05:36,000 eller icke-funktioner som är en del av mina klasser. 104 00:05:36,000 --> 00:05:40,000 >> Ringa funktioner i Objective-C är också bananer. 105 00:05:40,000 --> 00:05:43,000 När vi förklarade funktioner i C vi sa något i stil int foo 106 00:05:43,000 --> 00:05:46,000 och öppna paren och sedan gav det en lista med argument. 107 00:05:46,000 --> 00:05:51,000 Detta är vad som förklarar metoder eller funktioner ser ut i Objective-C. 108 00:05:51,000 --> 00:05:54,000 Om jag vill deklarera en funktion eller en metod 109 00:05:54,000 --> 00:05:58,000 där jag säger metod är egentligen bara en funktion som är en medlem av en klass, 110 00:05:58,000 --> 00:06:01,000 så typ av utbytbara, men inte riktigt, 111 00:06:01,000 --> 00:06:03,000 så inne i min metod vill jag skapa en ny metod. 112 00:06:03,000 --> 00:06:06,000 Det kommer att återvända ingenting, så det kommer att vara av typen void. 113 00:06:06,000 --> 00:06:08,000 Detta är returtyp min funktion. 114 00:06:08,000 --> 00:06:11,000 Nu har vi Parens här eftersom-Jag vet inte. 115 00:06:11,000 --> 00:06:14,000 Nästa kommer att bli namnet på min funktion, 116 00:06:14,000 --> 00:06:17,000 och slutligen har vi ett semikolon precis som vi hade i C. 117 00:06:17,000 --> 00:06:19,000 Vad är nytt här är den här killen här. 118 00:06:19,000 --> 00:06:22,000 Denna bindestreck faktiskt är nödvändigt, och vad detta säger är att 119 00:06:22,000 --> 00:06:26,000 denna metod här måste kallas på en instans av en klass. 120 00:06:26,000 --> 00:06:29,000 >> Efter att vi förklarade våra structs vi sade antagligen något liknande 121 00:06:29,000 --> 00:06:32,000 struct nod n och som faktiskt skapade 122 00:06:32,000 --> 00:06:35,000 eller instansieras en av de structs så att jag kunde faktiskt börja arbeta 123 00:06:35,000 --> 00:06:38,000 med vad som finns inuti den, så denna streck innebär att vi måste 124 00:06:38,000 --> 00:06:41,000 instansiera klassen precis som vi instansieras att struct 125 00:06:41,000 --> 00:06:43,000 innan vi kan anropa den här metoden på den. 126 00:06:43,000 --> 00:06:46,000 Om jag vill börja lägga argument för mina metoder 127 00:06:46,000 --> 00:06:48,000 det blir ännu fler bananer. 128 00:06:48,000 --> 00:06:50,000 Här är min metod namn. 129 00:06:50,000 --> 00:06:53,000 Sen ska jag ha ett kolon, och efter denna kolon står här kommer några argument. 130 00:06:53,000 --> 00:06:56,000 Denna metod tar ett argument. 131 00:06:56,000 --> 00:06:59,000 Typen av dess argument är en int, och namnet på det argumentet 132 00:06:59,000 --> 00:07:03,000 eller den variabel som jag ska börja använda insidan av metoden kallas jag. 133 00:07:03,000 --> 00:07:05,000 Återigen, är denna metod. Det tar ett argument. 134 00:07:05,000 --> 00:07:10,000 >> Om du vill börja lägga till fler argument blir det fler bananer 135 00:07:10,000 --> 00:07:13,000 att vi har den här kolon som säger här kommer min lista över argument. 136 00:07:13,000 --> 00:07:15,000 Denna första argumentet är ett heltal. 137 00:07:15,000 --> 00:07:17,000 Nu är denna andra argumentet intressant. 138 00:07:17,000 --> 00:07:20,000 Den variabel som jag kommer att använda insidan av min funktion 139 00:07:20,000 --> 00:07:23,000 heter f, så inne i min funktion jag kunde säga 140 00:07:23,000 --> 00:07:25,000 f + = 1 eller något. 141 00:07:25,000 --> 00:07:30,000 Denna sak här är i grunden en nyckel för det argumentet eller parameter. 142 00:07:30,000 --> 00:07:34,000 Precis som vi hade nyckel värdepar och något som JSON eller associativa arrayer 143 00:07:34,000 --> 00:07:37,000 Objective-C tog beslutet att säga, okej, bara så att det är riktigt klart 144 00:07:37,000 --> 00:07:39,000 när du ringer en metod vad alla dessa parametrar är 145 00:07:39,000 --> 00:07:41,000 Jag faktiskt kommer att namnge dem alla. 146 00:07:41,000 --> 00:07:45,000 När du ringer en metod, kommer du att säga faktiskt andFloat, 147 00:07:45,000 --> 00:07:47,000 och då kommer du att passera den i. 148 00:07:47,000 --> 00:07:50,000 >> Intressant nog är detta en inte namngiven, men alla andra parametrar är, 149 00:07:50,000 --> 00:07:53,000 så om vi hade en 3: e argument jag kunde säga andFloat 150 00:07:53,000 --> 00:07:56,000 och en annan flottören och så vidare. 151 00:07:56,000 --> 00:08:01,000 När jag kallar dessa metoder är det naturligtvis bananer, 152 00:08:01,000 --> 00:08:04,000 så om jag har ett objekt, och jag definierat en metod som kallas foo, 153 00:08:04,000 --> 00:08:09,000 och jag vill kalla det, istället för att säga foo OPEN / CLOSE Parens 154 00:08:09,000 --> 00:08:11,000 Jag ska öppna en konsol. 155 00:08:11,000 --> 00:08:13,000 Här är namnet på min metod. 156 00:08:13,000 --> 00:08:17,000 Jag ska stänga konsolen, och detta är föremålet jag ringer på den. 157 00:08:17,000 --> 00:08:20,000 Kom ihåg att alla dessa metoder finns inom klasser 158 00:08:20,000 --> 00:08:23,000 eftersom klasser kan ha metoder som definierats inuti dem. 159 00:08:23,000 --> 00:08:26,000 >> Här har jag godtyckligt skapat ett objekt av något klass, 160 00:08:26,000 --> 00:08:28,000 och detta är syntaxen för att göra detta. 161 00:08:28,000 --> 00:08:31,000 Det finns 2 steg för att skapa ett objekt. 162 00:08:31,000 --> 00:08:34,000 Det första steget är att säga att jag vill allokera utrymme. 163 00:08:34,000 --> 00:08:37,000 Detta motsvarar en malloc. Vi behöver inte säga malloc längre. 164 00:08:37,000 --> 00:08:42,000 Vi tappade m, gjorde det Alloc, och ersatte. C med. M.. 165 00:08:42,000 --> 00:08:47,000 Efter att vi alloc något vi måste sedan initiera den. 166 00:08:47,000 --> 00:08:49,000 I grund och botten när du skapar objekt du kanske vill ha lite logik 167 00:08:49,000 --> 00:08:53,000 som utför när de är skapade så att du kan passera i vissa standardvärden 168 00:08:53,000 --> 00:08:57,000 eller något liknande, och så denna init metod är vad som faktiskt skapar objektet. 169 00:08:57,000 --> 00:08:59,000 Vi allokera första rutan, precis som vi gjorde i C, 170 00:08:59,000 --> 00:09:04,000 och då vi initiera den, vilket kan eller inte kan göra en hel del. 171 00:09:04,000 --> 00:09:07,000 Sedan vi tillbaka det här till ett objekt O. 172 00:09:07,000 --> 00:09:09,000 Det finns en stjärna här eftersom detta är tekniskt en pekare, 173 00:09:09,000 --> 00:09:12,000 men oroa dig inte, pekare är inte så stor en affär i Objective-C längre. 174 00:09:12,000 --> 00:09:15,000 >> Nu har vi instansieras denna klass som heter NSObject, 175 00:09:15,000 --> 00:09:19,000 och detta är bara en slumpmässig klass som Apple har. 176 00:09:19,000 --> 00:09:22,000 Vi har initierats detta, och nu har jag en instans av denna klass 177 00:09:22,000 --> 00:09:25,000 i detta objekt O, så det betyder att om jag definierade 178 00:09:25,000 --> 00:09:29,000 dessa metoder kunde jag kalla dem så här. 179 00:09:29,000 --> 00:09:31,000 Likaså om jag ville ringa en metod med ett argument, 180 00:09:31,000 --> 00:09:34,000 så detta är baren metoden, som tar ett argument, 181 00:09:34,000 --> 00:09:38,000 och här är baz: qux metod, så det tar 2 argument. 182 00:09:38,000 --> 00:09:44,000 Detta kräver en funktion på detta objekt O. 183 00:09:44,000 --> 00:09:46,000 Vettigt? 184 00:09:46,000 --> 00:09:50,000 Syntaxen ska vara meningsfullt, men du typ av vänja sig. 185 00:09:50,000 --> 00:09:54,000 >> Okej, låt oss tala om några saker som är inbyggda i Objective-C 186 00:09:54,000 --> 00:09:56,000 som inte nödvändigtvis är inbyggd i C. 187 00:09:56,000 --> 00:09:59,000 I C vi hade typ av att ta itu med strängar som dessa dumma tecken matriser, 188 00:09:59,000 --> 00:10:01,000 och det blev verkligen irriterande. 189 00:10:01,000 --> 00:10:04,000 Objective-C har de alla byggda i för oss, och den är byggd i 190 00:10:04,000 --> 00:10:06,000 använda denna klass som kallas NSString. 191 00:10:06,000 --> 00:10:10,000 När jag vill skapa en NSString vi har mer svårbegripliga syntax. 192 00:10:10,000 --> 00:10:15,000 I stället för att säga "CS50" vi säger @ "CS50" 193 00:10:15,000 --> 00:10:17,000 och detta är bara syntaxen för att förklara strängar i Objective-C. 194 00:10:17,000 --> 00:10:21,000 Detta är extremt lätt att glömma, så gör det inte. 195 00:10:21,000 --> 00:10:24,000 Nu, när jag har den här, det här är en sträng, men märker 196 00:10:24,000 --> 00:10:26,000 det är egentligen bara ett objekt. 197 00:10:26,000 --> 00:10:30,000 Jag sa NSString, vilket betyder att jag instansieras klassen 198 00:10:30,000 --> 00:10:32,000 heter NSString, som någon annan skrev för mig, 199 00:10:32,000 --> 00:10:35,000 och de var mycket trevligt om det, och så nu 200 00:10:35,000 --> 00:10:37,000 Jag kan börja ringa metoder på det. 201 00:10:37,000 --> 00:10:40,000 Om jag kallar metoden längden på objektet är 202 00:10:40,000 --> 00:10:43,000 det kommer att återvända till mig längden på strängen. 203 00:10:43,000 --> 00:10:45,000 Detta är precis som strlen i C. 204 00:10:45,000 --> 00:10:47,000 Detta skulle återvända 4. 205 00:10:47,000 --> 00:10:51,000 >> På samma sätt är en annan metod jag kanske vill ta hand om den här characterAtIndex. 206 00:10:51,000 --> 00:10:54,000 Detta är en metod som säger om denna sträng är 207 00:10:54,000 --> 00:10:57,000 Jag vill att du ska få 0:e karaktär, 208 00:10:57,000 --> 00:10:59,000 och så här skulle återvända till mig tecknet c, 209 00:10:59,000 --> 00:11:02,000 och det finns en hel massa mer av dessa metoder som du kan Google verkligen enkelt. 210 00:11:02,000 --> 00:11:07,000 Apples dokumentation är stor, och vi tar en titt på det i lite. 211 00:11:07,000 --> 00:11:09,000 Det är strängar. 212 00:11:09,000 --> 00:11:11,000 Vi har också varierande storlek arrayer inbyggd 213 00:11:11,000 --> 00:11:13,000 Tänk i C när vi förklarade en matris 214 00:11:13,000 --> 00:11:16,000 vi var tvungna att säga att du har 5 element, end of story. 215 00:11:16,000 --> 00:11:18,000 När vi kom till JavaScript och PHP vi kunde börja 216 00:11:18,000 --> 00:11:20,000 göra saker som att lägga till element eller flytta element. 217 00:11:20,000 --> 00:11:22,000 Vi kan göra samma sak i Objective-C. 218 00:11:22,000 --> 00:11:26,000 Hellre än att skapa en array på vanligt C-vägen 219 00:11:26,000 --> 00:11:30,000 Vi har återigen en annan klass som heter NSMutableArray. 220 00:11:30,000 --> 00:11:33,000 Det finns också NSArray, 221 00:11:33,000 --> 00:11:35,000 och detta kommer att i grunden kapsla lite array. 222 00:11:35,000 --> 00:11:38,000 Detta säger det första jag vill göra är att jag vill att fördela 223 00:11:38,000 --> 00:11:41,000 utrymme för en ny array, och efter att jag fördela det 224 00:11:41,000 --> 00:11:43,000 Jag måste sedan initiera den. 225 00:11:43,000 --> 00:11:45,000 Återigen, bara ringa dessa 2 metoder. 226 00:11:45,000 --> 00:11:48,000 Nu innebär detta att insidan av detta objekt en 227 00:11:48,000 --> 00:11:50,000 Jag har en tom array sitter där. 228 00:11:50,000 --> 00:11:54,000 Om jag vill lägga till något till denna array kan jag ringa addObject metoden. 229 00:11:54,000 --> 00:11:59,000 Jag vill lägga till ett objekt i arrayen en, och jag vill lägga till strängen CS50. 230 00:11:59,000 --> 00:12:02,000 Om jag ville omvänt bort att jag kan säga att jag vill 231 00:12:02,000 --> 00:12:09,000 ta bort föremålet på första plats på arrayen eller objektet en. 232 00:12:09,000 --> 00:12:11,000 >> Vettigt? 233 00:12:11,000 --> 00:12:14,000 Okej, du typ av vänja sig vid denna hakparentes sak. 234 00:12:14,000 --> 00:12:18,000 Förresten, insidan av en massa Apples bibliotek ser du här NS. 235 00:12:18,000 --> 00:12:21,000 NS står faktiskt för nästa steg, vilket var ett av Steve Jobs första företagen, 236 00:12:21,000 --> 00:12:24,000 och det är där han verkligen började skriva en hel del av koden 237 00:12:24,000 --> 00:12:27,000 som ett slags grund för Mac OS X och alla andra saker, 238 00:12:27,000 --> 00:12:32,000 och så denna NS är typ av denna fina arv shout out till en av de tidigare bolagen 239 00:12:32,000 --> 00:12:34,000 tillbaka när Apple först börjat. 240 00:12:34,000 --> 00:12:36,000 Det är överallt. 241 00:12:36,000 --> 00:12:41,000 Låt oss ta en titt på en mer holistisk Objective-C exempel. 242 00:12:41,000 --> 00:12:44,000 Här är jag inne i XCode. 243 00:12:44,000 --> 00:12:47,000 För att komma hit, hämtat jag först XCode från App Store, 244 00:12:47,000 --> 00:12:50,000 öppnade upp, och sedan gick jag upp här filen, 245 00:12:50,000 --> 00:12:54,000 hit till nya, och sedan projekt. 246 00:12:54,000 --> 00:12:57,000 Efter att jag gör det jag har alla dessa alternativ på vad jag vill skapa, 247 00:12:57,000 --> 00:12:59,000 och så ska vi ta en titt på dessa alternativ senare, 248 00:12:59,000 --> 00:13:03,000 men bara för det här exemplet, eftersom vi inte faktiskt kommer att ha en app ännu, 249 00:13:03,000 --> 00:13:06,000 Jag kom ner hit, och jag sa kommandoradsverktyg, 250 00:13:06,000 --> 00:13:09,000 och detta är en app som jag kunde köra på kommandoraden 251 00:13:09,000 --> 00:13:12,000 precis som vi har kört från C. 252 00:13:12,000 --> 00:13:16,000 Det är hur jag skapade det här projektet, och så nu är jag här, 253 00:13:16,000 --> 00:13:20,000 så låt oss först titta på den här filen, och detta bör se ganska bekant. 254 00:13:20,000 --> 00:13:24,000 Jag har en int namn. Det är min vän argc, min andra kompis argv. 255 00:13:24,000 --> 00:13:30,000 Och så kan vi se att det är inkörsporten för min första Objective-C program. 256 00:13:30,000 --> 00:13:32,000 Här kan vi ignorera detta för nu. 257 00:13:32,000 --> 00:13:35,000 Detta är i grunden en del minneshantering saker som du inte kommer riktigt 258 00:13:35,000 --> 00:13:37,000 någonsin behöver oroa. 259 00:13:37,000 --> 00:13:39,000 >> Låt oss titta på denna första blocket här. 260 00:13:39,000 --> 00:13:46,000 Denna första raden, om jag säger Student * alice = [[Student alloc] init] vad är det att göra? 261 00:13:46,000 --> 00:13:50,000 Denna första student här, detta är förmodligen en klass. 262 00:13:50,000 --> 00:13:54,000 Detta är inte en klass som Apple skrev, men det är en klass som jag skrev. 263 00:13:54,000 --> 00:13:57,000 Det första jag vill göra är att jag vill allokera utrymme för en ny student, 264 00:13:57,000 --> 00:14:00,000 och då vill jag initiera den, så det ger mig tillbaka 265 00:14:00,000 --> 00:14:05,000 denna nya studenter objekt, och jag lagrar det i en variabel som heter Alice. 266 00:14:05,000 --> 00:14:07,000 Var kom den klassen ifrån? 267 00:14:07,000 --> 00:14:12,000 Tja, här borta på vänster sida dessa är alla de olika filerna inuti mitt projekt. 268 00:14:12,000 --> 00:14:16,000 Vi kan se här har jag en Student.h och Student.m. 269 00:14:16,000 --> 00:14:20,000 Den. H. fil, kom ihåg, är där jag förklarar alla de saker 270 00:14:20,000 --> 00:14:22,000 som kommer att finnas i klassen. 271 00:14:22,000 --> 00:14:25,000 >> Låt oss ta en titt på det. 272 00:14:25,000 --> 00:14:29,000 Okej, här har vi det här @ gränssnitt, och det säger att här kommer 273 00:14:29,000 --> 00:14:33,000 förklaringarna från allt som kommer att finnas inom min klass. 274 00:14:33,000 --> 00:14:36,000 Sen har jag ett kolon. Då jag har denna NSObject sak. 275 00:14:36,000 --> 00:14:40,000 Detta kolon innebär att arv bit vi diskuterade lite tidigare. 276 00:14:40,000 --> 00:14:43,000 Detta säger allt ett NSObject kan göra 277 00:14:43,000 --> 00:14:46,000 där NSObject är denna klass skriven av någon annan, 278 00:14:46,000 --> 00:14:50,000 allt detta NSObject kan jag vill kunna göra det. 279 00:14:50,000 --> 00:14:54,000 Genom att säga: NSObject det innebär att jag i grund och botten 280 00:14:54,000 --> 00:14:58,000 ärvt all funktionalitet för en annan klass. 281 00:14:58,000 --> 00:15:02,000 Det gav mig verkligen en massa olika metoder och egenskaper som jag kan använda. 282 00:15:02,000 --> 00:15:05,000 Här nere Jag skapar 2 fastigheter. 283 00:15:05,000 --> 00:15:08,000 Det betyder min student, om detta var en struct, skulle dessa vara 2 saker 284 00:15:08,000 --> 00:15:11,000 insidan av min struct, så varje elev har ett namn 285 00:15:11,000 --> 00:15:14,000 som är en sträng, och en student har också en kvalitet, 286 00:15:14,000 --> 00:15:17,000 vilket är en int. 287 00:15:17,000 --> 00:15:23,000 >> Slutligen, här nere ska jag skapa en metod för min student. 288 00:15:23,000 --> 00:15:26,000 Jag ringde min metod, initWithName, och det tar ett argument, 289 00:15:26,000 --> 00:15:31,000 och argumentet är en sträng, och jag kallade det namn. 290 00:15:31,000 --> 00:15:35,000 Nu ska vi titta på hur vi faktiskt genomfört denna klass. 291 00:15:35,000 --> 00:15:38,000 Här, nu är jag inne på min. M. fil, 292 00:15:38,000 --> 00:15:40,000 m för genomförande, antar jag. 293 00:15:40,000 --> 00:15:44,000 Jag har min genomförande, mitt slut och här är där jag faktiskt definiera 294 00:15:44,000 --> 00:15:47,000 vilken initWithName gör. 295 00:15:47,000 --> 00:15:50,000 Jag har initWithName, namnet på min parameter och sedan detta 296 00:15:50,000 --> 00:15:53,000 är där jag faktiskt skapar en student, 297 00:15:53,000 --> 00:15:56,000 och så detta är lite kryptisk, men det är typ av standardtext 298 00:15:56,000 --> 00:15:58,000 som du vill inkludera i dina konstruktorer. 299 00:15:58,000 --> 00:16:02,000 Denna initiering fungerar här, initWithName, är en typ av konstruktor. 300 00:16:02,000 --> 00:16:05,000 Du är i grunden bygga en ny elev objekt 301 00:16:05,000 --> 00:16:07,000 och kanske skicka några data i den. 302 00:16:07,000 --> 00:16:11,000 Det första jag vill göra är att jag vill ringa init på denna super sak. 303 00:16:11,000 --> 00:16:15,000 >> Kom ihåg att när jag sa tillbaka här i. H. filen 304 00:16:15,000 --> 00:16:21,000 att allt en NSObject har en elev har också. 305 00:16:21,000 --> 00:16:24,000 Det innebär att när jag skapar en elev vad jag också behöver göra är 306 00:16:24,000 --> 00:16:28,000 se till att NSObject att jag ärver alla av dessa uppgifter från 307 00:16:28,000 --> 00:16:32,000 också initieras korrekt. 308 00:16:32,000 --> 00:16:36,000 Vad jag behöver säga är denna super faktiskt kommer att hänvisa till den överordnade klassen 309 00:16:36,000 --> 00:16:39,000 att jag ärver från, så jag vill se till att jag initiera 310 00:16:39,000 --> 00:16:43,000 allt som jag beroende på innan jag börjar försöka använda den. 311 00:16:43,000 --> 00:16:46,000 Sen om det initieras korrekt är precis som att säga om malloc 312 00:16:46,000 --> 00:16:50,000 inte returnera null då kan jag börja ställa vissa egenskaper. 313 00:16:50,000 --> 00:16:54,000 >> I JavaScript och PHP hade vi det här sökordet kallade detta, 314 00:16:54,000 --> 00:16:58,000 och detta anges den nuvarande instans av en klass. 315 00:16:58,000 --> 00:17:00,000 I Objective-C som vi kallar jaget. 316 00:17:00,000 --> 00:17:04,000 När jag säger self.name, innebär att objektet 317 00:17:04,000 --> 00:17:07,000 Jag skapade bara när jag sa eleven Alloc init, 318 00:17:07,000 --> 00:17:09,000 det kommer att ge mig tillbaka ett objekt. 319 00:17:09,000 --> 00:17:12,000 Det betyder att jag vill ställa namnet på objektet 320 00:17:12,000 --> 00:17:15,000 till vad jag just passerat i. 321 00:17:15,000 --> 00:17:18,000 Precis som i C, tillgång vi medlemmar i denna punkt, 322 00:17:18,000 --> 00:17:21,000 så self.name säger namnet på eleven objektet 323 00:17:21,000 --> 00:17:24,000 kommer nu att bli vad du just passerat i. 324 00:17:24,000 --> 00:17:28,000 Och så slutligen, kan jag returnera den så jag faktiskt få något tillbaka. 325 00:17:28,000 --> 00:17:30,000 >> Frågor? 326 00:17:30,000 --> 00:17:34,000 Okej, så detta själv = super init, 327 00:17:34,000 --> 00:17:37,000 Om du inte helt förstår arvet grejer oroa dig inte. 328 00:17:37,000 --> 00:17:40,000 Vet bara att om du någonsin vill göra din egen init metod bara 329 00:17:40,000 --> 00:17:42,000 göra det, och du kommer att bli bra att gå. 330 00:17:42,000 --> 00:17:44,000 Ja. >> [Student] Vad gör om sig själv betyder? 331 00:17:44,000 --> 00:17:49,000 Det innebär att när vi malloc något vi alltid kontrollerat om det var lika null, 332 00:17:49,000 --> 00:17:51,000 och om det var noll, då vi avslutat. 333 00:17:51,000 --> 00:17:55,000 Detta är samma sak, för om det återkommer null, då vi förmodligen kommer att seg fel 334 00:17:55,000 --> 00:17:57,000 om vi börjar försöka manipulera den. 335 00:17:57,000 --> 00:18:01,000 Det är vår elev klass. 336 00:18:01,000 --> 00:18:03,000 Det innebär att vi kan initiera våra elever på ett av två sätt. 337 00:18:03,000 --> 00:18:08,000 Om jag säger eleven alloc init jag inte använda den metod som jag just skrev, 338 00:18:08,000 --> 00:18:11,000 och istället kan jag bara säga alice.name, 339 00:18:11,000 --> 00:18:14,000 och nu ska jag ställa den egenskapen namnet. 340 00:18:14,000 --> 00:18:17,000 >> Likaså om jag vill använda den initWithName metod 341 00:18:17,000 --> 00:18:20,000 Jag kan bara säga Alloc, och sedan istället för att säga init 342 00:18:20,000 --> 00:18:24,000 Jag ska kalla denna metod som jag just har skapat och jag kommer att passera i Bob. 343 00:18:24,000 --> 00:18:30,000 Vid denna punkt har detta objekt Bob ett namn som är lika med Bob. 344 00:18:30,000 --> 00:18:35,000 Okej, här nere jag använder den NSMutableArray som vi tittat på tidigare. 345 00:18:35,000 --> 00:18:38,000 Jag fördela space.Then jag initiera en ny array. 346 00:18:38,000 --> 00:18:40,000 Jag ska lägga 2 saker till den. 347 00:18:40,000 --> 00:18:43,000 Denna matris har nu studenter objekt. 348 00:18:43,000 --> 00:18:46,000 Observera att ingenstans hade jag att säga att detta är en rad studenter. 349 00:18:46,000 --> 00:18:48,000 Jag sa att det är en array, period. 350 00:18:48,000 --> 00:18:50,000 Då kan jag ange vad insidan av det som jag vill. 351 00:18:50,000 --> 00:18:52,000 Här har jag 2 objekt. 352 00:18:52,000 --> 00:18:56,000 >> Slutligen har jag ett annat objekt här, denna TF. 353 00:18:56,000 --> 00:18:59,000 Här borta i TF.h i princip samma sak. 354 00:18:59,000 --> 00:19:01,000 Jag ärver från NSObject, och förresten, 355 00:19:01,000 --> 00:19:03,000 när du skapar lektioner här är allt gjort för dig, 356 00:19:03,000 --> 00:19:06,000 denna typ av gränssnitt standardtext. 357 00:19:06,000 --> 00:19:08,000 Den har en egenskap hos studenter. 358 00:19:08,000 --> 00:19:15,000 Jag har ett par metoder här som egentligen inte göra en hel del, 359 00:19:15,000 --> 00:19:18,000 och så det betyder när jag skapar denna TF objekt 360 00:19:18,000 --> 00:19:23,000 Jag kan anropa den här metoden betyg på det så här. 361 00:19:23,000 --> 00:19:26,000 Eventuella frågor om Objective-C syntax innan vi börjar flytta in lite mer 362 00:19:26,000 --> 00:19:30,000 intressanta apps utveckling grejer? 363 00:19:30,000 --> 00:19:34,000 >> Okej, så låt oss faktiskt göra en iPhone app. 364 00:19:34,000 --> 00:19:39,000 Kärnan klasser som du kommer att använda insidan av din iPhone app kallas view styrenheter, 365 00:19:39,000 --> 00:19:42,000 och en vy styrenhet är i grunden en enda skärm 366 00:19:42,000 --> 00:19:46,000 insidan av din app, så om jag är på programmet Musik, till exempel, 367 00:19:46,000 --> 00:19:50,000 en View Controller kan representera den vy som jag ser alla låtar på min iPhone. 368 00:19:50,000 --> 00:19:53,000 Another view controller kan vara när jag klickar på en låt och börja spela det 369 00:19:53,000 --> 00:19:55,000 eller som jag borrar ned i konstnärer. 370 00:19:55,000 --> 00:19:59,000 Var och en av dessa olika skärmar kan representeras som en annan uppfattning styrenhet, 371 00:19:59,000 --> 00:20:04,000 och en vy styrenhet är egentligen bara en klass som säger hur den här skärmen fungerar. 372 00:20:04,000 --> 00:20:07,000 Saker inuti en View Controller, vi kommer att ha egenskaper, 373 00:20:07,000 --> 00:20:10,000 så saker som en knapp kommer att bli en egenskap hos vår uppfattning styrenhet. 374 00:20:10,000 --> 00:20:13,000 >> Vi kommer även att ha metoder, och dessa är i grunden händelsehanterare. 375 00:20:13,000 --> 00:20:16,000 Denna metod säger när du trycker på den här knappen 376 00:20:16,000 --> 00:20:19,000 Jag vill göra något, och slutligen, återigen, 377 00:20:19,000 --> 00:20:24,000 vi kommer att använda detta själv nyckelordet för att komma åt aktuella förekomsten. 378 00:20:24,000 --> 00:20:29,000 Att bygga gränssnitt i iOS är faktiskt riktigt, riktigt enkelt. 379 00:20:29,000 --> 00:20:32,000 De har denna fina dra och släpp-gränssnitt som kallas Interface Builder, 380 00:20:32,000 --> 00:20:37,000 och de 2 centrala begrepp som tråd upp din Objective-C Interface Builder 381 00:20:37,000 --> 00:20:40,000 är IBOutlet och IBAction. 382 00:20:40,000 --> 00:20:44,000 En IBOutlet säger bara att om du deklarerar en egenskap som är en knapp, 383 00:20:44,000 --> 00:20:47,000 och du vill ansluta den till något i din faktiska UI, 384 00:20:47,000 --> 00:20:49,000 du kommer att säga att det är ett utlopp. 385 00:20:49,000 --> 00:20:51,000 Likaså om du vill representera en händelsehanterare 386 00:20:51,000 --> 00:20:54,000 då du kommer att säga att det är en åtgärd. 387 00:20:54,000 --> 00:20:57,000 >> För att verkligen koppla upp denna grafiskt 388 00:20:57,000 --> 00:21:00,000 och din kod är det riktigt, riktigt enkelt. 389 00:21:00,000 --> 00:21:03,000 Om du vill bifoga en IBOutlet, allt du behöver göra dig kontroll klick, 390 00:21:03,000 --> 00:21:05,000 och vi får se ett exempel på detta riktigt snabb. 391 00:21:05,000 --> 00:21:07,000 Du styr klicka där det står View Controller. 392 00:21:07,000 --> 00:21:09,000 Du kommer att dra in i gränssnittet, eller omvänt, 393 00:21:09,000 --> 00:21:13,000 om du vill koppla in en händelsehanterare du kommer att dra från gränssnittet 394 00:21:13,000 --> 00:21:15,000 i den andra riktningen. 395 00:21:15,000 --> 00:21:20,000 Låt oss ta en titt på en riktigt enkel iOS exempel. 396 00:21:20,000 --> 00:21:23,000 >> Låt oss skapa ett nytt projekt. 397 00:21:23,000 --> 00:21:25,000 Jag kommer att komma upp hit till ansökan, 398 00:21:25,000 --> 00:21:28,000 och jag ska klicka Enkelvy program. 399 00:21:28,000 --> 00:21:31,000 Jag ska klicka på Nästa. Jag ska ge mitt projekt ett namn. 400 00:21:31,000 --> 00:21:33,000 Jag kallar det Hej. 401 00:21:33,000 --> 00:21:36,000 Intressant, förutsätter Apple du skapar en produkt 402 00:21:36,000 --> 00:21:38,000 så att du kan sälja den och de kan tjäna pengar. 403 00:21:38,000 --> 00:21:41,000 Här nere kommer jag att säga att detta är en iPhone app. 404 00:21:41,000 --> 00:21:44,000 Du kan skapa en iPad app, eller om du vill skapa en av dessa appar 405 00:21:44,000 --> 00:21:47,000 som stöder båda enheterna du kan göra det också. 406 00:21:47,000 --> 00:21:49,000 Detta är vad du vill att dina markeringar ska se ut. 407 00:21:49,000 --> 00:21:51,000 >> Du vill använda storyboards, som vi kommer att se senare, 408 00:21:51,000 --> 00:21:54,000 och du vill absolut använda automatisk referens räkna, 409 00:21:54,000 --> 00:21:58,000 vilket är en trevlig funktion som hindrar dig från att behöva säga minnesallokera och gratis. 410 00:21:58,000 --> 00:22:03,000 Om du inte vill ringa malloc och fri, skulle jag lämna kontrolleras. 411 00:22:03,000 --> 00:22:07,000 Jag klickar på nästa och slutligen, detta kommer att fråga mig var jag vill spara det. 412 00:22:07,000 --> 00:22:14,000 Jag kommer hit skapa och nu kör vi. 413 00:22:14,000 --> 00:22:16,000 Jag skapade ett nytt projekt. 414 00:22:16,000 --> 00:22:19,000 Här borta till vänster är alla filer som är inne i mitt projekt, 415 00:22:19,000 --> 00:22:22,000 och märker att jag fick en hel massa, och jag har inte ens göra någonting. 416 00:22:22,000 --> 00:22:24,000 IOS är stor. 417 00:22:24,000 --> 00:22:27,000 >> Till exempel här i ViewController.h, 418 00:22:27,000 --> 00:22:30,000 detta kommer att representera min första View Controller, 419 00:22:30,000 --> 00:22:32,000 så den första skärmen inne i min app. 420 00:22:32,000 --> 00:22:34,000 Nu vet vi vad det säger. 421 00:22:34,000 --> 00:22:36,000 Vi säger att jag ringer denna klass ViewController, 422 00:22:36,000 --> 00:22:40,000 och en ViewController gör allt som en UIViewController gör, 423 00:22:40,000 --> 00:22:43,000 och detta är återigen något klass som Apple skrev att gör en hel del praktiskt saker för oss 424 00:22:43,000 --> 00:22:46,000 gillar visa skärmen. 425 00:22:46,000 --> 00:22:50,000 Här är där jag faktiskt kan börja definiera vad min åsikt controller gör, 426 00:22:50,000 --> 00:22:52,000 och det visar sig att jag verkligen inte behöver något av detta. 427 00:22:52,000 --> 00:22:55,000 Detta är standardtext kod som Apple ger mig gratis. 428 00:22:55,000 --> 00:22:59,000 Jag behövde den första raden, eller jag har inte en klass, 429 00:22:59,000 --> 00:23:02,000 så att vi kan bli av med det och bli av med denna. 430 00:23:02,000 --> 00:23:05,000 Okej, så det här är min tomma skärm. 431 00:23:05,000 --> 00:23:08,000 >> Nu ska vi klicka på denna MainStoryboard.storyboard, 432 00:23:08,000 --> 00:23:11,000 och det är där det börjar bli intressant. 433 00:23:11,000 --> 00:23:14,000 Detta är den första skärmen på min app. 434 00:23:14,000 --> 00:23:17,000 Om jag vill lägga till en knapp i HTML var jag tvungen att skapa en knapp tagg. 435 00:23:17,000 --> 00:23:20,000 På Android måste du skapa en knapp tagg, 436 00:23:20,000 --> 00:23:23,000 men i iOS om jag kommer bara hit till det nedre högra 437 00:23:23,000 --> 00:23:27,000 och om jag klickar på 3:e en hit där det står föremål, 438 00:23:27,000 --> 00:23:31,000 och jag kan rulla ner, eller jag kan börja söka efter knapp. 439 00:23:31,000 --> 00:23:35,000 Och titta, en knapp, så om jag faktiskt dra och släppa denna rätt där, 440 00:23:35,000 --> 00:23:38,000 Jag har precis lagt till en knapp för att denna skärm på min app. 441 00:23:38,000 --> 00:23:41,000 Om jag vill ändra texten, kan jag dubbelklicka den, 442 00:23:41,000 --> 00:23:47,000 säga något lockande som "Tryck mig." 443 00:23:47,000 --> 00:23:51,000 Okej, nu om jag kör denna app, så vi sammanställer det, 444 00:23:51,000 --> 00:23:54,000 så att köra det jag klickar på play-knappen i det övre vänstra och det är min app. 445 00:23:54,000 --> 00:23:58,000 Jag har inte gjort någonting, och jag fick en söt ser iPhone-app. 446 00:23:58,000 --> 00:24:01,000 Om jag vill stoppa det, kan du klicka på stoppknappen 447 00:24:01,000 --> 00:24:03,000 eftersom det är roligare. 448 00:24:03,000 --> 00:24:07,000 >> Låt oss säga att jag faktiskt vill att något ska hända när jag trycker på den här knappen. 449 00:24:07,000 --> 00:24:09,000 För att göra det vad jag behöver göra är att jag behöver för att skapa 450 00:24:09,000 --> 00:24:13,000 en ny händelsehanterare eller en handling. 451 00:24:13,000 --> 00:24:16,000 Det betyder att jag måste skapa någon metod som jag vill bli kallad 452 00:24:16,000 --> 00:24:18,000 när jag trycker på knappen, så låt oss skapa en ny metod. 453 00:24:18,000 --> 00:24:20,000 Jag insida ViewController.h. 454 00:24:20,000 --> 00:24:22,000 Jag måste säga att en metod finns. 455 00:24:22,000 --> 00:24:26,000 Jag behöver ett bindestreck först eftersom jag kommer att kalla detta på View Controller. 456 00:24:26,000 --> 00:24:28,000 Jag måste ge detta en typ. 457 00:24:28,000 --> 00:24:31,000 Den typ av detta kommer att vara att IBAction sak som vi såg tidigare. 458 00:24:31,000 --> 00:24:35,000 Detta är en händelsehanterare, så det kommer att returnera en IBAction, 459 00:24:35,000 --> 00:24:38,000 och detta är en ledtråd till XCode att säga att 460 00:24:38,000 --> 00:24:40,000 detta är något jag vill koppla något. 461 00:24:40,000 --> 00:24:45,000 Jag kan ge den ett namn, som buttonPressed, semikolon. 462 00:24:45,000 --> 00:24:48,000 >> Nu har jag förklarat en ny metod inne i min klass. 463 00:24:48,000 --> 00:24:50,000 Jag har sagt denna metod har att existera. 464 00:24:50,000 --> 00:24:53,000 Nu ska vi komma i ViewController.m, 465 00:24:53,000 --> 00:24:56,000 och låt oss säga vad denna metod kan göra. 466 00:24:56,000 --> 00:25:03,000 Om jag börjar skriva, till exempel, (void) buttonPressed 467 00:25:03,000 --> 00:25:06,000 meddelande XCode är verkligen trevligt och autocompletes för mig. 468 00:25:06,000 --> 00:25:09,000 Det är verkligen underbart. 469 00:25:09,000 --> 00:25:12,000 Notera här att insidan av. M. filen jag också säga ogiltig, 470 00:25:12,000 --> 00:25:15,000 och detta beror på att IBAction är egentligen inte en typ. 471 00:25:15,000 --> 00:25:19,000 Det är faktiskt hashtag definieras någonstans att vara ett tomrum, 472 00:25:19,000 --> 00:25:22,000 och igen, detta är bara en antydan till XCode som säger 473 00:25:22,000 --> 00:25:25,000 Jag vill att detta ska vara en händelsehanterare, och vi får se varför bara en sekund. 474 00:25:25,000 --> 00:25:28,000 När denna knapp trycks jag ska göra något irriterande 475 00:25:28,000 --> 00:25:30,000 gillar visa en popup. 476 00:25:30,000 --> 00:25:35,000 >> För att göra det jag kan skapa en ny instans av denna klass som kallas UIAlertView, 477 00:25:35,000 --> 00:25:39,000 och detta är en klass som Apples skrev det kommer att visa irriterande popup-fönster. 478 00:25:39,000 --> 00:25:43,000 Vi kallar denna popup varning, och jag har 2 steg, kom ihåg, att skapa detta objekt. 479 00:25:43,000 --> 00:25:46,000 Det första jag behöver göra är att allokera utrymme. 480 00:25:46,000 --> 00:25:48,000 Jag vill ha en UIAlertView. 481 00:25:48,000 --> 00:25:51,000 Jag vill allokera utrymme. Det är min första metoden. 482 00:25:51,000 --> 00:25:53,000 Min nästa metod är att jag vill att initiera den, 483 00:25:53,000 --> 00:25:58,000 och så har jag det stora, långa metod som kallas initWithTitle. 484 00:25:58,000 --> 00:26:01,000 Som i stort sett kommer att kontrollera vad detta popup säger. 485 00:26:01,000 --> 00:26:04,000 Titeln på min popup kan hej. 486 00:26:04,000 --> 00:26:08,000 Budskapet i denna popup kan vara "Det här är iOS." 487 00:26:08,000 --> 00:26:10,000 Delegera sak, jag vet inte vad det är. 488 00:26:10,000 --> 00:26:13,000 Låt oss säga att det är ingenting. 489 00:26:13,000 --> 00:26:18,000 Nu knappen som kommer att synas kan säga något i stil med: "Det är säkert," 490 00:26:18,000 --> 00:26:24,000 och jag vill verkligen inte några andra knappar, så låt oss ta bort den och stäng hållaren. 491 00:26:24,000 --> 00:26:27,000 >> Okej, jag skapade en extra. Där kör vi. 492 00:26:27,000 --> 00:26:30,000 Det är så jag kan skapa en ny popup. 493 00:26:30,000 --> 00:26:35,000 Om jag vill verkligen visa popup Jag vill ringa showen metoden. 494 00:26:35,000 --> 00:26:38,000 För att göra det jag kan säga alert och visa, 495 00:26:38,000 --> 00:26:40,000 och igen, autocomplete super trevligt. 496 00:26:40,000 --> 00:26:42,000 Om jag har glömt vad det var, om jag bara skrev i s, 497 00:26:42,000 --> 00:26:45,000 Jag kan bläddra igenom här för att räkna ut vad det var, 498 00:26:45,000 --> 00:26:48,000 och det filtrerar fint. 499 00:26:48,000 --> 00:26:52,000 Nu har jag skapat denna nya popup. 500 00:26:52,000 --> 00:26:55,000 Vi kommer tillbaka till vad delegat innebär senare, 501 00:26:55,000 --> 00:26:58,000 och nu vill jag säga att jag vill här metoden för att eldas 502 00:26:58,000 --> 00:27:01,000 när jag trycker på knappen, så jag kommer att komma tillbaka till min storyboard, 503 00:27:01,000 --> 00:27:04,000 och jag vill nu fästa denna IBAction. 504 00:27:04,000 --> 00:27:06,000 Det första du vill göra är att klicka på knappen. 505 00:27:06,000 --> 00:27:08,000 När jag trycker på denna knapp vill jag att något ska hända. 506 00:27:08,000 --> 00:27:10,000 Jag tänker inte hålla ned kontroll. 507 00:27:10,000 --> 00:27:13,000 Jag ska klicka och dra från knappen 508 00:27:13,000 --> 00:27:15,000 till hit där det står View Controller. 509 00:27:15,000 --> 00:27:17,000 Vi kan se att det snyggt lyser. 510 00:27:17,000 --> 00:27:22,000 >> Om jag släpper med min mus har jag nu denna popup hit där jag har några alternativ. 511 00:27:22,000 --> 00:27:24,000 En av dessa är de händelser som jag kan registrera. 512 00:27:24,000 --> 00:27:28,000 Dessa är alla dessa metoder jag deklarerade i mitt h-filen som IBActions. 513 00:27:28,000 --> 00:27:31,000 Detta är hur XCode vet vad som ska visas i denna lilla lista, 514 00:27:31,000 --> 00:27:33,000 så det är bara en antydan. 515 00:27:33,000 --> 00:27:37,000 Om jag klickar på tryckte på knappen, jag registrerat nu händelsehanteraren. 516 00:27:37,000 --> 00:27:41,000 I JavaScript vi hade att säga jag har lite kod som registrerade händelsehanteraren. 517 00:27:41,000 --> 00:27:43,000 I Objective-C var det verkligen så enkelt. 518 00:27:43,000 --> 00:27:46,000 Om jag kör detta igen 519 00:27:46,000 --> 00:27:49,000 nu när jag trycker på knappen mitt händelsehanteraren ska skjuta, 520 00:27:49,000 --> 00:27:51,000 och jag kommer att få detta popup. 521 00:27:51,000 --> 00:27:54,000 Super, super enkelt där. 522 00:27:54,000 --> 00:27:57,000 >> Om du någonsin vill se alla händelser som är registrerade 523 00:27:57,000 --> 00:28:00,000 på en komponent om jag klickar på den här knappen 524 00:28:00,000 --> 00:28:02,000 och jag kom hit till höger 525 00:28:02,000 --> 00:28:05,000 Först ser hit jag kan göra saker som den typen av knappen 526 00:28:05,000 --> 00:28:08,000 så om du vill ha en av de jag är eller Lägg till Kontakt knappen 527 00:28:08,000 --> 00:28:10,000 eller vad som helst. 528 00:28:10,000 --> 00:28:13,000 Om jag vill se alla händelser som finns på den här knappen 529 00:28:13,000 --> 00:28:16,000 om jag kommer ända hit till höger 530 00:28:16,000 --> 00:28:19,000 Vi kan se här på de händelser jag har alla dessa olika händelser. 531 00:28:19,000 --> 00:28:23,000 Jag kan trycka på knappen, när jag släpper knappen, när jag dubbeltryck eller vad som helst, 532 00:28:23,000 --> 00:28:26,000 och det som jag just registrerat är denna händelse som kallas Touch upp inuti, 533 00:28:26,000 --> 00:28:29,000 och detta säger att så fort fingret lossnar knappen 534 00:28:29,000 --> 00:28:32,000 händelsen kommer att eld och det är precis vad som just hände. 535 00:28:32,000 --> 00:28:36,000 Detta är typ av standard pressade knappen händelse. 536 00:28:36,000 --> 00:28:39,000 >> Eventuella frågor hittills? 537 00:28:39,000 --> 00:28:43,000 Okej, det är hur vi kan börja koppla upp saker i vår kod 538 00:28:43,000 --> 00:28:46,000 in i saker inuti vårt gränssnitt. 539 00:28:46,000 --> 00:28:49,000 Kom ihåg den första vi behövde göra var att hitta koden, 540 00:28:49,000 --> 00:28:54,000 och då vi trådbunden upp gränssnittet till koden, 541 00:28:54,000 --> 00:28:57,000 och det är vår första app. 542 00:28:57,000 --> 00:29:00,000 Okej, det var riktigt coolt, och vi skapade den här knappen. 543 00:29:00,000 --> 00:29:03,000 Vad händer om vi inte vill ha att skapa ett gäng egenskaper 544 00:29:03,000 --> 00:29:05,000 representerar dessa knappar? 545 00:29:05,000 --> 00:29:08,000 Till exempel i Tic Tac Toe har jag 9 knappar, 546 00:29:08,000 --> 00:29:11,000 och det skulle vara super, super irriterande att behöva dra och släppa 9 gånger 547 00:29:11,000 --> 00:29:14,000 eller om jag var tvungen att göra Tic Tac Toe med 81 i stället för 9 548 00:29:14,000 --> 00:29:17,000 och jag var tvungen att dra och släppa 81 gånger, och det är halt. 549 00:29:17,000 --> 00:29:20,000 Vad vi kan göra istället är ungefär som en HTML 550 00:29:20,000 --> 00:29:23,000 när vi hade saker som ID och namn och vi kan söka efter saker 551 00:29:23,000 --> 00:29:27,000 av deras ID, det finns en liknande begrepp i iOS kallas taggar. 552 00:29:27,000 --> 00:29:31,000 >> En tagg är helt enkelt en unik numerisk identifierare för en komponent. 553 00:29:31,000 --> 00:29:34,000 Om jag säger detta har en tagg av 0, till exempel, 554 00:29:34,000 --> 00:29:38,000 Om jag skapar en knapp och ge den en tagg av 0, och vi får se hur man gör det på bara en sekund, 555 00:29:38,000 --> 00:29:41,000 Om jag vill få den knappen jag kan bara säga att jag vill ringa 556 00:29:41,000 --> 00:29:45,000 den viewWithTag metoden på objektet hit, 557 00:29:45,000 --> 00:29:48,000 den self.view, som representerar den aktuella skärmen, till exempel. 558 00:29:48,000 --> 00:29:53,000 Om jag kallar det viewWithTag metod kommer jag att dra tillbaka knappen med etiketten 0. 559 00:29:53,000 --> 00:29:58,000 Låt oss ta en titt på denna genom att bygga Tic Tac Toe. 560 00:29:58,000 --> 00:30:01,000 Först, det är min storyboard. 561 00:30:01,000 --> 00:30:05,000 Jag har skapat dessa 10 UI knappar. 562 00:30:05,000 --> 00:30:07,000 Lägg märke till de är alla i samma storlek. 563 00:30:07,000 --> 00:30:11,000 Om jag klickar på en av dessa och jag kommer tillbaka hit på denna höger sida 564 00:30:11,000 --> 00:30:15,000 ser du jag justerat teckensnitt här, så jag gjorde det teckensnitt lite större, 565 00:30:15,000 --> 00:30:19,000 men vad jag också gjorde var jag satt här taggen. 566 00:30:19,000 --> 00:30:23,000 Jag sade att detta har en tagg 1, och det är upp till vänster. 567 00:30:23,000 --> 00:30:26,000 >> Nu, om jag klickar på en annan knapp, som denna andra här, 568 00:30:26,000 --> 00:30:29,000 Nu ser du att min tagg 2. 569 00:30:29,000 --> 00:30:32,000 Var och en av dessa knappar har bara en unik tagg, 570 00:30:32,000 --> 00:30:35,000 och så detta är senare hur jag ska börja interagera 571 00:30:35,000 --> 00:30:38,000 med min app. 572 00:30:38,000 --> 00:30:40,000 Detta är alla inne i en View Controller, 573 00:30:40,000 --> 00:30:42,000 men här är vad vi har. 574 00:30:42,000 --> 00:30:44,000 Vi har 3 fastigheter här. 575 00:30:44,000 --> 00:30:49,000 Den första och den sista en kommer att representera tillståndet i min styrelse. 576 00:30:49,000 --> 00:30:53,000 I grund och botten denna första är en matris som representerar var Xs och OS är. 577 00:30:53,000 --> 00:30:57,000 Denna andra talar här oss vems tur det är. 578 00:30:57,000 --> 00:31:01,000 Du kommer att märka att jag också har dessa saker här. 579 00:31:01,000 --> 00:31:05,000 Innan när vi förklarade egenskaper vi gav dem ett namn och en typ. 580 00:31:05,000 --> 00:31:08,000 Vi kan också ge dem lite extra information här. 581 00:31:08,000 --> 00:31:11,000 Denna första säger nonatomic, och vad detta säger 582 00:31:11,000 --> 00:31:16,000 är i grunden bara en sak kommer någonsin att försöka komma åt den här variabeln åt gången. 583 00:31:16,000 --> 00:31:19,000 Du kan göra mer komplexa applikationer som är flertrådade, 584 00:31:19,000 --> 00:31:22,000 och så tillbaka i Scratch vi hade olika trådar, 585 00:31:22,000 --> 00:31:25,000 och olika sprites kan göra olika saker på samma gång. 586 00:31:25,000 --> 00:31:29,000 >> Om det inte är fallet, vilket det inte är i något som vi kommer att titta på, 587 00:31:29,000 --> 00:31:33,000 om vi säger nonatomic det faktiskt kommer att göra det lite snabbare. 588 00:31:33,000 --> 00:31:37,000 Vi har också denna sak som kallas tilldela, stark eller svag. 589 00:31:37,000 --> 00:31:40,000 Detta tilldela säger bara att det är en vanlig typ. 590 00:31:40,000 --> 00:31:43,000 Detta är inte ett objekt eller en pekare eftersom detta är bara en bool, 591 00:31:43,000 --> 00:31:46,000 så bool är inbyggd i Objective-C. 592 00:31:46,000 --> 00:31:49,000 Detta säger inte försöka göra något fint med pekare här. 593 00:31:49,000 --> 00:31:51,000 Det är en vanlig gammal scaler. 594 00:31:51,000 --> 00:31:54,000 Stark och svag, säger att detta svaga som faktiskt 595 00:31:54,000 --> 00:31:57,000 Jag vill att detta ska peka på något i View Controller. 596 00:31:57,000 --> 00:32:00,000 Jag tänker inte faktiskt tilldela eller init detta själv. 597 00:32:00,000 --> 00:32:04,000 Gränssnittet byggmästare, när jag kör programmet, kommer att hantera allt som initiering. 598 00:32:04,000 --> 00:32:07,000 Om jag säger svag, säger att någon annan kommer att skapa denna. 599 00:32:07,000 --> 00:32:09,000 Om jag säger stark, säger det att jag kommer att vara en 600 00:32:09,000 --> 00:32:12,000 som är att skapa detta forum objektet, 601 00:32:12,000 --> 00:32:14,000 och så här jag har några fler metoder här, 602 00:32:14,000 --> 00:32:18,000 till exempel en åtgärd när det nya spelet trycks, 603 00:32:18,000 --> 00:32:20,000 talan om när någon av de andra knapparna trycks, 604 00:32:20,000 --> 00:32:23,000 och et cetera. 605 00:32:23,000 --> 00:32:26,000 >> Vi kommer inte komma in för mycket av logiken i Tic Tac Toe, 606 00:32:26,000 --> 00:32:30,000 även om det är väldigt spännande, men låt oss ta en titt på 607 00:32:30,000 --> 00:32:33,000 några av de saker som vi kan göra inne i iOS. 608 00:32:33,000 --> 00:32:35,000 Det nya spelet metod kommer att avfyras 609 00:32:35,000 --> 00:32:37,000 när jag trycker på nytt spel knappen. 610 00:32:37,000 --> 00:32:41,000 Att koppla upp det jag helt enkelt komma över till min storyboard. 611 00:32:41,000 --> 00:32:43,000 Jag klickade på nytt spel. 612 00:32:43,000 --> 00:32:47,000 Om jag kommer hit till höger kan jag se att 613 00:32:47,000 --> 00:32:50,000 Tryck upp inne är kopplad till newGame metoden. 614 00:32:50,000 --> 00:32:53,000 Det är därför detta kommer att få sparken. 615 00:32:53,000 --> 00:32:56,000 Den newGame metoden kommer att göra en del inställningar. 616 00:32:56,000 --> 00:32:59,000 Det kommer att säga att jag vill att du ska rensa tillstånd av styrelsen. 617 00:32:59,000 --> 00:33:01,000 Detta är ett trevligt sätt på föränderlig matriser. 618 00:33:01,000 --> 00:33:03,000 Detta kommer att säga att det är nu X: s tur, 619 00:33:03,000 --> 00:33:07,000 och nu ska jag dra nytta av denna viewWithTag sak. 620 00:33:07,000 --> 00:33:11,000 >> Jag vet att mina knappar har taggarna 1-9, 621 00:33:11,000 --> 00:33:13,000 och det är något jag godtyckligt plockade. 622 00:33:13,000 --> 00:33:15,000 Om jag vill ställa texten för varje knapp vara tom 623 00:33:15,000 --> 00:33:17,000 eftersom jag har precis börjat ett nytt spel och jag vill inte ha någon 624 00:33:17,000 --> 00:33:20,000 Xs eller O lämnas över jag kan göra detta. 625 00:33:20,000 --> 00:33:24,000 Jag kan säga att jag vill ha vyn med taggen, 1, 2, 3, 4 et cetera. 626 00:33:24,000 --> 00:33:27,000 Detta kommer att dra en annan knapp varje gång. 627 00:33:27,000 --> 00:33:30,000 Här kommer jag att kasta det åt UIButton. 628 00:33:30,000 --> 00:33:33,000 Precis som vi kan kasta Ints till flöten och vice versa 629 00:33:33,000 --> 00:33:37,000 Detta säger att jag vill kasta det till en UIButton. 630 00:33:37,000 --> 00:33:40,000 Det innebär den typ av detta kommer att bli en UIButton * 631 00:33:40,000 --> 00:33:43,000 på grund av pekare, men oroa dig inte, de är inte skrämmande längre. 632 00:33:43,000 --> 00:33:47,000 >> När jag har den här knappen ska jag ringa en metod på den. 633 00:33:47,000 --> 00:33:50,000 Denna metod kallas setTitle forState, och så detta säger 634 00:33:50,000 --> 00:33:53,000 Jag vill ställa texten i knappen vara den tomma strängen, 635 00:33:53,000 --> 00:33:57,000 och jag vill att det ska vara den tomma strängen när den inte intryckt. 636 00:33:57,000 --> 00:34:01,000 Om jag använder denna metod kan jag ändra texten på knappen 637 00:34:01,000 --> 00:34:04,000 så fort någon slår det, men vi vill säga när knappen bara sitter där 638 00:34:04,000 --> 00:34:07,000 Jag vill att texten ska vara tom. 639 00:34:07,000 --> 00:34:10,000 Slutligen kommer vi att initiera min styrelse, 640 00:34:10,000 --> 00:34:12,000 och jag kommer att säga att allt är närvarande 0, 641 00:34:12,000 --> 00:34:15,000 så detta styrelseledamöterna oföränderliga är en föränderlig matris, 642 00:34:15,000 --> 00:34:21,000 vilket betyder att jag kan ringa addObject metoden och bara en 0 inuti den. 643 00:34:21,000 --> 00:34:23,000 Det är vad som händer när jag skapar ett nytt spel. 644 00:34:23,000 --> 00:34:25,000 >> Låt oss ta en titt på en annan. 645 00:34:25,000 --> 00:34:28,000 Denna metod här är IBAction som kommer att tryckas 646 00:34:28,000 --> 00:34:31,000 varje gång en av dessa rutor trycks in. 647 00:34:31,000 --> 00:34:33,000 Nu har vi några Tic Tac Toe logik här. 648 00:34:33,000 --> 00:34:36,000 Vi räkna ut vems tur det är, 649 00:34:36,000 --> 00:34:39,000 och bygger på att vi antingen satt ett X eller ett O, 650 00:34:39,000 --> 00:34:43,000 men vi märker att vi återanvänder samma händelsehanterare 651 00:34:43,000 --> 00:34:45,000 för varenda en av dessa knappar. 652 00:34:45,000 --> 00:34:49,000 Det betyder att jag inte har en metod för den övre vänstra knappen, 653 00:34:49,000 --> 00:34:52,000 en annan metod för nedre högra knappen, även om jag kunde ha gjort det. 654 00:34:52,000 --> 00:34:54,000 Det skulle inte vara riktigt god design. 655 00:34:54,000 --> 00:34:57,000 Vad jag gör här är jag faktiskt tänker bestämma 656 00:34:57,000 --> 00:35:00,000 vad taggen på knappen som trycktes är. 657 00:35:00,000 --> 00:35:04,000 Du märker att denna pjäs metoden tar ett argument. 658 00:35:04,000 --> 00:35:07,000 Det kallas avsändare och vad avsändaren är avsändaren kommer att 659 00:35:07,000 --> 00:35:10,000 representerar exakt vad som vidtagit åtgärder på. 660 00:35:10,000 --> 00:35:15,000 Om jag trycker på en knapp, är denna avsändare kommer att vara att UIButton 661 00:35:15,000 --> 00:35:18,000 att jag faktiskt ner, betyder så att den UIButton 662 00:35:18,000 --> 00:35:20,000 har en tagg eftersom jag skapade en tagg. 663 00:35:20,000 --> 00:35:23,000 >> Om jag vill komma åt taggen kan jag bara säga 664 00:35:23,000 --> 00:35:26,000 Jag vill att taggen av avsändaren, 665 00:35:26,000 --> 00:35:28,000 och igen, jag gjuten bara den till en UIButton. 666 00:35:28,000 --> 00:35:32,000 Jag råkar veta att avsändaren kommer att vara en UIButton. 667 00:35:32,000 --> 00:35:34,000 Det behöver inte alltid vara en UIButton. 668 00:35:34,000 --> 00:35:36,000 Jag kunde till exempel registrera samma händelsehanterare 669 00:35:36,000 --> 00:35:38,000  för en för en knapp, en för ett skjutreglage. 670 00:35:38,000 --> 00:35:40,000 I det här fallet vet jag att de är alla knappar, så jag kommer att säga 671 00:35:40,000 --> 00:35:43,000 Jag vill att detta ska vara en knapp, och då kan jag få tag, 672 00:35:43,000 --> 00:35:48,000 och från taggen Nu vet jag var jag är inne i styrelsen. 673 00:35:48,000 --> 00:35:51,000 Då kan jag bara ställa antingen X eller O, kan vända tur, 674 00:35:51,000 --> 00:35:54,000 kontrollera vem har vunnit, et cetera. 675 00:35:54,000 --> 00:35:59,000 >> Har du frågor om detta så här långt? 676 00:35:59,000 --> 00:36:02,000 Okej, all kod vi upp på nätet, vi vill inte komma in för mycket 677 00:36:02,000 --> 00:36:06,000 av Tic Tac Toe logik, men nu kan man se att verkligen 678 00:36:06,000 --> 00:36:09,000 allt vi gör är att vi looping över denna array, 679 00:36:09,000 --> 00:36:13,000 så vi har ett par för slingor här och vi bara jämföra för att se 680 00:36:13,000 --> 00:36:18,000 har vi en match i alla rader, en match i en kolumn eller nåt sånt. 681 00:36:18,000 --> 00:36:21,000 För att verkligen köra den här appen, om jag trycker på en av dessa knappar 682 00:36:21,000 --> 00:36:24,000 som spelar metod sparken, så det betyder att jag bara satt 683 00:36:24,000 --> 00:36:31,000 knappen för att vara en X, så nu denna knapp kommer att vara en O, och så vidare, 684 00:36:31,000 --> 00:36:35,000 och så det är hur vi börjar interagera med denna enda sida app. 685 00:36:35,000 --> 00:36:38,000 >> Vi kommer att lägga in koden, så känn dig fri att granska det, 686 00:36:38,000 --> 00:36:43,000 men låt oss nu tala om några program som är mer än bara en sida. 687 00:36:43,000 --> 00:36:47,000 Lika spännande som Tic Tac Toe var en hel del apps inuti iOS 688 00:36:47,000 --> 00:36:50,000 är typ av dessa borr ner saker med flera skärmar. 689 00:36:50,000 --> 00:36:54,000 Det första konceptet som vi behöver prata om är protokoll, 690 00:36:54,000 --> 00:36:57,000 och ett protokoll är helt enkelt en uppsättning metoder 691 00:36:57,000 --> 00:36:59,000 att du kan lova att definiera. 692 00:36:59,000 --> 00:37:02,000 Om jag skapa denna nya protokollet med 2 metoder, det första, 693 00:37:02,000 --> 00:37:05,000 Om returtyp är ogiltig, kallade jag det foo. 694 00:37:05,000 --> 00:37:07,000 Det tar inga argument. Jag har en annan metod. 695 00:37:07,000 --> 00:37:11,000 Den returnerar en int. Jag kallade det bar, och det tar ett argument. 696 00:37:11,000 --> 00:37:14,000 Allt detta protokoll är att kallas SomeProtocol här uppe, 697 00:37:14,000 --> 00:37:19,000 Detta är en uppsättning saker som någon kan genomföra. 698 00:37:19,000 --> 00:37:22,000 Jag har inte inuti detta protokoll sagt vad foo gör. 699 00:37:22,000 --> 00:37:26,000 Istället, jag säger bara att du kan definiera foo om du vill. 700 00:37:26,000 --> 00:37:30,000 Om jag skapar en vy styrenhet eller skapa en klass 701 00:37:30,000 --> 00:37:33,000 Jag kan insidan av den klassen löfte att genomföra 702 00:37:33,000 --> 00:37:40,000 några av dessa metoder, så till exempel, om säga 703 00:37:40,000 --> 00:37:43,000 Detta säger nu jag gör ett löfte till dig som insidan 704 00:37:43,000 --> 00:37:50,000 detta View Controller klass I kommer att ha definitioner för både foo och bar. 705 00:37:50,000 --> 00:37:52,000 >> Varför är det bra? 706 00:37:52,000 --> 00:37:55,000 Många komponenter inuti iOS dra nytta av detta 707 00:37:55,000 --> 00:37:58,000 designmönster som kallas delegering och vad delegationen säger 708 00:37:58,000 --> 00:38:01,000 är det till exempel om jag har en textruta 709 00:38:01,000 --> 00:38:04,000 och det finns några händelser som kan registreras insidan av min textrutan 710 00:38:04,000 --> 00:38:07,000 snarare än att skapa separata händelser vad jag kan göra är att jag kan säga 711 00:38:07,000 --> 00:38:10,000 delegaten av denna textruta blir några objekt. 712 00:38:10,000 --> 00:38:13,000 När jag säger att detta är en delegat nu som innebär att 713 00:38:13,000 --> 00:38:16,000 när någon händelse skulle ha fått sparken i textrutan 714 00:38:16,000 --> 00:38:18,000 snarare än att behöva registrera den eller nåt sånt 715 00:38:18,000 --> 00:38:21,000 det bara att anropa en metod på delegaten. 716 00:38:21,000 --> 00:38:24,000 Till exempel insidan av min textruta har jag en metod för när jag trycker 717 00:38:24,000 --> 00:38:27,000 som gjort knappen i det nedre högra, 718 00:38:27,000 --> 00:38:30,000 och så snarare än att registrera händelsehanterare vad jag kan säga är 719 00:38:30,000 --> 00:38:34,000 textrutan här är ett objekt som jag vill att du ska anropa en metod på 720 00:38:34,000 --> 00:38:37,000 Varje gång någon trycker på knappen Klar, 721 00:38:37,000 --> 00:38:40,000 och det betyder att objektet måste genomföra några protokoll 722 00:38:40,000 --> 00:38:45,000 som säger att jag lovar att definiera det gjort Knapp Åtgärd, 723 00:38:45,000 --> 00:38:47,000 för om det inte definieras denna metod och du trycker på Klar, 724 00:38:47,000 --> 00:38:49,000 då det kommer att vara förvirrande. 725 00:38:49,000 --> 00:38:55,000 >> Låt oss ta en titt på ett exempel. 726 00:38:55,000 --> 00:38:58,000 Här har jag bara en textruta, 727 00:38:58,000 --> 00:39:04,000 och en av egenskaperna hos den här textrutan över här på höger sida är delegaten. 728 00:39:04,000 --> 00:39:06,000 Detta är en egenskap av klassen. 729 00:39:06,000 --> 00:39:09,000 Vad jag gjorde här är jag kontrollerar klickade, och jag drog från denna plats hit 730 00:39:09,000 --> 00:39:13,000 till View Controller och som säger nu är utsedd av textrutan 731 00:39:13,000 --> 00:39:18,000 kommer att bli View Controller. 732 00:39:18,000 --> 00:39:20,000 Det betyder att när vissa åtgärder inträffar, snarare än att registrera 733 00:39:20,000 --> 00:39:25,000 separata händelsehanterare Jag vill att du ska skicka dem till delegaten. 734 00:39:25,000 --> 00:39:28,000 Nu ska vi ta en titt på min åsikt styrenheten. 735 00:39:28,000 --> 00:39:32,000 Inuti. H. filen jag har gjort ett löfte. 736 00:39:32,000 --> 00:39:36,000 Jag har lovat att genomföra några metoder inuti detta protokoll 737 00:39:36,000 --> 00:39:38,000 kallas UITextFieldDelegate, och igen, 738 00:39:38,000 --> 00:39:42,000 Detta är bara några lista över några saker som jag kan välja att genomföra. 739 00:39:42,000 --> 00:39:46,000 >> Om jag kommer hit i min. M. fil, har jag genomfört en sådan metod. 740 00:39:46,000 --> 00:39:49,000 Jag har kallat det textFieldShouldReturn 741 00:39:49,000 --> 00:39:52,000 eftersom det är vad det hette insidan av protokollet. 742 00:39:52,000 --> 00:39:57,000 Och nu när jag trycker på knappen Klar insidan av den textfältet 743 00:39:57,000 --> 00:40:00,000 Detta är vad som kommer att bli synad, så jag inte registrera en händelsehanterare. 744 00:40:00,000 --> 00:40:03,000 Jag är ansluten delegaten, och när denna händelse sparken 745 00:40:03,000 --> 00:40:08,000 Detta är den metod som kommer att få kallas så om jag kommer hit till min storyboard och köra det, 746 00:40:08,000 --> 00:40:11,000 Även om det är laddar vi kan se vad det gör. 747 00:40:11,000 --> 00:40:13,000 På min skärm har jag 2 saker. 748 00:40:13,000 --> 00:40:16,000 Jag har den här textfältet, och jag har denna etikett. 749 00:40:16,000 --> 00:40:19,000 Jag säger bara jag vill texten i denna etikett 750 00:40:19,000 --> 00:40:23,000 att vara lika med vad användaren har skrivit in inuti textfältet. 751 00:40:23,000 --> 00:40:26,000 Denna nästa rad här är helt enkelt en metod som jag ringer 752 00:40:26,000 --> 00:40:29,000 i textfältet som säger att jag vill att du ska dölja tangentbordet. 753 00:40:29,000 --> 00:40:33,000 Detta är bara godtyckligt sätt som Apple har valt. 754 00:40:33,000 --> 00:40:38,000 >> Igen, innan jag gjorde något jag var tvungen att koppla upp allt, så jag först kom hit. 755 00:40:38,000 --> 00:40:42,000 Från View Controller jag dra över till textrutan. 756 00:40:42,000 --> 00:40:46,000 Jag släpper, och jag kan se här att jag kan göra detta egenskapen textfältet 757 00:40:46,000 --> 00:40:49,000 eftersom mer än här i View Controller har jag definierat en fastighet 758 00:40:49,000 --> 00:40:52,000 som är en IBOutlet i ett textfält. 759 00:40:52,000 --> 00:40:55,000 Det säger att jag kan koppla den här egenskapen upp 760 00:40:55,000 --> 00:40:59,000 till ett textfält i min UI. 761 00:40:59,000 --> 00:41:03,000 Nu när jag klickar på Jag kan börja skriva. 762 00:41:03,000 --> 00:41:06,000 Nu om jag klickar på knappen Klar detta kommer att avfyra 763 00:41:06,000 --> 00:41:08,000 en händelse som jag nu kan svara på. 764 00:41:08,000 --> 00:41:10,000 Inga händelsehanterare. 765 00:41:10,000 --> 00:41:13,000 Det är så jag bara svarat på den knappen Klar. 766 00:41:13,000 --> 00:41:15,000 Vettigt? 767 00:41:15,000 --> 00:41:20,000 >> Detta är inte en design mönster som-du aldrig kan hitta dig själv 768 00:41:20,000 --> 00:41:23,000 att skapa en egen protokollet, men bara vet att vissa 769 00:41:23,000 --> 00:41:27,000 olika iOS-komponenter registrera händelser på olika sätt. 770 00:41:27,000 --> 00:41:29,000 Knappar, till exempel använda dessa IBActions. 771 00:41:29,000 --> 00:41:32,000 Textfält, å andra sidan, kommer att använda delegater. 772 00:41:32,000 --> 00:41:36,000 Vi kan se och du kan se allt detta upp insidan av dokumentationen. 773 00:41:36,000 --> 00:41:41,000 Förresten, det finns faktiskt massor av UI saker inbyggt i iOS för dig, 774 00:41:41,000 --> 00:41:46,000 så till exempel, hur jag gjorde det säga gjort längst ner till höger 775 00:41:46,000 --> 00:41:48,000 är Jag valde detta textfält. 776 00:41:48,000 --> 00:41:50,000 Jag kom hit. 777 00:41:50,000 --> 00:41:53,000 Jag rullas ner lite tillbaka nyckel, 778 00:41:53,000 --> 00:41:56,000 och jag kan faktiskt göra detta till en hel massa saker, som om jag vill det vill säga 779 00:41:56,000 --> 00:42:00,000 nödsamtal utan jag kan göra det, vilket är helt slumpmässigt, 780 00:42:00,000 --> 00:42:02,000 och jag vet inte varför det finns en inbyggd nödsamtal knappen 781 00:42:02,000 --> 00:42:06,000 men, säger nödsamtal i riktigt små bokstäver. 782 00:42:06,000 --> 00:42:08,000 Där du går. 783 00:42:08,000 --> 00:42:12,000 >> Definitivt utforska alla dessa olika alternativ i iOS. 784 00:42:12,000 --> 00:42:14,000 Eventuella frågor om delegater? 785 00:42:14,000 --> 00:42:18,000 Återigen, bara en intressant design mönster som du bör vara medveten om. 786 00:42:18,000 --> 00:42:22,000 Okej, låt oss nästa ta en titt på bord vyer. 787 00:42:22,000 --> 00:42:26,000 En tabell uppfattning är i princip att lista över objekt som är överallt i iOS. 788 00:42:26,000 --> 00:42:29,000 När du bläddrar igenom alla dina kontakter, du tittar på 789 00:42:29,000 --> 00:42:34,000 inställningen sidan och den typen av lista över saker kallas tabellvy. 790 00:42:34,000 --> 00:42:37,000 Implementera en tabellvy i iOS är ganska enkel. 791 00:42:37,000 --> 00:42:41,000 Istället för att göra en klass som härstammar från det UIViewController 792 00:42:41,000 --> 00:42:44,000 som vi har gjort innan vi helt enkelt måste säga snarare än 793 00:42:44,000 --> 00:42:46,000 allt en UIViewController inte jag vill göra, 794 00:42:46,000 --> 00:42:50,000 Jag säger allt en UITableViewController inte jag vill göra, 795 00:42:50,000 --> 00:42:54,000 så att bara lägger några ytterligare saker som är helt gjort för oss. 796 00:42:54,000 --> 00:42:58,000 Vi måste göra mycket lite för att i princip fylla i tomrummet inuti tabellen. 797 00:42:58,000 --> 00:43:02,000 >> För att visa en tabell måste jag svara på några frågor. 798 00:43:02,000 --> 00:43:06,000 Den första frågan jag behöver besvara är hur många avsnitt är i tabellen? 799 00:43:06,000 --> 00:43:08,000 När du bläddrar igenom dina kontakter app du kommer att märka att det är typ av 800 00:43:08,000 --> 00:43:12,000 organiseras av As, då har du B, och du har den lilla sub rubrik. 801 00:43:12,000 --> 00:43:14,000 Vardera av dessa kallas ett avsnitt. 802 00:43:14,000 --> 00:43:16,000 Du kanske eller kanske inte behöver dessa. 803 00:43:16,000 --> 00:43:19,000 Det första du behöver göra är att implementera en metod 804 00:43:19,000 --> 00:43:22,000 heter Tableview: numberOfSectionsInTableView. 805 00:43:22,000 --> 00:43:25,000 Som returnerar helt enkelt hur många avsnitt du har, 806 00:43:25,000 --> 00:43:29,000 så detta kunde säga returnera en om du har en stor tabell vy. 807 00:43:29,000 --> 00:43:33,000 Nästa fråga som iOS behöver veta är hur många rader har du? 808 00:43:33,000 --> 00:43:36,000 Till exempel, du bläddra igenom en tabell vy. 809 00:43:36,000 --> 00:43:39,000 Du har ett fast antal låtar du tittar på eller ett fast antal kontakter. 810 00:43:39,000 --> 00:43:41,000 Om du är mig naturligtvis inte så många, 811 00:43:41,000 --> 00:43:44,000 och så det är hur iOS vet hur många celler som ska visas. 812 00:43:44,000 --> 00:43:46,000 >> Återigen kan detta säga något i stil tillbaka 3. 813 00:43:46,000 --> 00:43:49,000 Min tabellvyn har 3 rader. 814 00:43:49,000 --> 00:43:52,000 Slutligen måste iOS veta vad varje cell ser ut, 815 00:43:52,000 --> 00:43:54,000 så vad det faktiskt kommer att göra är att anropa den här metoden här nere, 816 00:43:54,000 --> 00:43:57,000 denna Tableview: cellForRowAtIndexPath. 817 00:43:57,000 --> 00:44:01,000 Det kommer att kalla denna metod på varje enskild cell inne i tabellen. 818 00:44:01,000 --> 00:44:03,000 Hur vet den hur många gånger att kalla det? 819 00:44:03,000 --> 00:44:06,000 Tja, sa ju att det inne i antalet rader i avsnittet. 820 00:44:06,000 --> 00:44:08,000 Vi kommer att kalla detta för alla våra celler, 821 00:44:08,000 --> 00:44:11,000 och insidan av detta är där du faktiskt kan göra saker som 822 00:44:11,000 --> 00:44:16,000 ställa texten eller berätta vad den lilla blå knappen på höger sida gör. 823 00:44:16,000 --> 00:44:19,000 Mönstret för att få dessa celler, kommer vi att använda denna metod 824 00:44:19,000 --> 00:44:22,000 kallas dequeueReusableCellWithIdentifier. 825 00:44:22,000 --> 00:44:29,000 >> Objective-C är faktiskt mycket väl känd för löjliga längden av deras metod namn, 826 00:44:29,000 --> 00:44:32,000 och detta är verkligen en trevlig typexempel exempel. 827 00:44:32,000 --> 00:44:37,000 Vad denna metod gör är det bara säger att jag vill att du ska ge mig en cell. 828 00:44:37,000 --> 00:44:39,000 Bara en iOS sak. 829 00:44:39,000 --> 00:44:41,000 Om du har något som 100.000 låtar på din iPod 830 00:44:41,000 --> 00:44:45,000 Vad iOS inte vill göra är att fördela 100.000 celler, 831 00:44:45,000 --> 00:44:48,000 för om du är på toppen av listan, behöver du verkligen att allokera minne 832 00:44:48,000 --> 00:44:51,000 för cellen som är 99.000 rader ner? 833 00:44:51,000 --> 00:44:55,000 Nej, för som du bläddrar du typ av fördela när du går längs. 834 00:44:55,000 --> 00:44:57,000 Detta är gjort för dig. 835 00:44:57,000 --> 00:44:59,000 Du behöver inte oroa dig för allt det dumma prestanda grejer. 836 00:44:59,000 --> 00:45:02,000 Allt du säger är att du anropar den här metoden dequeueReusableCellWithIdentifier, 837 00:45:02,000 --> 00:45:06,000 och detta säger, okej, om du behöver jag ska skapa en ny cell för dig. 838 00:45:06,000 --> 00:45:09,000 >> Men om du är i botten av tabellen och du har redan tilldelats vissa celler 839 00:45:09,000 --> 00:45:12,000 högst upp i tabellen som du verkligen inte kommer att behöva något snart 840 00:45:12,000 --> 00:45:15,000 Jag ska ge er ett av de tillbaka i stället för att fördela en ny, 841 00:45:15,000 --> 00:45:17,000 och så detta är en trevlig prestanda oro. 842 00:45:17,000 --> 00:45:21,000 Du behöver inte tilldela cellerna själv. 843 00:45:21,000 --> 00:45:23,000 Det kommer att ge dig tillbaka en cell. 844 00:45:23,000 --> 00:45:25,000 Det kommer att gå tillbaka till en cell objekt. 845 00:45:25,000 --> 00:45:28,000 När du har cellen objekt du kan göra saker på det. 846 00:45:28,000 --> 00:45:32,000 Du kan ställa in texten i cellen med denna egenskap kallas textetikett. 847 00:45:32,000 --> 00:45:36,000 Du kan lägga till att pilen till höger eller någon annan random stuff 848 00:45:36,000 --> 00:45:41,000 med denna andra egenskap som kallas accessoryType, och så vidare och så vidare. 849 00:45:41,000 --> 00:45:46,000 >> Låt oss ta en titt på faktiskt genomföra en tabellvy nu. 850 00:45:46,000 --> 00:45:49,000 När jag skapade detta projekt 851 00:45:49,000 --> 00:45:53,000 istället för att säga samma vy ansökan kom jag faktiskt hit 852 00:45:53,000 --> 00:45:57,000 till master-detalj ansökan och så i princip motsvarar detta programmet E-post 853 00:45:57,000 --> 00:46:01,000 på iPad med tabellen syn på vänster och sedan innehållet till höger. 854 00:46:01,000 --> 00:46:07,000 På iPod eller iPhone detta kommer att motsvara en enda tabell vy. 855 00:46:07,000 --> 00:46:10,000 Det är där jag fick mina starter kod. 856 00:46:10,000 --> 00:46:13,000 >> Låt oss först ta en titt på storyboard. 857 00:46:13,000 --> 00:46:15,000 Allt detta skedde för mig, i princip skapas. 858 00:46:15,000 --> 00:46:18,000 Denna navigeringsfältet visade mig vad ett exempel cell skulle kunna se ut, 859 00:46:18,000 --> 00:46:22,000 och jag kan dubbelklicka på det, ändra titeln. 860 00:46:22,000 --> 00:46:25,000 Alla andra UI problem jag kan hantera det. 861 00:46:25,000 --> 00:46:27,000 Rubriken filen ser väldigt enkelt. 862 00:46:27,000 --> 00:46:30,000 I stället för att säga detta är UIViewController vi nu säger att detta är en 863 00:46:30,000 --> 00:46:35,000 TableViewController, så vi vet att vi vill kalla alla dessa bord metoder. 864 00:46:35,000 --> 00:46:38,000 Nästa Jag vill skapa en egenskap som kommer att representera 865 00:46:38,000 --> 00:46:40,000 saker inuti mitt bord. 866 00:46:40,000 --> 00:46:43,000 Denna tabell kommer att godtyckligt visa 867 00:46:43,000 --> 00:46:46,000 En förteckning över frukt, så jag måste skapa lite array 868 00:46:46,000 --> 00:46:49,000 där jag kan sätta frukt. 869 00:46:49,000 --> 00:46:52,000 Insidan av min genomförandet fil det första jag vill göra 870 00:46:52,000 --> 00:46:55,000 är jag vill se till att jag initiera arrayen. 871 00:46:55,000 --> 00:46:58,000 >> Jag sa Alloc init, skapade min frukt array, 872 00:46:58,000 --> 00:47:03,000 och jag lägger 4 saker till den, varav en är mycket mer kontroversiellt än de andra 3. 873 00:47:03,000 --> 00:47:06,000 Och nu har jag en rad storlek 4. 874 00:47:06,000 --> 00:47:08,000 Vi skakar det i CS50. 875 00:47:08,000 --> 00:47:11,000 Jag har nu en rad storlek 4. 876 00:47:11,000 --> 00:47:13,000 Nu ska jag börja svara på dessa frågor, och faktiskt, 877 00:47:13,000 --> 00:47:16,000 När jag skapade denna app allt detta redan gjort för mig. 878 00:47:16,000 --> 00:47:19,000 Jag behövde inte skriva ut antalet sektioner i tabellvyn. 879 00:47:19,000 --> 00:47:22,000 Det var redan där, och jag fyller i tomrummen. 880 00:47:22,000 --> 00:47:24,000 Hur många avsnitt har jag? 881 00:47:24,000 --> 00:47:26,000 En. Allt klart. 882 00:47:26,000 --> 00:47:28,000 Hur många rader har jag? 883 00:47:28,000 --> 00:47:31,000 Tja, jag har en rad för varje frukt, så detta räknas 884 00:47:31,000 --> 00:47:34,000 är en egenskap hos en array som säger hur stort är det? 885 00:47:34,000 --> 00:47:36,000 Det är hur många rader jag har. 886 00:47:36,000 --> 00:47:42,000 Slutligen måste jag säga vad varje cell ut? 887 00:47:42,000 --> 00:47:46,000 Jag ska säga dequeueReusableCellWithIdentifier. 888 00:47:46,000 --> 00:47:48,000 >> Återigen, detta redan skrivit för mig. 889 00:47:48,000 --> 00:47:51,000 Jag behövde inte göra detta själv, och jag vill komma tillbaka 890 00:47:51,000 --> 00:47:54,000 denna cell på den här platsen. 891 00:47:54,000 --> 00:47:57,000 Kom ihåg att vi kallar samma metod på varje enskild cell, 892 00:47:57,000 --> 00:48:01,000 och detta argument här, här indexPath argument 893 00:48:01,000 --> 00:48:03,000 säger vad rad jag i. 894 00:48:03,000 --> 00:48:05,000 Om jag säger indexPath.row här nere 895 00:48:05,000 --> 00:48:09,000 detta kommer att vara 0, då kommer det att vara 1, då kommer det att vara 2, och det är så jag vet 896 00:48:09,000 --> 00:48:11,000 vilken cell jag för närvarande är visning. 897 00:48:11,000 --> 00:48:15,000 Jag vill ställa texten i cellen använder denna textLabel fastighet 898 00:48:15,000 --> 00:48:19,000 att gå i min frukt array och få 899 00:48:19,000 --> 00:48:21,000 objektet som motsvarar varje rad. 900 00:48:21,000 --> 00:48:24,000 Om detta är en sträng, jag sätta nu 901 00:48:24,000 --> 00:48:28,000 egenskapen text till en sträng. 902 00:48:28,000 --> 00:48:30,000 Jag kan göra en annan sak. 903 00:48:30,000 --> 00:48:32,000 Jag kan också registrera en händelsehanterare på varje cellerna, 904 00:48:32,000 --> 00:48:35,000 så när jag trycker alla dessa celler 905 00:48:35,000 --> 00:48:39,000 Detta didSelectRowAtIndexPath, detta kommer att kallas för mig, 906 00:48:39,000 --> 00:48:42,000 så enkelt genom att definiera det jag kan nu hantera vad som händer 907 00:48:42,000 --> 00:48:46,000 När du trycker på en cell, och igen, vi passerar i vilken cell tappades 908 00:48:46,000 --> 00:48:50,000 så att vi kan återanvända samma händelsehanterare för alla våra celler. 909 00:48:50,000 --> 00:48:53,000 >> Återigen, detta är något som iOS gör för mig. 910 00:48:53,000 --> 00:48:55,000 Låt oss visa en annan irriterande popup 911 00:48:55,000 --> 00:48:59,000 som säger helt enkelt att du valde något där att något 912 00:48:59,000 --> 00:49:04,000 kommer att bli raden objektet. 913 00:49:04,000 --> 00:49:10,000 När jag kör detta, jag kommer att ha denna fina tabellvyn 914 00:49:10,000 --> 00:49:14,000 med en rad för varje av dessa frukt, och om jag trycker en 915 00:49:14,000 --> 00:49:16,000 det säger mig vad som hände. 916 00:49:16,000 --> 00:49:21,000 Vettigt? 917 00:49:21,000 --> 00:49:24,000 Låt oss bygga lite mer komplex av en app, 918 00:49:24,000 --> 00:49:28,000 så mycket som att klicka du valde tomat är. 919 00:49:28,000 --> 00:49:31,000 Den trevliga delen om storyboarding 920 00:49:31,000 --> 00:49:35,000 är det inte bara kommer att hjälpa oss att utforma skärmar individuellt, 921 00:49:35,000 --> 00:49:38,000 det kommer också att hjälpa oss att knyta samman hela vårt app, 922 00:49:38,000 --> 00:49:42,000 så att den slutliga applikationen kommer vi att bygga är denna fina sport nyhetsläsare, 923 00:49:42,000 --> 00:49:45,000 och så det kommer att ha flera skärmar, så jag kan faktiskt representera 924 00:49:45,000 --> 00:49:48,000 var och en av dessa multipla skärmar på storyboard, 925 00:49:48,000 --> 00:49:52,000 och jag kan zooma ut och se min app från en hög nivå. 926 00:49:52,000 --> 00:49:55,000 >> För att skapa ett nytt element insidan av min storyboard 927 00:49:55,000 --> 00:49:59,000 Det är verkligen enkelt inuti Interface Builder. 928 00:49:59,000 --> 00:50:01,000 Om jag vill lägga en annan skärm till detta, till exempel, 929 00:50:01,000 --> 00:50:06,000 Jag kan först zooma ut med nypa zoom som Apple älskar så mycket, 930 00:50:06,000 --> 00:50:09,000 och här nere innan jag söka efter en knapp 931 00:50:09,000 --> 00:50:12,000 och jag drar och släpper en knapp 932 00:50:12,000 --> 00:50:15,000 Om jag vill skapa en ny skärm kan jag faktiskt bara dra och släppa 933 00:50:15,000 --> 00:50:19,000 en hel View Controller, så om jag väljer det, dra det över här, 934 00:50:19,000 --> 00:50:23,000 hej, det finns en annan skärm, och så nu använder samma storyboard fil 935 00:50:23,000 --> 00:50:26,000 Jag kan ha alla skärmar insidan av min app, och jag kan zooma ut 936 00:50:26,000 --> 00:50:28,000 och se hur de samverkar. 937 00:50:28,000 --> 00:50:32,000 Dessa kommer inte interagerar ännu. 938 00:50:32,000 --> 00:50:36,000 Det sätt på vilket dessa 2 skärmar interagerar är du definiera relationer. 939 00:50:36,000 --> 00:50:39,000 Du kan i princip säga här skärmen när du trycker på den här knappen, 940 00:50:39,000 --> 00:50:42,000 Jag vill att du glida över till denna nya skärm. 941 00:50:42,000 --> 00:50:44,000 Det innebär att det finns denna typ av relation mellan 942 00:50:44,000 --> 00:50:46,000  den första skärmen och den andra skärmen. 943 00:50:46,000 --> 00:50:49,000 Du har i grunden en pil från den knappen till den andra skärmen 944 00:50:49,000 --> 00:50:53,000 säger att när du trycker på den här knappen som är där jag vill gå. 945 00:50:53,000 --> 00:50:57,000 Precis som vi kontrollerar klickas och dras för att definiera dessa försäljningsställen 946 00:50:57,000 --> 00:51:01,000 vi ska göra samma sak att definiera dessa segues. 947 00:51:01,000 --> 00:51:05,000 >> Vi får se ett exempel på det, och innan vi faktiskt övergången 948 00:51:05,000 --> 00:51:08,000 från en skärm till en annan iOS är tillräckligt bra för att anropa den här metoden 949 00:51:08,000 --> 00:51:11,000 called prepareForSegue, och det är där vi kan börja 950 00:51:11,000 --> 00:51:14,000 skicka data från en applikation till en annan. 951 00:51:14,000 --> 00:51:17,000 I exemplet vi ska titta på det kommer i princip att vi 952 00:51:17,000 --> 00:51:20,000 att filtrera baseball team av ligor och divisioner. 953 00:51:20,000 --> 00:51:23,000 När jag väljer en liga, till exempel, vill jag övergången 954 00:51:23,000 --> 00:51:25,000 till min nästa skärm där jag kan visa alla divisioner 955 00:51:25,000 --> 00:51:27,000 i den liga eller alla de olika teamen. 956 00:51:27,000 --> 00:51:31,000 Jag måste skicka till den skärm vilka lag du ska visa. 957 00:51:31,000 --> 00:51:35,000 För att göra det jag ska dra nytta av denna metod här. 958 00:51:35,000 --> 00:51:39,000 >> Slutligen, bara en slumpmässig punkt på iOS. 959 00:51:39,000 --> 00:51:41,000 Om du vill lagra data finns denna sak kallad grundläggande uppgifter, 960 00:51:41,000 --> 00:51:44,000 vilket är faktiskt ganska komplicerat att arbeta med. 961 00:51:44,000 --> 00:51:47,000 Du kan också använda SQL för att lagra data, 962 00:51:47,000 --> 00:51:51,000 som, återigen, är trevligt men typ av på mer komplicerade sidan att arbeta med, 963 00:51:51,000 --> 00:51:55,000 men iOS stöder också dessa riktigt coola saker som kallas egendom listor, 964 00:51:55,000 --> 00:52:00,000 och en fastighet lista är bara en fil som representerar viktiga värdepar. 965 00:52:00,000 --> 00:52:03,000 Du definierar en lista med nycklar, och du säger här knappen kommer att bli en array. 966 00:52:03,000 --> 00:52:06,000 Denna knapp kommer att vara en sträng, och i princip allt du kan göra 967 00:52:06,000 --> 00:52:10,000 i JSON kan du göra inne i en fastighet lista, 968 00:52:10,000 --> 00:52:14,000 och så detta verkligen snyggt tillåter oss att arbeta med vissa uppgifter. 969 00:52:14,000 --> 00:52:18,000 Till exempel har jag här Teams.plist som jag skapat. 970 00:52:18,000 --> 00:52:22,000 Jag skapade en ny plist-filen, och jag kan borra ner. 971 00:52:22,000 --> 00:52:26,000 Detta är en ordbok, är detta en ordbok, dessa strängar, 972 00:52:26,000 --> 00:52:30,000 och så detta är en trevlig grafisk representation av en JSON dokument 973 00:52:30,000 --> 00:52:33,000 eller bara en rad viktiga värdepar, 974 00:52:33,000 --> 00:52:37,000 och så detta är de uppgifter som jag kommer att arbeta med insidan av min app. 975 00:52:37,000 --> 00:52:40,000 >> Låt oss först komma hit. Vi har mycket mer filer nu. 976 00:52:40,000 --> 00:52:44,000 Men låt oss först komma hit till storyboard. 977 00:52:44,000 --> 00:52:48,000 Storyboard här-om jag kan zooma ut- 978 00:52:48,000 --> 00:52:51,000 Vi kan nu se att detta är flödet av min app. 979 00:52:51,000 --> 00:52:53,000 Jag först gå att starta på den här skärmen. 980 00:52:53,000 --> 00:52:55,000 Jag kommer att borra ner till den här skärmen, 981 00:52:55,000 --> 00:52:58,000 och jag ska borra ner till den här skärmen och vi kan se här att om jag typ av 982 00:52:58,000 --> 00:53:04,000 flytta en av dem runt vi har dessa pilar går härifrån till hit, 983 00:53:04,000 --> 00:53:08,000 och hur jag definierar att pilen var om jag zooma in lite, 984 00:53:08,000 --> 00:53:12,000 och om jag kommer över detta synsätt controller, 985 00:53:12,000 --> 00:53:16,000 och här är en cell, och jag vill säga att när du trycker på en cell 986 00:53:16,000 --> 00:53:18,000 Jag vill att du glida över till en annan skärm. 987 00:53:18,000 --> 00:53:21,000 Jag kan helt enkelt hålla ner kontroll, 988 00:53:21,000 --> 00:53:26,000 rulla över lite, håller du ned Ctrl drar denna cell över och låt gå. 989 00:53:26,000 --> 00:53:30,000 >> Och här vi säger vad som är övergången som du vill använda? 990 00:53:30,000 --> 00:53:32,000 Vill du använda den bilden sak som kallas tryck? 991 00:53:32,000 --> 00:53:34,000 Vill du att glida upp från botten? 992 00:53:34,000 --> 00:53:36,000 Det kallas modal. 993 00:53:36,000 --> 00:53:40,000 Och när jag klickar på en av dessa, kommer det att dra denna pil för mig, 994 00:53:40,000 --> 00:53:44,000 och det betyder att jag faktiskt har hanterat vad som händer när jag trycker på den här knappen grafiskt. 995 00:53:44,000 --> 00:53:48,000 Jag har inte skriva någon kod att faktiskt glida från en skärm till nästa. 996 00:53:48,000 --> 00:53:51,000 Jag definierade det visuellt insidan av Interface Builder. 997 00:53:51,000 --> 00:53:55,000 Om jag klickar på denna pil, kan vi se att jag gav den här grejen ett namn. 998 00:53:55,000 --> 00:53:59,000 Jag kallade det showDivisions, och det är så att jag kan känna 999 00:53:59,000 --> 00:54:03,000 vilken övergång är på väg att inträffa, och vi får se varför bara en sekund. 1000 00:54:03,000 --> 00:54:06,000 Det är så jag har trådbunden upp de olika skärmarna i min app. 1001 00:54:06,000 --> 00:54:09,000 Om detta var en knapp, till exempel, snarare än en tabell vy, 1002 00:54:09,000 --> 00:54:11,000 Jag kunde kontrollera klicka på knappen, dra över till nästa skärm, 1003 00:54:11,000 --> 00:54:16,000 och det är hur jag kan göra navigeringen på det sättet. 1004 00:54:16,000 --> 00:54:19,000 >> Riktigt snabbt, om vi kommer in i MasterViewController, 1005 00:54:19,000 --> 00:54:22,000 igen, vi kommer helt enkelt att definiera en lista över saker 1006 00:54:22,000 --> 00:54:26,000 som kommer att visas i tabellen vyn. 1007 00:54:26,000 --> 00:54:29,000 Här jag säger att jag vill att du ska ta den plist-filen, 1008 00:54:29,000 --> 00:54:32,000 och jag vill att du ska ladda upp den i en ordbok, 1009 00:54:32,000 --> 00:54:35,000 och när du har den ordlista kommer jag att svara på samma frågor igen. 1010 00:54:35,000 --> 00:54:37,000 Här är antalet sektioner. 1011 00:54:37,000 --> 00:54:41,000 En, det finns en rad för varje liga, och texten i varje cell 1012 00:54:41,000 --> 00:54:46,000 bör vara antingen den första, den första ligan, den andra ligan, och så vidare. 1013 00:54:46,000 --> 00:54:51,000 Slutligen kommer jag att använda denna metod som vi bara såg called prepareForSegue, 1014 00:54:51,000 --> 00:54:54,000 och detta är den metod som kommer att få sparken när jag klickar 1015 00:54:54,000 --> 00:54:57,000 på en av dessa rader, och därför aktiverar denna övergång 1016 00:54:57,000 --> 00:54:59,000 som jag satt upp med pilarna. 1017 00:54:59,000 --> 00:55:02,000 Detta säger att jag kan ha flera 1018 00:55:02,000 --> 00:55:05,000 relationer från en skärm till en annan. 1019 00:55:05,000 --> 00:55:08,000 Om jag har 2 knappar och varje knapp tar dig till en annan skärm 1020 00:55:08,000 --> 00:55:10,000 Jag kommer att ha 2 segues, 1 för varje knapp. 1021 00:55:10,000 --> 00:55:14,000 Men detta är prepareForSegue, återigen, kommer att återanvändas 1022 00:55:14,000 --> 00:55:17,000 för var och en av de olika relationer innebär så att jag behöver ett sätt 1023 00:55:17,000 --> 00:55:21,000 identifiera om du trycker på första knappen eller om du trycker på den andra knappen. 1024 00:55:21,000 --> 00:55:25,000 >> Kommer du ihåg när jag gav det Segue ett namn, detta showDivisions, 1025 00:55:25,000 --> 00:55:29,000 det är hur jag vet nu att detta är Segue som aktiverades. 1026 00:55:29,000 --> 00:55:32,000 Allt jag vill göra är att jag vill säga 1027 00:55:32,000 --> 00:55:35,000 Jag vill ta reda på vad jag just hit, 1028 00:55:35,000 --> 00:55:38,000 och så att få det, kan jag säga att jag vill ha indexPath för den valda raden, 1029 00:55:38,000 --> 00:55:42,000 minns indexPath säger precis där jag bara klickade, 1030 00:55:42,000 --> 00:55:47,000 och då vill jag säga att jag vill räkna ut var jag ska. 1031 00:55:47,000 --> 00:55:50,000 Denna destinationViewController, det är en egenskap hos Segue. 1032 00:55:50,000 --> 00:55:53,000 Det är skärmen jag ska, 1033 00:55:53,000 --> 00:55:56,000 så jag vet att skärmen jag ska kallas DivisionsViewController 1034 00:55:56,000 --> 00:55:59,000 eftersom jag skapade den klassen, 1035 00:55:59,000 --> 00:56:02,000 och så nu om jag säger d.divisions 1036 00:56:02,000 --> 00:56:06,000 Jag är nu sätta en egenskap hos View Controller jag är på väg att gå till. 1037 00:56:06,000 --> 00:56:10,000 Detta är hur jag skickar data från en skärm till en annan skärm. 1038 00:56:10,000 --> 00:56:13,000 >> Bara tittar på detta DivisionsViewController 1039 00:56:13,000 --> 00:56:16,000 ni kan se här att i. h. filen 1040 00:56:16,000 --> 00:56:20,000 Det är att egendom divisioner, och det är vad jag i grund och botten är fylla, 1041 00:56:20,000 --> 00:56:25,000 så det är hur jag vet att jag visar divisionerna motsvarar 1042 00:56:25,000 --> 00:56:28,000 ligan som jag klickade, och igen, 1043 00:56:28,000 --> 00:56:31,000 den faktiska tabellvyn ser ganska mycket samma, bara svara dem 1044 00:56:31,000 --> 00:56:34,000 3 enkla frågor samt att identifiera 1045 00:56:34,000 --> 00:56:37,000 vad som händer när du flyttar till nästa skärm. 1046 00:56:37,000 --> 00:56:40,000 Bara ett par andra saker här. 1047 00:56:40,000 --> 00:56:43,000 Du märker upptill här som istället för att säga # include 1048 00:56:43,000 --> 00:56:45,000 Jag säger nu # importera. 1049 00:56:45,000 --> 00:56:47,000 Detta är bara ett Objective-C sak. 1050 00:56:47,000 --> 00:56:52,000 Importen är i grunden en trevligare version av inkluderar, 1051 00:56:52,000 --> 00:56:57,000 och till exempel, behöver vi veta vad denna klass är, 1052 00:56:57,000 --> 00:57:00,000 så jag kan inte bara säga DivisionsViewController. 1053 00:57:00,000 --> 00:57:05,000 Om vi ​​inte hashtag standardio.c inne i vår. C. fil 1054 00:57:05,000 --> 00:57:07,000 kompilatorn hade ingen aning om vad printf var. 1055 00:57:07,000 --> 00:57:12,000 Likaså om jag inte importerar inte DivisionsViewController 1056 00:57:12,000 --> 00:57:16,000 kompilatorn har verkligen ingen aning om vad en DivisionsViewController är. 1057 00:57:16,000 --> 00:57:19,000 Bara se till att insidan av dina olika. M-filer du ser att importera 1058 00:57:19,000 --> 00:57:25,000 motsvarande. h-filer så att kompilatorn vet vad som händer. 1059 00:57:25,000 --> 00:57:31,000 >> Slutligen vad Apple slutligen inte visar är vissa uppgifter med hjälp av en webb vy, 1060 00:57:31,000 --> 00:57:35,000 och så en webb vy är ett objekt som du kan bädda 1061 00:57:35,000 --> 00:57:37,000 en liten webbläsare insidan av din app. 1062 00:57:37,000 --> 00:57:40,000 Allt du behöver göra är att ange en URL till din webbläsare, 1063 00:57:40,000 --> 00:57:43,000 så jag vill gå till mlb.mlb.com, 1064 00:57:43,000 --> 00:57:46,000 och det är hur jag kan komma åt hemsidan för varje lag, 1065 00:57:46,000 --> 00:57:49,000 och så genom att i denna URL 1066 00:57:49,000 --> 00:57:52,000 på webben vy kan visa detta för mig, och jag kan bläddra runt, 1067 00:57:52,000 --> 00:58:01,000 och simulator används av den. 1068 00:58:01,000 --> 00:58:03,000 Nu kom från min plist. 1069 00:58:03,000 --> 00:58:07,000 Om jag klickar på detta kom också från min plist, och denna glidning hanterades 1070 00:58:07,000 --> 00:58:09,000 genom att definiera dessa segues. 1071 00:58:09,000 --> 00:58:12,000 Jag klickar på och en mer, 1072 00:58:12,000 --> 00:58:15,000 och nu här är min UIWebView, så bara sådär 1073 00:58:15,000 --> 00:58:19,000 här är hemsidan för den webbadress som jag just inbäddade, 1074 00:58:19,000 --> 00:58:21,000 och jag behövde inte hantera allt galet. 1075 00:58:21,000 --> 00:58:24,000 Det är hur du visar en webbsida. 1076 00:58:24,000 --> 00:58:27,000 Saker som detta bakåtknappen här ges också till mig 1077 00:58:27,000 --> 00:58:33,000 helt gratis eftersom jag har definierat dessa relationer med segues. 1078 00:58:33,000 --> 00:58:37,000 >> Några frågor? Ja. 1079 00:58:37,000 --> 00:58:40,000 [Student] Så när du använder Alloc har du aldrig fri något? 1080 00:58:40,000 --> 00:58:43,000 Exakt, när du ringer Alloc och init du inte att befria den. 1081 00:58:43,000 --> 00:58:46,000 IOS kommer att hantera allt detta för dig. 1082 00:58:46,000 --> 00:58:51,000 Det är underbart, och du inte bryta några regler. Ja. 1083 00:58:51,000 --> 00:58:54,000 [Student] Om du skulle omfatta fler grupper som skulle kunna passa på skärmen, 1084 00:58:54,000 --> 00:58:58,000 skulle det ha automatiskt en bokrulle alternativ, eller är det något du behöver lägga till? 1085 00:58:58,000 --> 00:59:01,000 Exakt, om jag hade fler lag, till exempel, skulle det klara automatiskt 1086 00:59:01,000 --> 00:59:04,000 rullningen för mig, och alla de problem prestanda 1087 00:59:04,000 --> 00:59:08,000 med den enorma tabellen hanteras också helt för mig. 1088 00:59:08,000 --> 00:59:11,000 >> Övriga frågor? 1089 00:59:11,000 --> 00:59:13,000 Allt denna kod kommer att publiceras. 1090 00:59:13,000 --> 00:59:16,000 Vi slags slätade över lite av de mer mindre detaljer, 1091 00:59:16,000 --> 00:59:19,000 men saker som att ställa vissa egenskaper på webben vyn 1092 00:59:19,000 --> 00:59:22,000 är bara saker som du kan få genom att bläddra Apples dokumentation, 1093 00:59:22,000 --> 00:59:24,000 vilket är riktigt, riktigt snyggt ut. 1094 00:59:24,000 --> 00:59:27,000 De har en hel del prov apps och exempel seder 1095 00:59:27,000 --> 00:59:34,000 olika API: er, så definitivt ta del dem om du kan. 1096 00:59:34,000 --> 00:59:36,000 Bara några användbara länkar som du kanske vill ta en titt på. 1097 00:59:36,000 --> 00:59:38,000 Dessa är några användbara dokumentation guider. 1098 00:59:38,000 --> 00:59:41,000 De webbadresser är massiv, så de är kortare. 1099 00:59:41,000 --> 00:59:44,000 Denna första är hela biblioteket av dokumentation. 1100 00:59:44,000 --> 00:59:46,000 Det finns lite sökning barer, så om du börjar skriva knapp 1101 00:59:46,000 --> 00:59:50,000 det börjar ge dig all information om alla de saker du kan göra med en knapp. 1102 00:59:50,000 --> 00:59:53,000 Jag har även tabellen Guide Visa programmering. 1103 00:59:53,000 --> 00:59:56,000 Den hanterar tabellen åsikter i mer detalj, 1104 00:59:56,000 --> 01:00:00,000 hur man gör saker som dynamiskt lägga till celler eller redigera celler eller ta bort dem. 1105 01:00:00,000 --> 01:00:02,000 >> Det finns massor av prov program från Apple som visar dig hur man gör det, 1106 01:00:02,000 --> 01:00:05,000 och slutligen, är denna sista det mänskliga gränssnittet riktlinjerna 1107 01:00:05,000 --> 01:00:09,000 och detta är i grunden en diskussion av UI-komponenter, 1108 01:00:09,000 --> 01:00:12,000 saker som inte gör en knapp som är 4 pixlar med 4 pixlar. 1109 01:00:12,000 --> 01:00:15,000 Det är en dålig idé, och andra saker som Apple vill att du ska göra 1110 01:00:15,000 --> 01:00:18,000 att främja bra utformning. 1111 01:00:18,000 --> 01:00:23,000 >> Några sista frågor innan vi avslutar upp? 1112 01:00:23,000 --> 01:00:27,000 Okej, definitivt gärna-Vi kommer att ha speciella etiketter på Diskutera. 1113 01:00:27,000 --> 01:00:30,000 Vi kommer att ha en iOS en, så definitivt gärna utnyttja det. 1114 01:00:30,000 --> 01:00:34,000 Om du vill arbeta med dina klasskamrater i projekt 1115 01:00:34,000 --> 01:00:37,000 eller hjälpa räkna ut vissa slumpmässiga iOS prylar 1116 01:00:37,000 --> 01:00:40,000 gärna kontakta mig, och definitivt granska all kod på nätet eftersom 1117 01:00:40,000 --> 01:00:43,000 bara av intresse för tiden vi typ av slätade över de mer 1118 01:00:43,000 --> 01:00:45,000 finkornigare uppgifter om saker. 1119 01:00:45,000 --> 01:00:47,000 Men om inte, så lycka till på din iOS-projekt, och jag hoppas att vi har 1120 01:00:47,000 --> 01:00:53,000 en stor tillströmning av program i App Store. 1121 01:00:53,000 --> 01:00:56,000 [CS50.TV]