RHED SHI: Välkommen till se CS50 seminarium - Introduktion till iOS. Tack för att ni kom. Jag hoppas du är lika glada som jag är om iOS. Förra året tog jag CS50 som en sophomore, och jag i princip lärde iOS för min slutprojekt. Och det var ganska - Tja, det var inte lätt, men det finns massor av support tutorials på nätet. Och jag hoppas verkligen att denna seminarium, ska jag ge er ett huvud börja på iOS utveckling Så, i termer av iOS utveckling, det finns två saker som vi vill täcka i dag. För det första språket - språket kommer att vara i Objective-C. Vi ska faktiskt höra något riktigt spännande. Så kan du gå med i hela Apple gemenskap av utvecklare och bygga några riktigt grymma appar. Även iOS 7 är vacker, förhoppningsvis, till vissa av er. Men det är kontroversiellt, jag vet. Och framför allt, vad jag vill göra är guide dig genom Objective-C, och även Xcode, som är integrerat utvecklingsmiljö som du kommer att arbetar i för iOS. Och så, bara ett ord på Objective-C. I grunden är det exakt samma som C, men med en hel del andra saker. Och så, mer strikt, det är faktiskt en super-set av C. Så något som du kan göra i C just nu, vilket är i grund och botten gillar pset 0 till 6, du kan göra i Objective-C. Så, känner mig inte rädd om denna nya språk som du kommer att lära sig. Du har redan täckt en hel del av det, eftersom du har alla gjort C den gångna termin, utom nu du ska att ha mycket mer att arbeta med. Och jag kommer bara att leda dig genom en par exempel för att belysa vissa av de viktigaste skillnaderna som jag hittade var verkligen viktigt när jag lärde mig Objective-C förra året. Jo faktiskt, så, den andra punkten är, Objective-C är, självklart, objektorienterad. Och vi kommer att diskutera lite om vad det betyder senare. I grund och botten, det är som hur man arbetat med structs i den gångna pset, med noder och liknande andra sånt. Utom i Objective-C, är allt ett objekt, och du kommer att bli går runt pekare till objekt snarare än själva värdena. Så det är bara något viktigt att tänka på. Så, varför inte vi börjar med några skillnader i syntax mellan C och Objective-C? Jag vill lyfta fram # include, du vet, standard io.h i C och C + +, med Objective-C-versionen av det, som är # import, och sedan någon form av header-fil. I detta fall skulle det vara UIKit, du vet, snedstreck UIKit.h. Det kan också vara, du vet, MKMapview till dig slash MKMapview.h om du vill att göra, som en karta inne i din app. Liknande saker. Så, är det viktiga inkludera har nu ändrats för att importera. Men idén är fortfarande. Du kommer att kunna importera något slags av header-filen i ditt program. Jag vill också belysa skillnaden mellan printf och NSLog. Men som vi sagt tidigare, Objective-C är en strikt super-uppsättning C, vilket innebär att printf existerar i Objective-C också. Men, de flesta människor inte använder det. De flesta använder denna NSLog eftersom det ger dig en tidsstämpel, och vi får se den i handling senare. Men, är det generellt en mer användbar sätt att skriva ut variabler. Och jag vill också betona att NSLog sker på precis samma platshållarvärden som printf gör - så% d är för en int, % F är ett flöte. Men jag vill lyfta fram det allra sista - NSLog% snabel - som är en platshållare för ett objekt. Och som jag sa tidigare, Objective-C-erbjudanden ganska mycket mestadels i objekt, och så detta kommer i bruk när du vill skriva ut, kanske, kanske en NSArray eller NSDictionary, eller NSString. Så, även märke till att, i vår NSLog uttalande, har vi ett snabel framför av citatet - det är för att beteckna att strängarna, nu, i Objective-C är objekt. De är inte längre bara röding stjärnor. De är objekt och är behandlas som sådana. Så det är verkligen viktigt att när du använda NSLog det tar i en NS sträng, vilket innebär att du måste att inkludera en i framför din citattecken. Och det är därför du ser, här, i alla min funktion samtal till detta NSLog, jag ha en åtmin framför offerter, även även om% d och% f: s är i alla fall från C. Har du frågor så långt? Jag ska försöka gå igenom det här snabbt så att vi kan få mer tid att arbeta med Xcode och Objective-C, så att ni kan få mer bekant med den. Därefter vill jag lyfta fram något konceptuellt viktigt. Så, i C, det mesta är funktioner. Vi gör ett funktionsanrop. Vi förklarar funktioner på detta sätt, med returtyp först, sedan funktionsnamn, parenteser, och sedan oavsett argument och vilken typ av dessa argument vi vill passera i. Och Objective-C, eftersom allt är ett objekt eller en klass - så klass och objekt är två termer som är mestadels synonymt med varandra, så jag kan växla mellan dem under hela seminariet. Men, ser du att vi har metoder Objective-C snarare än funktioner. Och metoder hör till objekten. Så lika, kanske ta exempelvis nod - vår typ [OHÖRBAR] nod från pset 6 eller 5 - Vi har ordet, egendom, eller nästa nod pekaren. Metoder är helt enkelt fungerar inne av någon form av struktur. Så i detta fall skulle konstruktionen vara objektet och sedan metoden är något som hör till ett objekt. Och detta är hur du skulle förklara, sortera av en metod. Du skulle börja med, igen, avkastningen typ - så försökte jag färg koda nyckelorden här så att ni kan se, åtminstone, formatering likheter mellan funktion deklarationer och metoddeklarationer. Så börjar du med, du vet, en återgång typ - i det här fallet, det är en array, eller en NSArray pekaren - och då har du den här metoden. Och sedan, vad som är intressant här är att istället för att ha parenteser, vi ha med kolon. Och sedan, framför våra argument, vi uttryckt, igen, i parentes typ av våra argument. Så, just nu är jag försöker göra det jämförelse mellan, du vet, n och nummer, eftersom de är både som ints. Och sedan, den andra är en NSUInteger typ. Och sedan, med Objective-C, när du vill ha flera argument din metod klausul, dig, sorts, skilja ut dem ungefär som här - Jag är inte helt säker på hur man ska beskriva det, men det här är ett bra exempel på hur man kan ha flera argument där. Du kan, naturligtvis, bara helt ignorera andArray kolon NSArray array om du bara ville ha en metod som tar i ett argument. Ja, fråga. Publik: Är båda NSUInteger och NSArray argument som kan tas i inom NSArray? RHED SHI: Ja. Så, låt mig förklara. Så, ja. Så frågan var är NSUInteger och NSArray * typer av argument, och det är rätt. Så, vill du alltid ange vad vilken typ av argument är. Och här, jag försöker att presentera dig till några av syntaxen och Vocab av Objective-C, så de är faktiska typer att du kommer att ha att göra med. Och som ni kommer att märka, matriser inte längre, sorts, enkla konsol saker. De är objekt. Även om vi går vidare till nästa slide, kan vi se att vi kan hårdkoda en NSArray i Objective-C med helt enkelt en vid symbol framför konsolerna. Jag är inte, faktiskt, ganska säker på om Jag syntaktiskt hårdkodad en matris korrekt för C-versionen, men det är tänkt att vara i en C-array. Så detta är hur du vill, du vet, kanske använda av funktioner eller metoder som vi skapade tidigare. Rätt? Så, det är där vi förklarar vår funktion och vår metod. Och nu vill vi använda dem i vårt program, och det är hur vi skulle göra det. Så i C, skulle du ha, du vet, kanske en bool b, och du ställa in den på lika med funktionen, och sedan du passerar i argumenten. I Objective-C, det är ganska ungefär samma sak. Du har NSArray * my_array, och det är kommer att vara lika - nu, det enda Skillnaden här är detta objekt sak, som jag har markerat i gult, och som ni kan se, i C, det finns ingen annan gul ord. Och det är för att metoder tillhör med ett visst objekt. Så det är därför jag måste ha ett objekt att, liksom, kallar denna metod på siffran noll, och sedan den NSArray a, b, c, d. Har du frågor om det? Vi får se dessa begrepp i handling ganska snart när vi går in i en demo. OK. Nu vill jag prata lite kort om Xcode 5, som är den integrerad utvecklingsmiljö att du kommer att arbeta med. Jag vet att många av er, eller några av er, inte har Mac, vilket är ett problem eftersom Xcode är ej tillgängligt för Windows och PC. Fråga mig inte varför, men förmodligen - ja, corporate. Oavsett vad. Men hur som helst, så jag ber om ursäkt om någon av du behöver ladda ner någon form av virtuell maskin för Mac i För att kunna köra Xcode 5. Men det är en ganska tjusig programvara att använda. Och så, innan vi dyker in något slag av demo, jag vill bara visa dig en bild av vad Xcode ser ut i din fönster, och sedan också tala om vad hela detta utrymme är. Så det är ungefär som att lära sig att använda Microsoft Word, utom du vill få bekanta sig med alla olika saker som pågår här. Så först, jag vill peka dig i verktygsfältet i toppen. Du ser att, i toppen, du har filnamnet - eller, faktiskt, din projektnamn och sedan ditt filnamn. Ta del av pjäsen och stoppknappar. De är de som du kommer att använder för att köra din app på simulator - iOS simulatorn. Detta kommer automatiskt med Xcode 5, så du behöver inte oroa dig för ladda ner något slags simulator. Du trycker bara lek och då det körs din app. Och du kan leka med dig, och ser du hur det fungerar senare. Och sedan, i centrum, är naturligtvis där alla dina vackra kod är kommer att gå. Och sedan, på vänster sida, kommer du har detta, liksom, mapp - navigering - och då kommer du också se att, tillsammans med mappikonen, det finns en massa andra ikoner där som kommer att vara användbart senare. Och sedan, på den högra sidan är ett verktyg område där man kan arbeta med några av objekten och anger, du vet, vad färgen ska vara, vad teckensnitt ska vara, et cetera. Även om, allt som du gör i tvättstuga kan du gör i koden också. Och så kommer jag att gå igenom två exempel på att använda, helt enkelt, ingen kod på alla - eller mycket minimal kod - verser all kod, bara så att ni vet vad du kan och inte kan göra i Xcode och Objective-C. Och sedan, slutligen ned i botten, du har debug området. Så, behöver du inte längre köra GDB, et cetera, på dina program. Det gör det automatiskt åt dig. Och du kan också skriva ut saker till detta område. Så egentligen, senare, vi ska gå igenom mario.c, om ni fortfarande minns att i Xcode. Så det skulle vara kul. Och sedan, bara för att få den tillbaka till Objective-C, jag vill lyfta fram vad du kan göra med if-satser. Så, vet ni, eftersom Objective-C är en superset av C, allt du gör är, bokstavligen, på samma sätt som C. Du bara har små skillnader. Så, kommer du att märka i form för en om uttalande är fortfarande detsamma - du har om, och då har du parenteser med ett tillstånd inuti, det och sedan klammerparenteserna för vad du vill göra inne i det. Men jag ville sätta denna bild upp här, helt enkelt för att illustrera att, eftersom vi har att göra med objekt nu, Vi måste använda dessa saker heter som är lika sträng som är en tillfällighet, en metod för en sträng eller ett NSString objektet. Så, ord, i det här fallet är en NSString invändningar, och den har en metod som kallas är lika sträng, och då vi passerar i en hårdkodad sträng för att se oavsett om de är lika till en annan. Har du frågor så långt? OK. Och, jag vill gå över en för uttalande också. Så, till exempel, om vi ville slinga över längden av en sträng i C, detta bör vara bekant för dig. Och, i Objective-C, jag vill att belysa detta, liksom, metod som kallas räkningen. Jo, faktiskt, låt mig bara ta det tillbaka. Greven är en metod för matris. Men det är mer specifikt en egenskap av array, vilket är varför du kan använda punktnotation. Men jag vill inte komma in för mycket av det konceptuella grejer, jag vill bara visa hur det skulle se ut som i Objective-C kontra C. Och också, vill jag påpeka att även om jag har använt NSUInteger framför alla mina i-talet i Objective-C, Du kan också använda int, eftersom int är helt giltig i Objective-C, också. Ja? PUBLIK: Är det bara stilistiska, eller är - RHED SHI: Ja. Så, som ni ser - så var frågan är att bara en stilistisk fråga. Som ni ser, jag har en, slags, stjärna asterisk sak nere på botten, och som länk tar dig till en Stack Overflow bildas, där någon förklarar skillnaden mellan en int i NSInteger och en NSUInteger. Och så kan du läsa om det senare. Dessa bilder kommer att finnas, naturligtvis, tillgängliga för dig. Låt oss se. OK, awesome. Så, detta ingår också i bilden eftersom jag trodde att detta var en stor webbplats som introducerar dig till Objective-C syntax. Så, egentligen, varför inte vi flyttar till Krom och kolla in den här webbplatsen? Rätt. Så, vad jag vill visa dig killarna här är denna bild. Så, det är, liksom, kommer att vara det som du kommer att se insidan av varje Xcode fil. Egentligen, varför inte vi bara ta en ögonblick, slags, ta i. Så, den här boken - det är det objekt som vi har att göra med. Och sedan, det är självklart att vara ärvt från något annat föremål, men du behöver inte oroa dig för det. Och sedan, det kanske har vissa medlemsvariabler. Det viktigaste jag vill visa dig är de metoder som t.ex. här. Så är exempelvis metoder betecknas genom denna minustecken. Och sedan, som ni kommer att märka, vi är redan börjar se paradigmet för metoddeklaration, eller hur? Typen retur, metodnamnet, och sedan typ av argumentet, och sedan namnet på argumentet. Och detta minustecken betyder att det är en instansmetod, vilket innebär att dessa metoder är endast tillgängliga för objekt som har instansieras. Att kontrastera det, metoder med ett plus logga in framför dem är klass metoder, vilket innebär att du kan ringa dessa metoder, även om du inte har ett föremål skapade ännu. Så, för ett tydligt exempel, NSString är en klass. Och du kan ringa, till exempel, klassmetoder på NSString - själva, liksom, ord NSString. Emellertid, i syfte att använda dessa metoder, du faktiskt behöver skapa en sträng. Exempelvis motsvarar NSString stjärna sträng vid citattecken, hallå världen. Och sedan kan du använda dessa metoder - förekomstmetoder - på att hello world sträng. Så, det är skillnaden mellan förekomstmetoder och klassmetoder. Och, precis täckte vi denna del. Fastigheter är en annan sak som är insidan av objekt, i grund och botten. Och du deklarera dem med det vid fastighets nyckelordet. Du har dessa alternativ, här, att jag ska förklara senare när Vi går in i en demo. Ja? Hej. PUBLIK: Kan du zooma in, tack? RHED SHI: Oh ja. Ursäkta. PUBLIK: Tack. RHED SHI: Det borde vara mycket bättre. PUBLIK: Ja. Tack. RHED SHI: Ja, påminn mig om Jag glömmer att zooma in eller zooma ut. Så detta är allt jag ville ha visa för - whoa, det är en hel del - för denna webbplats. Så, låt oss gå tillbaka till våra bilder. Faktiskt, nu ska vi ta en stund att dyka in en demo. Så börjar vi med en ny Xcode projektet. Så, om du ska öppna upp Xcode på alla dina maskiner, bör det ta dig några där det står, liksom, antingen öppna upp ett befintligt projekt eller en ny projekt, och du bör Klicka på ett nytt projekt. Och då bör det ta dig till den här skärmen. Ja? PUBLIK: Om vi ​​inte har en Mac, vi bara typ av kyla? RHED SHI: Eller titta på med någon, ja. Yeah. Du kan kyla också. OK. Så, vad vi ska göra först, nu, är, faktiskt, kommer vi att göra en enda vy ansökan. Så, om du kommer att märka, vad som är bra om Xcode och Apple stöd för utvecklare är att du har en hel del mallar för att arbeta med redan. Du kan till exempel göra en master-detalj ansökan. Du kan göra ett spel - och faktiskt, kommer jag inte att gå in i spel, eftersom spel är en annan historia för iOS utveckling. Och de är typ av separata, så jag ska inte gå in på det. Då du har sida-baserade applikationer. Du har en flik ansökan - så vill, till exempel Bank of America antagligen har, liksom, ett flikar app. Det är de där du har knapparna längst ner. Och sedan har du en Sprite Kit spel. Eller du kan arbeta från grunden, vilket är vad vi ska göra senare. Men låt oss först börja med en enda vy ansökan. Sedan ska det begära att ett produktnamn, och vi kan bara göra testet. Organisation namn - så, företagsnamn, företagsidentifiering - de är viktiga om du ska att sätta din app på App Store. Annat än det, är din kod kommer att kör alldeles utmärkt utan denna. Detta kommer att vara viktigt om du vill - så, i sig, liksom, sätta din app till din telefon eller något, och testet ut det, du vet, i verkliga livet - detta kommer att vara viktigt. Detta tenderar att vanligtvis vara associerad med någon form av utvecklarkonto med Apple. Och så, jag vet, förmodligen, en hel del av er kommer inte ha några utvecklarkonton. Jag vet att universitetet har en. Jag tror att CS har en. Men, kan du maila mig och jag ska försöka att räkna ut det åt dig. Men just nu har jag bara sätta in några platshållare saker här. Och du kan naturligtvis här, välj om du vill att det ska vara enbart iPhone, i iPad eller båda - universell tillämpning. Så, för nu, låt oss göra universella, precis att se båda sidorna av plattformen. Låt oss se. Så, just nu, jag ska spara det i någon form av mapp. Spelar ingen roll var - du kan alltid flytta den senare. Och, nu är vi fört i vårt Xcode projektet. Jag skulle inte oroa sig för allt detta. Jag skulle föreslå att inte vidröra någon av detta, om du inte vet exakt vad du gör. Så, allt detta, bara ignorera för det mesta. Du behöver inte röra den, och om du du förstöra vissa saker här, det blir lite knepigt. Så, varför inte vi titta på filerna på vänster sida i vår navigator. Här har vi AppDelegate.h. Vi har AppDelegate.m Så, som du kommer varsel, har vi header-filer, som sluta i dot h, och vi har genomförande - faktiskt, låt mig zooma in OK. Låt mig zooma in Rätt, så du har header-filer och du har implementeringsfiler. Faktiskt - OK. Det är lite konstigt, men bär med mig. Sedan, för att vi har valt en enda vy ansökan, vi kommer att vara arbeta med storyboard. Så, är storyboard något som Apple har kommit med för att verkligen hjälpa utvecklare snabbt skapa prototyper sina ansökningar. Så, det är här du kan skapa en app utan att skriva en enda rad kod. Men i vår enda vy ansökan, vi naturligtvis ha en filen för vår uppfattning, vilket är en vy som regulator. Så, har vi huvudet och genomförande fil här. Och, jag kommer att zooma ut nu eftersom Vi måste arbeta på storyboard. Så, här är vår uppfattning. Om vi ​​helt enkelt köra appen just nu, det finns inte mycket spännande på gång. Så, ser du denna vit skärm. OK? Och i våra verktyg område, kan vi lägga till en massa olika saker för det. Så, när du arbetar med skärmar i iOS, granska styrenheter är objekt som kapslar in, slags, dina åsikter. Så, en vy controller alltid har en egenskap som kallas vy. Och denna uppfattning, typiskt, innehåller, du vet, vad du vill se på en skärm. Så, ja, låt oss bara börja med att sätta, kanske, kanske en etikett. Så, låt oss sätta en etikett på det - sticka den i mitten. Så, nu när jag har klickat på etiketten, jag kan gå in på egenskaper inspektör och börja ändra dess värde. Låt oss kalla det CS50 Colours. Och, jag kan också ändra typsnitt. Så, istället för att göra systemet, som är standard, kan vi göra en egen man. Vi kan förändra - ni vet, Ultralight, gör den 32. Och då kan vi göra vår box större. PUBLIK: Tror du att du kan zooma på bara lite mer, kanske? RHED SHI: Ja? OK. PUBLIK: Tryck bara på den? RHED SHI: Låt oss se. Fungerar det? PUBLIK: Bara passera Xcode? RHED SHI: Visst. OK. Awesome. PUBLIK: Etiketten under? Etiketten? RHED SHI: Vad är det? PUBLIK: Vilken list var etiketten under? RHED SHI: Så frågan var, vad drop-down var etiketten under? Det ska helt enkelt vara under här. Jag antar att det är en kub sak. Men oftast är det standard - Jag ska bara ner här tills jag hittar en etikett. Yeah. Så nu har vi vår etikett. Låt oss centrera den. Och Xcode ger oss riktlinjer för centre objekt. Så, nu ska vi köra vår kod igen. Så där. Så, har vi CS50 Colours. Och nu, låt oss sätta en knapp på det, eller hur? Eftersom vi vill göra denna interaktiva. Så, låt oss sätta en knapp här. Och vi kallar den här knappen "peka här att fortsätta. "Vi ska centrera den, även Egentligen är det redan centrerad. Yeah. Så, nu har vi en knapp. Och om vi kör det här igen, vi ska att ha en fin liten knapp här. Och jag kan klicka på den, men det gör inte någonting, för vi har inte gjort vad som helst med knappen ännu. Så, låt oss skapa en annan uppfattning, eller hur? Så, låt oss säga att jag vill peka den knappen och jag vill gå till en annan sida - en annan uppfattning. Vad jag ska göra är, kan jag skapa en vy controller, eller hur? Nu ska jag klickar på min knapp, och sedan, det viktiga är, jag ska Klicka på - eller - ja, tryck på kontroll på mitt tangentbord. Control. Klicka på knappen och sedan dra. Så kom ihåg att hålla Ctrl-tangenten. Låt oss göra det igen. Så, håll kontroll, klicka och dra vad du vill göra. OK. Och nu, jag har flera alternativ här. Jag kan antingen skjuta, eller jag kan göra en modal, eller jag kan göra en egen. Push är bara om du har en navigationskontrollen. Just nu, vår första uppfattning styrenheten är inte inne i något navigationskontrollen. Så, är det navigationskontrollen den som ger dig bakåtknappen på iOS-app där du har, du vet, det toppen, typ av, tjock bar - där du kan gå tillbaka, eller framåt, et cetera. Just nu, jag har inte det. Och så, det är därför jag inte kan göra en push. Så jag klickade på tryck misstag här. Och faktiskt, låt oss köra koden, och den ska krascha på mig. Bara om jag trycker på knappen dock så - höger. Så detta är dåligt. Och, som ni kan se här, vi har felmeddelandet. Så, "Push segues kan endast användas när käll controller förvaltas av ett instans av UI navigering controller. " Så, eftersom det inte var inne i en navigation controller, Jag kunde inte göra det. Så, just nu, jag ska tillbaka till mapp, går tillbaka till storyboard. PUBLIK: Vad är det för navigering controller, igen? RHED SHI: Så, nu ska jag visa dig. Låt oss se. Så, jag ska klicka på denna uppfattning controller, och sedan ska jag gå upp till produkt - faktiskt, nej, förlåt - redaktör. Och jag kommer att gå in i - faktiskt, jag klickar på den? Nej. Så där. Jag kommer att gå upp i editorn, gå ner bädda in, och sedan navigering styrenheten. OK. Och ser min arbetsyta riktigt rörigt, så låt oss rensa upp här. Så, är allt detta storyboard. Och på detta sätt - OK, stopp - Jag kan snabbt bygga något så här. Och då, nu kan jag gå tillbaka, du vet? Men det är ganska tråkigt, eller hur? Så, vad jag vill göra är, jag vill inte ha att tillverka, helt enkelt, i syfte styrenheten. Låt oss säga att jag ville faktiskt göra en tabellvyn controller, så jag kan sätta in några trevliga färger i tabellen. Så, nu när jag har lagt i min tabell vy controller, jag måste ansluta den tillbaka från den här knappen till view controller. Så jag måste göra min kontroll, klicka, dra sak igen. Och nu kan jag göra push, eftersom jag bädda det inne i ett navigationskontrollen. PUBLIK: Navigation controller bara gör det möjligt att gå från plats till plats? RHED SHI: Ja. Så, mer tekniskt, det är ett föremål där - så, insidan av navigeringen styrenhetsobjekt, det håller reda på en array. Och att arrayen innehåller alla efterföljande visa controllers. Det är därför som när du trycker tillbaka, det går tillbaka till föregående sida. Eftersom navigationskontrollen objektet eller koden som tar hand om detta objekt, har en array som håller spår av dessa view styrenheter, och kan då, du vet, DQ utsikten controller och ge dig tillbaka föregående. Så, är det tekniska saker, men - och jag ska visa dig senare i kod, om vi har tid. Jag är snäll att köra ut i tid, men - Så, med tabellvyn, vad vi kan göra är - Det är oftast automatiskt till Dynamic Prototype - vi kommer att göra det statiska celler, annars ska vi stöter på några problem. Och sedan, låt oss säga att jag ska att ha en sektion. Så, är sektioner som - Om du någonsin har sett musik app, när du har konstnärer, sektioner skulle vara aen genom Z's - breven - och sedan, du vet, den enskilde rader skulle vara artistnamn. Och så, vad är hett här, är att jag kan komma åt alla objekt inuti min storyboard genom detta rullgardinsmenyn, också. Så, jag ska klicka på min avdelning, och jag vill, du vet, kanske fem rader. Och sedan, inne i varje rad, Jag vill sätta en etikett. Och jag kommer att kalla denna blå. Och då, jag vill sätta en UI vy, du vet, kanske för, typ, en liten låda. Så att jag kan visa folk en förhandsvisning av färgen. Och jag ska gå tillbaka till fastigheten och ändra färgen på, åh, det gör jag inte vet, den här. Och sedan, märker också, här, när jag har tillbehören, kan jag ha massor av de olika tillbehör som du normalt ser. Indikatorn för avslöjande, detaljerna, eller bock, eller helt enkelt bara detaljer. Så kanske vi kan göra, som, ett avslöjande indikator, till exempel. Och sedan, varför inte vi ta dessa, kopiera klistra in dem och sätta dem i nästa tabellrad. Så, kan vi kalla det gula. Och jag kanske måste utöka detta. Låt oss göra det gula. Och på detta sätt, kan vi kopiera klistra väg ner. Vad var det? Purple. Så dessa är alla typiska CS50 färger som du har sett i klassen - faktiskt, tyvärr - eller på webbplatsen. Förhoppningsvis ni kan se vad jag gör här. OK. Sista. PUBLIK: Hur fick du lägger raden från början? RHED SHI: Så frågan var, hur gjorde jag till raden från början? Jag gick in i denna tabell avsnitt - eller hur jag kan Välj bordsdelen - och då, här, jag uppdaterade antalet rader. Och, vill jag hoppas att det fungerar. OK. Låt oss se om detta fungerar. Åh, perfekt, awesome. OK. Medan jag höll på att bygga upp min demo, några saker var inte i linje, så, tack för applåderna. Yeah. Så, låt oss se. Vi ska göra det här nio bara för att göra allt - eller faktiskt, låt oss bara vända alla dessa in i avslöjande indikatorer. Och sedan, vad jag vill visa dig också, var hur jag kan ta var och en av dem tabellrader och få dem att interagera - oh. Nej. Oh. Dessutom, jag vill visa dig - Här kan jag sätta titeln på min navigationskontrollen, eller hur? Så egentligen, kommer du att märka, så fort jag inbäddad denna uppfattning controller inne av navigationskontrollen, ser vi här navigeringsfältet högst upp på vår storyboarden representation av en vy controller. Och så ger det oss, liksom, en visuell, slags, guide till vår synliga skärmen. Detta är självklart att vara navigeringsfältet. Och vad jag vill göra snabbt, nu, sätts i en annan - så denna tabell view controller jag gjorde med ta en av dessa och dra den här, och det är vad som får mig att snabbt, verkligen, skapa en tabell vy styrenheten. Om vi ​​har tid men, du ska se det, programma, det är en lite mer knepigt att skapa en tabell view controller, eftersom det finns ett par metoder som är krävs för att du ska, liksom, skriver i syfte för tabellen vy ansvarige att visas korrekt. Men jag vill bara visa dig, nu, ett exempel på där, om jag tar det, till exempel - Jag har satt i en annan vy controller. Och nu, låt oss säga att jag vill styra alt min första blå tabellrad till här. Och jag vill kalla den här blå. Och sedan - låt oss se. Jag är på utsikten nu, och jag kan ändra bakgrunden till blått. Och så, varsel, här, här rullgardins Menyn ger dig också en hierarki av allt av dessa objekt. Så en viktig sak att notera, här, är att alla dessa saker, här - denna tabell view controller, tabellen visa, tabellvyn avsnitt, tabellvyn cell - alla dessa är objekt, i kod. Så, ni vet, är just nu en etikett under innehållsvyn, et cetera. Så vidare och så vidare. Så, om vi kör den här koden, vi bör se någonting - låt oss se om detta - ja. Så där ja. Men om vi inte gör det, ingen av dessa andra saker fungerar. Rätt? Så bara det här fungerar. Och, av hänsyn till tiden, jag kommer inte går in, du vet, att sätta ner de andra. Och detta är slutet på, slags, storyboard - vad jag ville visa du för storyboard. Och, jag har ett utarbetat exempel, faktiskt, just här. Så, är detta storyboard som jag gjorde tidigare. Så, som ni kan se, var det min navigationskontrollen. Sen hade jag min första uppfattning controller, då hade jag mitt bord view controller, och sedan hade jag alla dessa - så tidigare, jag gjorde något helt annat. Så, ursäkta dessa saker. Jag ska nog rensa det senare innan Jag skicka det till produktion. Men om vi kör detta, vi får se att alla alternativ är tillgängliga för oss. Utom jag inte gjorde bakgrunderna dessa färger. Så, trevlig enkel applikation. Nu ska vi försöka att ta itu med denna programmässigt. OK. Så, för att göra det, vi ska bara att starta ett nytt Xcode projekt. Vi ska göra det en tom ansökan nu, eftersom vi inte vill ha storyboard. Så, jag är helt enkelt att begränsa mig till inte använda någon av de storyboard, och en tom ansökan kommer inte ge mig ett storyboard. Detta är bara för att förhindra att mig själv från att fuska. Låt oss se. Vänta. Gjorde jag - Ja. OK. Rätt. Så, här är vi kvar med inget annat än kod. Så, låt mig flytta fönstret något över. Rätt. Som ni kan se här, de enda filer vi ges är AppDelegate.h och dot m, och vi har inte storyboard längre. Så om vi kör detta är vi fortfarande kommer att komma till den vita skärmen, tack och lov. OK - vit skärm, men inget annat. Och här är den viktigaste delen. Det är där det händer händer. I de tidigare versionerna, finns det oftast ingen kod här, men det storyboarden föreskrivs i huvudsak koden för den delen. Jag kommer inte gå in på detaljer om hur. Och vad vi vill göra nu är att vi vill ha att gå in här, och detta lilla utrymme börjar skapa vår app igen. Så - ja? PUBLIK: Zoom? RHED SHI: Zoom. Ja, visst. OK. Jag kommer att skriva, så detta inte bör roll för mycket. OK. Så först, kom ihåg att vi ville skapa en navigationskontrollen, eller hur? Och även, som ni kan se här, Xcode gör ett riktigt bra jobb med självfyllning. Så, som ni kommer att märka, namnen på allt är mycket längre än vanligt, men Xcode fyller det för dig. Så jag kan bara trycka Enter. Så, jag vill skapa ett UI navigering controller pekare, och jag kan kalla det navigationController. Nu, vad gör jag nu? Efter detta likhetstecken, jag behöver, först, skapar det inne i minnet. Så jag ska göra NavigationController Alloc - så är detta liknar malloc, att ni som används i C - och sedan kommer jag att init det. Så det är verkligen viktigt att alla objekt som du skapar, du vill alloc och init det. Det kommer att skapa den och instantialize det inne i minnet, och Nu kan du använda den. Okej? Om du inte gör det, gör ditt objekt inte existerar, och du kommer att stöta på ett gäng problem. Och sedan, jag vill skapa en vy controller, eller hur? Så, jag vill skapa en UIViewController stjärna - så, allt är en pekare i Objective-C, och jag ska göra något liknande, här - Alloc, init. OK. Och vad jag ska göra är, jag är gå till - så, minns när vi gjorde den inbäddade i navigationskontrollen? Detta är hur du gör det i kod. Du kommer att göra navigationController pushViewController - PUBLIK: [OHÖRBAR]. Kommer detta att hända för oss, eller -? RHED SHI: Oh, ja. Nej. Det gillar mig bättre. Nej, kommer det att fungera för dig också. Så dessa är alla metoder. Så pushViewController är en metod, och även mer specifikt, är det en instansmetod för UI navigationskontrollen. Eftersom jag var tvungen att skapa mitt UI navigering controller stjärna, och sedan jag kan kalla detta pushViewController på min specifik instans av ett UI navigering styrenheten. PUBLIK: Har vi att göra exakt ord, eller är det redan finns för det? RHED SHI: Ja, eftersom det är en metod. Det är som en funktion. Det är som printf. Det är som scanf. Det är som strcompare. Förutom den vet vad du kanske vill typ, och märker att det kommer alltid komma med saker som är juridiskt tillåtet för dig. Så, om inget dyker upp här, då något är fel. Så, pushViewController. Så, nu vill jag att skjuta min nyskapade UIViewController, och sedan, animerade - kanske inte. Eftersom detta kommer att bli den första vyn controller. Jag menar, även om jag gjorde animerade, det förmodligen inte kommer att dyka upp, eftersom det är den första skärmen. Och kom ihåg konsolerna. Så kom ihåg hur vi använde konsolerna? Och innanför parentes, objekt uppmanar en metod - så vårt mål är navigations styrenheten, och metoden är en push view controller animerade. Och se hur det tar två argument, och de är åtskilda av, sorts, ord och ett kolon. Så försöker Objective-C för att göra det trevligt och enkelt för dig att läsa högt - koden - och ha det semi, slags, vettigt. Men att göra just detta är inte tillräckligt. Låt mig zooma ut nu. Att göra just detta är inte tillräckligt för att få vad vi fick tidigare. Så här kommer du att märka att det finns faktiskt inte kommer att bli någon form av bar, här, eller hur? Det finns ingen navigeringsfältet, vilket innebär att vi fortfarande inte har fått det. Och vi kan testa det ut, också, genom att, kanske, ändra bakgrunden av ViewController, eller hur? ViewController.background-- ah. Så, se hur ViewController inte hade en bakgrundsfärg, även om jag ville komma åt det? Och det beror på att ViewController är en behållare för vyn. Så har det en vy egendom, som sedan har en bakgrundsfärg. Och, kan jag ställa in den, typ av tröttande, genom att kalla färgen på UIColor objektet. Så, meddelande här, är redColor en metod. Det är en klassmetod UIcolor. Eftersom jag inte behövde skapa en faktisk instans av en UIColor för att anropa metoden på det. Jag bara, helt enkelt, kallade det på typ-liknande namn. Jag, liksom, kallade det på int, om int hade, liknande, en metod för att den, till exempel. Och så, om vi kör den här koden, vi kommer märker att bakgrunden är faktiskt inte röd. Det är fortfarande vitt. Och hur vi kan komma runt det är, märke till hur det är self.window. Det är, liksom, den ultimata behållaren för din ansökan. Det är den ultimata sak som innehåller allting på skärmen, under en iPhone eller iPad ansökan. Och, enkelt, self.window har denna egenskap som kallas rootViewController. Och det kommer att bli pekaren till den allra första uppfattning controller inne för din app. Så, vad vi vill göra här, nu, är ställa in det lika med vår navigering styrenheten. Rätt? Därför att, tekniskt, navigation regulatorn är vår allra första uppfattning styrenheten. Det håller reda på en rad andra vy controllers, och vi drivit denna View Controller i matrisen i navigationskontrollen. Så, vill du inte göra det här. Det skulle egentligen inte hjälpa dig. Du vill göra det här, om du vill göra en navigationskontrollen, vilket de flesta av er förmodligen kommer eftersom du vill att, liksom, har någon form av, liknande, menyn för att gå tillbaka till eller någon hemsidan för att gå tillbaka till, snarare än en tom skärm. Ja? PUBLIK: Är det obekvämt för dig att zooma in på den - RHED SHI: Ja. Så, ja. Detta är koden, och nu Låt oss testa det. Så där ja. Magi. Så, OK. Tack. OK. Så nu, vad vi vill göra är att - ja, vi är typ av begränsad, här, eller hur? Vi skulle kunna skriva allt Insidan av en funktion. Men, det är inte hur iOS utveckling brukar fungera. Så, vad vi ska göra är, vi är kommer att skapa några nya filer. Men, mer specifikt, vi ska skapa en annan Objective-C klass, eller Ett annat ändamål - klass och objekt är utbytbara här. Och, här är hur jag kunde, potentiellt, skapa en annan klass av U-styrenheter. Så det är en underklass, som ni kommer att märka, här, det är en underklass av den UI view controller, men jag kan kalla det något annat namn här. Jag skulle kunna kalla detta CS50, skulle jag ringa denna uppfattning controller, jag kunde ringa denna bla view controller - vad jag vill. Det är bara namnet på klassen. Men det kommer att vara viktigt därför att, i huvudsak, vad jag gör här är, jag skapar ett annat klassnamn. Så, det kommer att bli, liksom, en del sorts typ eller ett objekt. Så bör det vara lite generisk. Det kommer inte att vara mycket specifika. Och dessutom, jag vill peka ut dessa två alternativ. Eftersom vi gör allt inuti kod, ibland är det mycket enklare att ta in ett gränssnitt fil, så att Jag kan bokstavligen dra och släppa, som vi gjorde tidigare med storyboard - ni vet, en etikett, eller en knapp, eller vad. Och så, xibs är filer som gör att du kan gör det, och du måste ansluta den denna uppfattning controller fil. Så, jag ska medvetet inte kontrollera detta. Vanligtvis skulle jag kolla det här, och om jag endast gjorde detta för iPhone eller iPad, jag skulle kontrollera detta och helt enkelt ha en för, du vet, iPhone eller iPad. Men eftersom jag gör universell, jag ska att skapa två av dem senare. Så, jag ska medvetet avmarkera detta. Det är också väldigt viktigt. Många gånger har jag haft fel där det inte kontrollerades. Och så, naturligtvis, är den här filen inte, slags, som ingår eller importeras insidan av detta test mapp. Och så har min kod absolut ingen aning om existensen av denna fil, och som orsakar mycket smärta och timmar av felsökning. Men, se bara till att det här är markerat så att, du vet, målet för detta Filen är för denna applikation. OK. Så, nu har vi skapat två nya filer. Och dessa filer ser ganska tom. Och, faktiskt, låt oss också att fortsätta på genom att skapa de XIb filer. Så, tidigare, var jag i Cocoa Touch list. Nu ska jag gå in i användar Gränssnitt beröring, och som ni kan se, jag kan skapa ett storyboard. Så även jag började med en tom applikation, jag kan fortfarande använda en storyboard. Även om det blir knepigt när det gäller på hur du vill ansluta det till din kod. Så, jag kommer inte gå dit. Men, vad vi vill göra nu är att skapa en vy. Och du kan välja för en iPhone eller en iPad. Och oftast, för att beteckna skillnad - om du gör en allmän tillämpning - du antingen lägga ett understreck iPhone, eller så kan du göra en Twiddly. Det spelar egentligen ingen roll. Det är helt enkelt för dig att skilja vilken uppfattning är att vilken enhet. Och så, nu ser. Jag har en skärm som jag kan jobba med. Och så, till exempel, jag kan sätta en etikett den här, du vet, och jag kan också sätta annan knapp här. Jag kommer inte bry ändra värdena här. Men, vad som är viktigt här är att filens ägare - så, jag är inne i iPhone visa, iPhone Xlb fil. Och i det här navigeringsfältet eller rullgardinsmenyn, jag vill gå till filens ägare. Och detta är verkligen viktigt steg här. Jag vill göra klass vy styrenhet, så att denna XIb filen är kommer att vara associerad med min åsikt controller. Och allt som jag gör inne i min mening controller programmässigt är kommer att återspeglas på här. Så är dock att märka att - faktiskt, låt oss göra denna uppfattning bakgrund blå, till exempel. Eller grönt. Och sedan, så om du kommer att märka, tillbaka i denna kod, det är där vi fick våra navigationskontrollen. Även om vi gjorde det steget, är det fortfarande kommer att vara röd, inte grön. Och det finns en anledning till varför. Det är för att, när vi inited vår uppfattning controller, här - ledsen, det är lite galet - när vi inited vår uppfattning controller här, vi inited det av den allmänna typ UIViewController. OK? Så vi inte ens göra det med denna klass. Så kom ihåg, detta är som en klass nu. Det kan ses som en typ, som bara som UIViewController är en typ. Och för att använda det, vad vi behöver göra är att importera den - import ViewController - och som ni kan se, det AutoFills det för mig. Så, ViewController - och nu, här, jag kan ändra detta UIViewController till ViewController. Och nu, här, jag kan ändra detta till ViewController. Låt oss köra detta igen. Det är fortfarande röd. Och anledningen till det är fortfarande rött är därför - woah, vad hände där? Vi ville associera detta xib fil med utsikt controller. Men för att verkligen göra att vi måste gå in i det här. Och när vi gör init, vi vill göra initWithNibName, och sedan vill vi gör det på strängen View_iPhone, till exempel. Du kan ignorera bunten här. Och detta kommer att möjliggöra oss till, faktiskt - uh oh, det finns ett problem. Rätt. Och så finns det ett problem, eftersom det i vår uppfattning Xlb fil, har vi en etikett och vi har en knapp. Men även om vi har anslutit dessa två, det finns inget inuti ViewController.h eller ViewController.m som speglar de knappar eller sådana etiketter. Så måste vi skriva de i så egenskaperna hos den vy controller. Så detta är hur du deklarerar en fastighet. Det tar i, oftast, dessa två alternativ. Vid tillämpning av oss och detta seminarium, Jag skulle säga att, i allmänhet, de flesta fastigheter är nonatomic och behålla. Du kan läsa upp av Google söka, du vet, skillnaden mellan nonatomic och behålla den, du vet, Google eller något. Och jag tar dig till, liksom, Stack Overflow, där människor kommer att ha svar till skillnaderna mellan dem. Men för nu, det är vad vi vill bli berörda. Och vi vill göra en UI etikett, stjärna, och vi kan kalla det vad vi vill ha. Vi kan kalla det, du vet, etikett. Och kommer vi att skapa en annan en för knapp. Och kom ihåg att ta med asterisken, eftersom vi har att göra med pekare ganska mycket överallt inne av Objective-C. Dock kommer det fortfarande inte att lösa problemet, som ni kan se här. Och skälet är att, när vi vill ansluta en etikett Xlb fil eller en knappen för att programmet, eller sidhuvudet och genomförande-fil, vill vi lägga till denna bit kod - utlopp. Lägg märke till att det är ett nyckelord. Och, så fort jag skrivit klart ut det, borde det ha dessa två cirklar, här. Vanligtvis, de är inte fyllas i. Jag är inte säker på varför de är. Men oftast, måste du manuellt ansluta dem genom att gå till denna sida av försörjningsområdet. Och så, just nu, jag har min etikett valt, och jag vill dra denna nya referera utlopp för min fil ägare, och sedan klicka på Label. Så nu, äntligen, är denna etikett ansluten till denna etikett. Och denna etikett är vad vi ska använda programmässigt för att ändra dess text, dess typsnitt, dess bakgrund färg, et cetera. Så, varför inte vi gör det Samma för knappen? Och som ni kommer att märka, för knappen, det är lite mer komplicerat. Därför att, jag menar, du ska till trycker på en knapp, så det har fått en hel del alternativ för hur användarna kan trycka på en knapp. Och sedan får vi se senare att Vi kan koppla detta till vår kod för att få det att fungera. Så, för nu om vi vill ansluta den till den färdiga knappen insidan av vår kod. Så vi går till nya referenser utlopp, och gör sedan på knappen. Nu ska vi köra det här igen. Uh oh. OK. Jag vet inte vad som händer här nu. Whoa. Bara ett ögonblick, här. Egentligen, varför inte vi tar en titta på ett annat exempel på intresse tid. OK. Så, här är det mer lätt framställas exempel för ViewController. Som ni kan se här, har jag inkluderat egenskaperna för den etiketten och knappen. Och sedan, denna bit kod här - denna IBaction - var en anslutning till den här knappen här. Så som ni kan se här, Touch Up Inside är ansluten till väljaren kallas intryckt. Så, vi kan faktiskt gå igenom rörelse igen, här, genom att retuschera Inne och dra den till Filens ägare, och sedan klicka på intryckt. Nu ska vi köra vår kod. Så nu, fungerar denna knapp nu och kommer att ta oss till nästa sida. Och, när det gäller vår syn controller, Detta är den bit kod som tog hand om den intryckt. Och det är viktigt att notera här, att Jag har skapat en annan typ av utsikt styrenheten kallas en tabell view controller. Så var det liknande att backa in storyboard, när jag drog en av dessa bord view controllers in i storyboard. Jag skapar en annan Pekare till tabellvyn controller, alloc och init-ning det, och sedan göra själv dot navigation controller, pressa ViewController denna nya viewController. Och jag har satt animeringen att ja, eftersom nu inne på min app, och jag vill verkligen se animationen går från hemsidan till bordet view controller. PUBLIK: Har du fortfarande orolig om sophämtning? RHED SHI: Vad är det? Nej. Så frågan var, har du att arbeta med sophämtning? Så, Xcode 4 hade som ARC, vilket är automatisk referensräkning. Och så, oftast när man startar en ny projekt, vill du kolla det, eftersom ingen egentligen vill ta itu med frigöra minne och sånt. Men jag tror i Xcode 5, finns det inte ens det alternativet om det nya projektet. Så, den automatiskt gör det åt dig. Ja? PUBLIK: Kan du exportera en PDF i ditt storyboard? RHED SHI: Ja, definitivt. Så kommer alla av dessa innefattas i källkod, så att ni kan kolla in den färdiga Xcode projekt för det. Yeah? PUBLIK: Men, jag menar, liksom, kan jag skriva ut en PDF-fil med min storyboard? Om jag bara vill exportera bilder att visa någon. RHED SHI: Oh yeah. Jag tror, ​​kanske, kan du bara ta en skärmdump. Ja, och skicka dem en skärm skott eller något. Yeah. Så, låt oss se. Med tanke på tiden, tror jag det är allt jag kan täcka idag. Men, jag vet att det är, faktiskt, bara knappt röra vid ytan på iOS utveckling. Så, är du välkommen att kontakta mig om du har några frågor om iOS utveckling. Och förhoppningsvis kommer jag att kunna rengöra upp en del av koden för käll code-filer, så att du kommer att ha några riktigt fina exempel att arbeta med. Andra än så, om ni går till CS50 Hackathon, kanske eller kanske jag inte vara där, och jag kan hjälpa till med några iOS utveckling, för. Så, tack så mycket, killar.