>> 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.