RHED SHI: Velkommen til se CS50 seminar - Introduksjon til iOS. Takk til dere alle for å komme. Jeg håper du er like begeistret som jeg er om iOS. I fjor tok jeg CS50 som en sophomore, og jeg i utgangspunktet lært iOS for min avsluttende prosjekt. Og det var ganske - vel, det var ikke lett, men det er massevis av støtte tutorials på nettet. Og jeg håper virkelig at med denne seminar, vil jeg gi dere et hode starte på iOS utvikling Så, i form av iOS utvikling, Det er hovedsakelig to ting vi ønsker å dekke i dag. Først språket - språket kommer til å være i Objective-C. Vi vil faktisk høre noe virkelig spennende. Så kan du bli med hele Apple fellesskapet av utviklere og bygge litt virkelig awesome apps. Også iOS 7 er vakker, forhåpentligvis, til noen av dere. Men det er kontroversielt, jeg vet. Og først og fremst, hva jeg ønsker å gjøre er å guide deg gjennom Objective-C, og også Xcode, som er integrert utviklingsmiljø som du vil være arbeider i for iOS. Og så, bare et ord på Objective-C. I utgangspunktet er det nøyaktig samme som C, men med en masse andre ting. Og så, mer strengt, det er faktisk en super-sett med C. Så alt som du kan gjøre i C akkurat nå, noe som er utgangspunktet liker PSett 0 til 6, du kan gjøre i Objective-C. Så, ikke føler seg redd om denne nye språk som du kommer til å lære. Du har allerede dekket mye av det, fordi du har alle gjort C denne fortid semester, bortsett fra nå du kommer å ha mye mer å jobbe med. Og jeg bare kommer til å lede deg gjennom en par eksempler for å fremheve noen av de viktigste forskjellene som jeg fant var veldig viktig når jeg har lært Objective-C i fjor. Vel faktisk, så, det andre punktet er, Objective-C er, selvsagt, objektorientert. Og vi vil diskutere litt om hva det betyr senere. I utgangspunktet er det som hvordan du jobbet med structs i denne siste PSett, med noder og lignende andre ting som det. Bortsett fra, i Objective-C, er alt et objekt, og du kommer til å være passerer rundt pekere til objekter i stedet for de verdier selv. Så, det er bare noe viktig å huske på. Så, hvorfor ikke vi starte med noen forskjeller i syntaks mellom C og Objective-C? Jeg ønsker å markere # include, du vet, standard io.h i C og C + +, med Objective-C versjon av det, som er # import, og deretter en slags header-fil. I dette tilfellet ville det være UIKit, du vet, slash UIKit.h. Det kan også være, du vet, MKMapview til deg slash MKMapview.h hvis du ønsker å gjøre, som, et kart inne i programmet ditt. Lignende ting som det. Så, er det viktigste omfatte er nå endret til å importere. Men ideen er fortsatt. Du kommer til å være å importere noen form av header-fil inn i programmet. Jeg ønsker også å fremheve forskjellen mellom printf og NSLog. Men som vi sa tidligere, Objective-C er en streng super-sett C, noe som betyr at printf finnes i Objective-C, også. Men, de fleste ikke bruker det. De fleste bruker denne NSLog fordi det gir deg en tidsangivelse, og vi får se den i aksjon senere. Men det er generelt en mer nyttig måte å skrive ut variabler. Og jeg ønsker også å fremheve at NSLog tar i akkurat den samme plassholder verdier som printf gjør - så% d er for en int, % F er for en flottør. Men jeg ønsker å fremheve denne aller siste - NSLog% krøllalfa - som er en plassholder for et objekt. Og som jeg sa tidligere, Objective-C avtaler ganske mye for det meste i objekter, og så dette vil komme i bruk når du ønsker å skrive ut, kanskje, kanskje en NSArray, eller NSDictionary, eller en NSString. Så, også, legge merke til at i vår NSLog uttalelse, har vi en krøllalfa foran av sitatet - som er å betegne som strenger, nå, i Objective-C er objekter. De er ikke lenger bare røye stjerner. De er gjenstander og er behandlet slik. Så, er det veldig viktig at når du bruker NSLog det tar i en NS streng, noe som betyr at du vil ha å inkludere en på foran din anførselstegn. Og det er derfor du ser, her, i alle min funksjonskall til denne NSLog, jeg har en på foran sitater, selv om% d og% f-er alle det samme fra C. Eventuelle spørsmål så langt? Jeg skal prøve å gå gjennom dette raskt slik at vi kan ha mer tid til å jobbe med Xcode og Objective-C, så at dere kan få mer kjent med den. Deretter ønsker jeg å fremheve noe konseptuelt viktig. Så, i C, de fleste ting er funksjoner. Vi gjør et funksjonskall. Vi erklærer funksjoner på denne måten, med avkastningen typen først, deretter den funksjonsnavn, parentes, og deretter uansett argumenter og hvilken type disse argumentene vi ønsker å passere i. Og Objective-C, fordi alt er et objekt eller klasse - slik klasse og objekt er to vilkår som er stort sett det samme som hverandre så jeg kan bruke dem om hverandre hele seminaret. Men, vil du se at vi har metoder i Objective-C heller enn funksjoner. Og metoder tilhører gjenstander. Så like, kanskje ta for eksempel node - vår type [uhørbart] node fra PSett 6 eller 5 - vi har ordet, eiendom, eller neste node pekeren. Metoder er bare funksjoner inne av en slags struktur. Så, i dette tilfellet, ville konstruksjonen bli objektet, og deretter metoden er noe som hører til et objekt. Og dette er hvordan du ville erklære, slags, en fremgangsmåte. Du vil starte med, igjen, avkastningen type - så, jeg prøvde å farge kode er stikkordene her, slik at dere kan se, i hvert fall, formatering likheter mellom funksjon erklæringer og metode erklæringer. Så starter du med, du vet, en avkastning type - i dette tilfellet, er det en matrise, eller en NSArray spisser - og da har du denne metoden. Og så, hva som er interessant her er at i stedet for å ha parenteser, vi har disse kolon. Og så, foran våre argumenter, vi settes, på nytt, i parentes typen av våre argument. Så, akkurat nå prøver jeg å gjøre det sammenligning mellom, du vet, n og nummer, fordi de er både som ints. Og så, den andre er en NSUInteger type. Og så, med Objective-C, når du ønsker å ha flere argumenter i metoden klausulen, du, liksom, skille dem ut litt som dette - Jeg er ikke helt sikker på hvordan jeg skal beskrive det, men dette er et godt eksempel på hvordan du kan ha flere argumenter i det. Du kan, selvfølgelig, bare helt ignorere andArray kolon NSArray matrise hvis du bare ville ha en metode som tar i ett argument. Ja, spørsmålet. PUBLIKUM: Er både NSUInteger og NSArray argumenter som kan tas i innenfor NSArray? RHED SHI: Ja. Så, la meg forklare. Så, ja. Så, spørsmålet var er NSUInteger og NSArray * typer av argumentene, og det er riktig. Så, du alltid ønsker å spesifisere hva type argumentet ditt er. Og her, jeg prøver å introdusere deg til noen av syntaksen og vocab av Objective-C, så de som er faktiske typer at du vil være med å gjøre. Og som du vil legge merke til, matriser er fjernet, på en måte, enkle brakett ting. De er stedene. Selv om, hvis vi går videre til neste lysbilde, kan vi se at vi kan hard-kode en NSArray i Objective-C med rett og slett en på symbol foran brakettene. Jeg er ikke, faktisk, ganske sikker på om Jeg syntaktisk hardkodet en matrise riktig for C-versjonen, men det er ment å være i en C-array. Så, er det slik du vil, vet du, kanskje bruke funksjoner eller metoder som vi opprettet tidligere. Høyre? Så, er dette hvor vi erklærer vår funksjon og vår metode. Og nå ønsker vi å bruke dem i vårt program, og dette er hvordan vi ville gjøre det. Så, i C, vil du ha, du vet, kanskje, en bool b, og du setter den til lik funksjon, og deretter du passerer i argumentene. I Objective-C, er det ganske mye det samme. Du har NSArray * my_array, og det er kommer til å like - nå, den eneste Forskjellen her er dette objektet tingen, som jeg har uthevet i gult, og som du kan se, i C, er det ingen andre gul ord. Og det er fordi metoder tilhører med et bestemt objekt. Så det er derfor jeg må ha et objekt det, liksom, kaller denne metoden på tallet null, og deretter den NSArray a, b, c, d. Eventuelle spørsmål om det? Vi får se disse begrepene i aksjon ganske snart når vi går inn i en demo. OK. Nå ønsker jeg å snakke litt kort om Xcode 5, som er integrert utviklingsmiljø at du skal jobbe med. Jeg vet mange av dere, eller noen av dere, har Mac, noe som er et problem fordi Xcode er ikke tilgjengelig for Windows og PC. Ikke spør meg hvorfor, men sannsynligvis - yeah, corporate. Uansett. Men uansett, så, beklager jeg hvis noen av du trenger å laste ned noen form for virtuell maskin for Mac i For å kjøre Xcode fem. Men det er en ganske kjekk liten programvare som skal brukes. Og så, før vi dykke inn i noen form av demo, jeg bare ønsker å vise deg et bilde av hva Xcode ser ut i din vindu, og deretter også snakke om hva hele denne plassen er. Så, det er litt som å lære å bruke Microsoft Word, bortsett fra at du ønsker å bli kjent med alle forskjellige ting som er det som skjer her. Så først, jeg ønsker å peke deg til verktøylinjen øverst. Du vil se at, på toppen, vil du ha filnavnet - eller, faktisk, prosjektnavn og deretter filnavnet. Legg merke til lek og stoppknapper. De er de som du vil være bruker til å kjøre programmet ditt på simulator - iOS simulator. Dette kommer automatisk med Xcode 5, slik at du ikke trenger å bekymre deg for laste ned en slags simulator. Du bare trykker på play og så det går programmet ditt. Og du kan spille rundt med deg, og vil du se hvordan det fungerer senere. Og så, i sentrum, selvfølgelig, er der alle dine vakre kode er kommer til å gå. Og så, på venstre side, vil du har dette, liksom, mappe - navigasjon - og da vil du også se at, sammen med mappeikonet, er det en haug med andre ikoner der ute som vil være nyttig senere. Og så, på høyre side er et verktøy område hvor du kan jobbe med noen av objektene og spesifisere, du vet, hva fargen skal være, hva skriften skal være, et cetera. Selv om alt du gjør i et bruksområde, kan du gjøre i kode i tillegg. Og så, jeg må gå gjennom to eksempler på bruk, er det bare, ingen kode alle - eller svært minimal kode - versene all kode, bare slik at dere vet hva du kan og ikke kan gjøre i Xcode og Objective-C. Og så, endelig, ned på bunnen, du har debug området. Så, trenger du ikke lenger å kjøre GDB, et cetera, på programmene. Det gjør det automatisk for deg. Og du kan også skrive ut ting til dette området. Så egentlig, senere, vil vi gå gjennom mario.c, hvis dere fortsatt husker at i Xcode. Så det skal være gøy. Og så, bare for å bringe det tilbake til Objective-C, jeg ønsker å fremheve hva du kan gjøre med hvis uttalelser. Så, du vet, fordi Objective-C er en supersett av C, alt du gjør er, bokstavelig talt, det samme som C. Du bare har små forskjeller. Så, vil du legge merke til skjemaet for en hvis uttalelsen er fortsatt den samme - du har hvis, og da har du parenteser med en tilstand inne i, det og deretter klammeparentes for hva du ønsker å gjøre inne på det. Men jeg ønsket å sette dette lysbildet opp her bare for å illustrere at, fordi vi har å gjøre med gjenstander nå, vi er nødt til å bruke disse tingene heter som er lik strengen, som er tilfeldig, en fremgangsmåte for en string eller en NSString objekt. Så, ord, i dette tilfellet, er en NSString objekt, og den har en metode som kalles er lik streng, og da vi passerer i en hardkodet streng for å se hvorvidt disse er like til hverandre. Eventuelle spørsmål så langt? OK. Og, ønsker jeg å gå over en for uttalelse også. Så, for eksempel hvis vi ønsket å sløyfe over lengden av en streng C, denne bør være kjent for deg. Og, i Objective-C, vil jeg å markere dette, liksom, metode som kalles teller. Vel, faktisk, la meg bare ta det tilbake. Count er en metode for matrisen. Men det er mer spesifikt en eiendom av array, som er grunnen til at du kan bruke dot notasjon. Men jeg ønsker ikke å komme inn i for mye av Dette konseptuelle ting, jeg vil bare ha vise deg hvordan ting ville se som i Objective-C versus C. Og også, jeg ønsker å påpeke at selv om jeg har brukt NSUInteger foran alle mitt jeg er i Objective-C, du kan også bruke int, fordi int er helt gyldig i Objective-C, også. Ja? PUBLIKUM: Er det bare stilistiske, eller er - RHED SHI: Yeah. Så, som du ser - så, var spørsmålet er at bare en stilistisk problemet. Som du ser, har jeg en, liksom, stjerne asterisk ting ned på bunnen, og at koblingen tar deg til en stack overflow form, der noen forklarer forskjellen mellom en int i NSInteger og en NSUInteger. Og så kan du lese om det senere. Disse bilder vil være selvsagt tilgjengelig for deg. La oss se. OK, awesome. Så, er dette også inkludert i lysbildet fordi jeg trodde dette var en stor nettsted som introduserer deg til Objective-C syntaks. Så, faktisk, hvorfor ikke vi flytte til Chrome og sjekk ut denne nettsiden? Høyre. Så, hva jeg ønsker å vise deg Gutta her er dette bildet. Så, dette er, liksom, kommer til å være det du kommer til å se innsiden av en hvilken som helst Xcode-fil. Egentlig, hvorfor ikke vi bare ta en øyeblikk til, liksom, ta dette i. Så, denne boken - det er objektet som vi har med å gjøre. Og da har det åpenbart kommer til å være arvet fra et annet objekt, men du trenger ikke å bekymre deg for det. Og så, det, kanskje, har noen medlemsvariabler. Det viktigste jeg ønsker å vise deg er de instansmetoder, her. Så, er instansmetoder betegnet av dette minustegnet. Og så, som du vil legge merke til, er vi allerede begynt å se paradigmet for metode erklæringen, ikke sant? Den returtype, metoden navnet,, og deretter typen argumentet, og deretter navnet på argumentet. Og dette minustegnet betyr at det er en eksempel-metoden, noe som betyr at disse metodene er kun tilgjengelig for gjenstander som har blitt instansiert. Til kontrast som, metoder med et pluss logg inn foran dem er klasse metoder, noe som betyr at du kan ringe disse metodene, selv om du ikke har et objekt laget ennå. Så, for eksempel en klar, NSString er en klasse. Og du kan ringe, for eksempel, klassemetoder på NSString - selve liksom ordet NSString. Men, for å kunne bruke disse metoder, du faktisk behov for å opprette en streng. For eksempel tilsvarer NSString stjerne streng ved anførselstegn, hello world. Og så kan du bruke disse metodene - instansmetoder - på at hello world streng. Så, det er forskjellen mellom instansmetoder og klassemetoder. Og, vi bare dekket denne delen. Egenskaper er en annen ting som er innsiden av objekter, i utgangspunktet. Og du erklære dem med den på eiendommen søkeord. Du har disse mulighetene, her, at jeg skal forklare senere når vi går inn i en demo. Ja? Hei. PUBLIKUM: Kan du zoome inn, please? RHED SHI: Oh yes. Unnskyld. PUBLIKUM: Takk. RHED SHI: Det burde være mye bedre. PUBLIKUM: Yeah. Takk. RHED SHI: Ja, kan du minne meg om Jeg glemmer å zoome inn eller ut. Så, er dette alt jeg ønsket å vise deg for - Jøss, det er mye - for denne nettsiden. Så, la oss gå tilbake til våre lysbilder. Egentlig, nå la oss ta et øyeblikk å dykke inn en demo. Så vil vi starte med en ny Xcode-prosjekt. Så, hvis du vil åpne opp Xcode på alle dine maskiner, skal det ta deg litt side der det står, som, enten åpent opp et eksisterende prosjekt eller en ny prosjekt, og du bør Klikk et nytt prosjekt. Og da bør det ta deg til denne skjermen. Ja? PUBLIKUM: Hvis vi ikke har en Mac, trenger vi bare slags slappe? RHED SHI: Eller se på med noen, ja. Yeah. Du kan slappe av, også. OK. Så, hva skal vi gjøre først, nå, er, faktisk, vi kommer til å gjøre en enkelt visning søknad. Så, hvis du vil legge merke til, hva er flott om Xcode og Apple støtte for utviklere er at du har mye av maler for å jobbe med allerede. Du kan for eksempel lage en herre-detalj søknad. Du kan lage et spill - og faktisk, vil jeg ikke gå inn i spill, fordi spill er en annen historie for iOS utvikling. Og de er slags skille, så jeg vil ikke gå inn på det. Så, du har sidebasert applikasjoner. Du har en fane søknad - så liker, for eksempel Bank of America sannsynligvis har, som, en fanebasert app. Det er de hvor du har knappene nederst. Og da har du en Sprite Kit spillet. Eller du kan jobbe fra bunnen av, som er hva vi skal gjøre senere. Men la oss først starte med en enkelt visning søknad. Deretter vil det be om et produktnavn, og vi kan bare gjøre testen. Navn på organisasjonen - så, organisasjonsnavn, selskap identifikator - de som er viktig hvis du skal å sette din app på App Store. Annet enn det, er koden din kommer til å kjøre helt fint uten dette. Dette kommer til å være viktig hvis du ønsker - så, per se, som, sette app på din telefon eller noe, og test det ut, du vet, i det virkelige liv - Dette vil være viktig. Dette har en tendens til normalt være forbundet med en slags developer konto med Apple. Og så, jeg vet, sannsynligvis, mange av dere vil ikke ha noen utviklerkontoer. Jeg vet at universitetet har en. Jeg tror CS har en. Men, du kan sende meg og jeg skal prøve å finne det ut for deg. Men akkurat nå, jeg har nettopp satt i noen eksempel ting her. Og du kan selvfølgelig her, velger om du vil at det skal være utelukkende i iPhone, i iPad, eller begge deler - universell bruk. Så, for nå, la oss gjøre universell, bare for å se på begge sider av plattformen. La oss se. Så, akkurat nå, kommer jeg til å spare det i en slags mappe. Spiller ingen rolle hvor - du kan alltids flytte det senere. Og nå, vi er brakt til vår Xcode-prosjekt. Jeg ville ikke bekymre deg for alt dette. Jeg foreslår ikke å berøre noen av dette, med mindre du vet nøyaktig hva du gjør. Så, alt dette, bare ignorer for det meste. Du trenger ikke å røre den, og hvis du du rotet opp noen ting her, det blir litt vanskelig. Så, hvorfor ikke vi se nærmere på filene på venstre side i vår navigatør. Her har vi AppDelegate.h. Vi har AppDelegate.m Så, som du vil varsel, har vi header filer, som ende i dot h, og vi har implementering - faktisk, la meg zoome inn OK. La meg zoome inn Høyre, så du har header-filer og du har gjennomførings filer. Egentlig - OK. Dette er litt rart, men bærer med meg. Så, fordi vi har valgt en enkelt visning søknad, kommer vi til å være jobber med storyboard. Så, er storyboard noe som Apple har kommet opp med for å virkelig hjelpe utviklere raskt prototype søknader sine. Så, er dette hvor du kan lage en app uten å skrive en eneste linje med kode. Men i vår enkelt visning søknad, Vi har, selvfølgelig, ha et fil for vårt syn, som er et riss i kontrolleren. Så har vi overskriften og implementering fil, her. Og, jeg kommer til å zoome ut nå fordi vi må arbeide i dreieboken. Så, her er vårt syn. Hvis vi, rett og slett, kjøre applikasjonen akkurat nå, det er ikke mye spennende som skjer. Så, vil du se denne hvit skjerm. OK? Og, i våre verktøy område, kan vi legge en haug med forskjellige ting til det. Så, når du arbeider med skjermer i iOS, vise kontrollere er den gjenstander som innkapsler, liksom, dine synspunkter. Så, en vise kontrolleren alltid har en egenskap som kalles visning. Og det synet, vanligvis inneholder, du vet, hva du ønsker å se på en skjerm. Så, vel, la oss bare starte med å sette, kanskje, kanskje en etikett. Så, la oss sette en merkelapp på det - stikke den i midten. Så, nå som jeg har klikket på etiketten, jeg kan gå inn i egenskaper inspektør og begynne å endre sin verdi. La oss kalle det CS50 Colours. Og jeg kan også endre skrift. Så, i stedet for å gjøre systemet, som er standard, kan vi gjøre en egendefinert en. Vi kan snu - du vet, ultralett, gjør det 32. Og så kan vi lage våre boksen større. PUBLIKUM: Tror du at du kan zoome i bare litt mer, kanskje? RHED SHI: Yeah? OK. PUBLIKUM: Bare trykk på det? RHED SHI: La oss se. Fungerer dette? PUBLIKUM: Bare pass på Xcode? RHED SHI: Sure. OK. Awesome. PUBLIKUM: The merkelapp under? Etiketten? RHED SHI: Hva er det? PUBLIKUM: Hva rullegardin var merkelapp under? RHED SHI: Så, spørsmålet var, hva drop-down var merkelapp under? Det bør, rett og slett, være under her. Jeg antar det er en kube ting. Men vanligvis, er dette standard - Jeg skal bare ned her før jeg finner en etikett. Yeah. Så nå har vi vår etiketten. La oss sentrere det. Og Xcode gir oss retningslinjer for sentre gjenstander. Så, nå kan vi kjøre vårt koden på nytt. Det vi går. Så har vi CS50 Colours. Og nå, la oss sette en knapp på det, ikke sant? Fordi vi ønsker å gjøre denne interaktive. Så, la oss sette en knapp her. Og vi vil kalle denne knappen "trykk her å fortsette. "Vi vil sentrere det, også Egentlig er det allerede sentrert. Yeah. Så nå har vi en knapp. Og hvis vi kjører dette igjen, skal vi å ha en fin liten knapp her. Og jeg kan klikke det, men det gjør ikke noe, fordi vi har ikke gjort noe med den knappen enda. Så, la oss lage en annen visning, ikke sant? Så, la oss si at jeg ønsker å tappe den knappen, og jeg ønsker å gå til en annen side - et annet syn. Hva jeg kommer til å gjøre er, kan jeg lage en vise kontrolleren, ikke sant? Nå skal jeg klikker på min knappen, og deretter, det viktigste er, jeg kommer til å klikk - eller - ja, trykk kontroll på tastaturet mitt. Kontroll. Klikk på knappen, og deretter drar. Så husk å holde på styretasten. La oss gjøre det igjen. Så, hold kontroll, klikk, og dra til hva du ønsker å gjøre. OK. Og nå, har jeg flere alternativer her. Jeg kan enten presse, eller jeg kan gjøre en modal, eller jeg kan gjøre en egendefinert. Push er bare hvis du har en navigeringskontrolleren. Akkurat nå, vår aller første visning kontrolleren er ikke inne på noe navigeringskontrolleren. Så, er navigeringskontrolleren den ene som gir deg tilbake-knappen på iOS-applikasjonen, hvor du har, vet du, at toppen, liksom, tykk bar - hvor du kan gå tilbake, eller fremover, et cetera. Akkurat nå har jeg ikke det. Og så, det er derfor jeg ikke kan gjøre en push. Så, jeg klikket på trykk uhell, her. Og faktisk, la oss kjøre koden, og det skulle krasje på meg. Bare hvis jeg trykker på knappen skjønt, så - høyre. Så, er dette dårlig. Og, som du kan se, her, vi har feilmeldingen. Så, "Push segues kan bare brukes når kilde kontrolleren er administrert av et forekomst av UI-navigeringskontrolleren. " Så, fordi dette ikke var inne i en navigeringskontroller, Jeg kunne ikke gjøre det. Så, akkurat nå, kommer jeg tilbake til mappe, kommer tilbake til storyboard. PUBLIKUM: Hva er navigasjon kontrolleren, på nytt? RHED SHI: Så, akkurat nå skal jeg vise deg. La oss se. Så, jeg kommer til å klikke på denne visningen kontrolleren, og da kommer jeg til å gå opp til produkt - faktisk, nei, beklager - redaktør. Og jeg kommer til å gå inn - faktisk, det gjorde jeg klikker på det? Nei. Det vi går. Jeg kommer til å gå opp i editoren, gå ned å bygge inn i, og deretter navigasjon kontrolleren. OK. Og, ser min arbeidsplass veldig rotete, så la oss rydde opp. Så, er alt dette storyboard. Og på denne måten - OK, stopp - Jeg kan raskt bygge noe som dette. Og så, nå kan jeg gå tilbake, vet du? Men dette er litt kjedelig, ikke sant? Så, hva jeg ønsker å gjøre er, jeg vil ikke ha å gjøre, rett og slett, en visning kontrolleren. La oss si at jeg ønsket å faktisk gjøre en tabellvisning kontrolleren, slik at jeg kan sette i noen fine farger, inn i tabellen. Så, nå som jeg har satt i mitt tabellvisning kontrolleren, trenger jeg å koble den tilbake fra denne knappen til view controller. Så jeg må gjøre min kontroll, Klikk, dra ting igjen. Og nå kan jeg gjøre push, fordi jeg embed det inne i en navigeringskontroller. PUBLIKUM: Navigasjon kontrolleren bare gjør det mulig å gå fra sted til sted? RHED SHI: Ja. Så, mer teknisk, er det et objekt der - slik at, på innsiden av navigasjons kontrolleren objekt, det holder styr på en matrise. Og denne matrisen holder all den påfølgende vise kontrollere. Derfor når du trykker tilbake, det går tilbake til forrige side. Fordi navigeringskontroller objekt, eller den kode som tar seg av dette formål, har en matrise som holder spore av disse visningskontrollere, og Deretter kan du, du vet, DQ utsikten kontrolleren og gi deg tilbake forrige. Så, dette er tekniske ting, men - og jeg skal vise deg senere i kode, hvis vi har tid. Jeg er litt for å kjøre ut på tid, men - Så, med bordvisningen hva vi kan gjøre er - Det er vanligvis automatisk satt til Dynamic Prototype - vi kommer til å gjøre det Statiske Cells, ellers skal vi støte på noen problemer. Og da, la oss si at jeg skal å ha en seksjon. Så, er deler som - Hvis du noensinne har sett musikk app, når du har kunstnere, deler ville være A-er gjennom Z's - bokstavene - og da, vet du, den enkelte rader ville være artistnavn. Og så, hva som er kult her, er at jeg kan tilgang til alle objektene inni av min storyboard gjennom dette drop-down menyen, også. Så, jeg kommer til å klikke på min del, og jeg vil ha, du vet, kanskje fem rader. Og så, på innsiden av hver rad, Jeg ønsker å sette en merkelapp. Og jeg kommer til å kalle dette blå. Og så ønsker jeg å sette en UI utsikt, du vet, kanskje for, som, en liten boks. Slik at jeg kan vise folk en forhåndsvisning av farge. Og jeg vil gå tilbake til eiendommen og endre den fargen til, oh, jeg gjør ikke det vet, denne. Og så, legge merke til også, her, når jeg har tilbehør, kan jeg ha mye av de forskjellige tilbehør som du vanligvis ser. Avsløringen indikator, detalj, eller hake, eller rett og slett bare detaljer. Så, kanskje vi kan gjøre, som, en avsløring indikator, f.eks. Og så, hvorfor ikke vi ta disse, kopi lime dem, og sette dem inn i neste tabell rad. Så kan vi kalle dette Gul. Og jeg må kanskje utvide denne. La oss gjøre det gule. Og på denne måten, kan vi kopiere lime vei ned. Hva var det? Purple. Så, dette er alle de typiske CS50 farger som du har sett i klassen - faktisk, beklager - eller på nettsiden. Forhåpentligvis dere kan se hva jeg gjør her. OK. Siste. PUBLIKUM: Hvordan fikk du legger raden i utgangspunktet? RHED SHI: Så, spørsmålet var, hvordan gjorde jeg legge raden i utgangspunktet? Jeg gikk inn i denne tabellen seksjon - eller hvordan jeg kan velg tabelldelen - og da, her, jeg oppdatert antall rader. Og, la meg håpe at dette fungerer. OK. La oss se om dette fungerer. Oh, perfekt, fantastisk. OK. Mens jeg holdt på å bygge opp min demo, noen ting ble ikke justert, så, takk for applausen. Yeah. Så, la oss se. Vi vil gjøre dette til ni bare for å gjøre alt - eller faktisk, la oss bare slå alle disse inn avsløring indikatorer. Og så, hva jeg ønsker å vise deg, også, var hvordan jeg kan ta hver av dem tabellrader og ha dem samhandle - oh. Nei. Oh. Også, jeg vil vise deg - her, kan jeg sette tittelen på min navigeringskontrolleren, ikke sant? Så egentlig, vil du legge merke til, så snart jeg integrert dette vise kontrolleren inne av navigasjonskontrolleren, ser vi navigasjonsfeltet øverst på vår storyboard representasjon av en visning kontrolleren. Og så, dette gir oss, som en visuell, liksom, guide til vår synlige skjermen. Dette er åpenbart kommer til å være navigasjonslinjen. Og hva jeg ønsker å gjøre raskt, nå, er satt i en annen - så denne tabellen vise kontrolleren jeg gjorde ved å ta en av disse og dra den her, og det er det som tillatt meg å raskt, egentlig, opprette en tabellvisning kontrolleren. Hvis vi har tid skjønt, vil du se det, programmatisk, er det en litt mer vanskelig å lage en tabell vis-kontrolleren, for det er et par metoder som er nødvendig for deg å, liksom, skrive ut for at tabellvisningen kontrolleren til å vises riktig. Men jeg ønsker bare å vise deg, nå, et eksempel på der, hvis jeg tar denne, for eksempel - Jeg har satt i en annen visning kontrolleren. Og nå, la oss si at jeg ønsker å styre bruke alt min aller første blå tabell rad til her. Og jeg ønsker å kalle denne blå. Og så - la oss se. Jeg er på visning nå, og jeg kan endre bakgrunnen til blå. Og så, varsel, her, denne rullegardin Menyen gir deg også et hierarki av alt av disse stedene. Så en viktig ting å merke seg, her, er at alle disse tingene, her - denne tabellen vise kontrolleren, bordet view, tabellvisning delen, tabellvisning celle - alle disse er objekter, i kode. Så, du vet, en etikett er akkurat nå under innholdet utsikt, et cetera. Så videre og så videre. Så, hvis vi kjøre denne koden, vi bør se noe - la oss se om dette - ja. Så, det vi går. Men, hvis vi ikke gjør det, ingen av dette andre arbeider. Høyre? Så bare dette fungerer. Og, for ordens skyld tid, vil jeg ikke gå inn, du vet, å sette ned de andre. Og dette er slutten på, liksom, storyboard - hva jeg ønsket å vise du for storyboard. Og, jeg har en jobbet ut eksempel faktisk, akkurat her. Så, er dette dreieboken at jeg har gjort tidligere. Så, som du kan se, dette var navigasjonskontrolleren. Da hadde jeg min første visning kontrolleren, Da jeg hadde min tabellvisning kontrolleren, og da jeg hadde alle disse - så tidligere, var jeg gjør noe helt annet. Så, unnskylde de tingene. Jeg skal nok rydde det opp senere før Jeg sender den til produksjon. Men, hvis vi kjører dette, vil vi se at alle alternativene er tilgjengelig for oss. Bortsett fra at jeg ikke lagde bakgrunn disse fargene. Så fin enkel applikasjon. Nå, la oss prøve å takle dette programmatisk. OK. Så, for å gjøre det, vi bare kommer å starte et nytt Xcode-prosjekt. Vi vil gjøre det til et tomt program nå, fordi vi ikke ønsker å ha den storyboard. Så, jeg rett og slett begrense meg selv til ikke bruke noen av dreieboken, og en tom søknad vil ikke gi meg et storyboard. Dette er bare for å hindre meg selv fra juks. La oss se. Vent. Gjorde jeg - Ja. OK. Høyre. Så, her sitter vi igjen med noe annet, men kode. Så, la meg flytte dette vinduet litt over. Høyre. Som du kan se her, de bare filer vi er gitt er AppDelegate.h og prikk m, og at vi ikke har storyboard lenger. Så hvis vi kjører dette, er vi fortsatt kommer til å komme til den hvite skjermen, takk Gud. OK - hvit skjerm, men ingenting annet. Og her er den viktige delen. Det er der handlingen skjer. I de tidligere versjonene, er det vanligvis ingen kode, men storyboard gir i hovedsak koden for denne delen. Jeg vil ikke gå inn i detaljer om hvordan. Og hva vi ønsker å gjøre nå er, vi ønsker å gå inn her, og denne lille plassen begynner å skape vår app igjen. Så - ja? PUBLIKUM: Zoom? RHED SHI: Zoom. Ja, sikkert. OK. Jeg skal skrive, så dette bør ikke saken for mye. OK. Så, første, husker vi ønsket å skape en navigeringskontrolleren, ikke sant? Og også, som du kan se her, Xcode gjør en virkelig god jobb med self-fylling. Så, som du vil legge merke til, navnene på alt er mye lenger enn vanlig, men Xcode fyller det inn for deg. Så jeg kan bare trykke Enter. Så, jeg ønsker å skape en UI navigasjon kontrolleren pekeren, og jeg kan kalle det navigationController. Nå, hva gjør jeg nå? Etter dette likhetstegn, trenger jeg å, første, skape det inne i minnet. Så, jeg kommer til å gjøre NavigationController Alloc - I så fall er dette likt malloc, at dere brukt i C - og da, jeg kommer til init det. Så, er det veldig viktig at noen objektet som du oppretter, vil du Alloc og init det. Det kommer til å lage det og instantialize det inne i minne, og Nå kan du bruke den. Greit? Hvis du ikke gjør det, gjør ditt objekt ikke eksisterer, og du vil kjøre inn i en haug av problemer. Og så ønsker jeg å skape en vise kontrolleren, ikke sant? Så, jeg ønsker å skape en UIViewController star - så, er alt en peker i Objective-C, og jeg kommer til å gjøre noe lignende, her - Alloc, init. OK. Og hva jeg skal gjøre da er, jeg er gå til - så, husker da vi gjorde embed i navigeringskontrolleren? Dette er hvordan du gjør det i kode. Du kommer til å gjøre navigationController pushViewController - PUBLIKUM: [uhørbart]. Vil dette skje for oss, eller -? RHED SHI: Å, ja. Nei. Det liker meg bedre. Nei, det vil fungere for deg, også. Så, dette er alle metoder. Så pushViewController er en metode, og også, mer spesifikt, er det en instansmetode av UI navigeringskontrolleren. Fordi jeg måtte lage min UI navigasjon kontrolleren stjerne, og da jeg kan kalle dette pushViewController på min bestemt forekomst av et brukergrensesnitt navigasjon kontrolleren. PUBLIKUM: Må vi gjøre nøyaktig ord, eller gjør det allerede eksisterer for det? RHED SHI: Ja, fordi det er en metode. Det er som en funksjon. Det er som printf. Det er som scanf. Det er som strcompare. Bortsett fra det vet hva du kanskje ønsker å skriver, og legger merke til at det vil alltid komme opp med ting som er juridisk lov for deg. Så, hvis ingenting dukker opp her, så noe er galt. Så, pushViewController. Så, nå, jeg ønsker å presse min nyopprettede UIViewController, og deretter, animert - kanskje ikke. Fordi dette kommer til å være den første visningen kontrolleren. Jeg mener, selv om jeg gjorde animert, det sannsynligvis ikke vil dukke opp, fordi det er den første skjermen. Og husk brakettene. Så husk hvordan vi brukte brakettene? Og inne i parentesene, den objekt kaller på en metode - så våre objekt er navigasjons kontrolleren, og metoden er en trykk view controller animert. Og se hvordan det tar i to argumenter, og de er atskilt av, liksom, ord, og et kolon. Så, prøver å gjøre det hyggelig Objective-C og enkelt for deg å lese høyt - koden din - og få den semi, liksom, fornuftig. Men, å gjøre nettopp dette er ikke nok. La meg zoome ut nå. Gjøre nettopp dette er ikke nok til å få det vi fikk til tidligere. Så her, vil du legge merke til at det er faktisk ikke kommer til å være noen form for bar, her, ikke sant? Det er ingen navigasjonslinjen, noe som betyr at vi fortsatt ikke har fått det. Og vi kan teste det ut, også, ved, kanskje, endre bakgrunns av ViewController, ikke sant? ViewController.background-- ah. Så, se hvordan ViewController ikke hadde en bakgrunnsfarge, selv om jeg ønsket å få tilgang til det? Og det er fordi ViewController er en beholder for visningen. Så, har det en visning eiendom, som deretter har en bakgrunnsfarge. Og, jeg kan sette den, liksom ordinært, ved å kalle fargen på UIColor objekt. Så, varsel her, er redColor en metode. Det er en klasse metode for UIcolor. Fordi jeg ikke har til å skape en Selve forekomst av en UIColor Script å kalle metoden på det. Jeg bare, rett og slett, heter det av type-lignende navn. Jeg, som, heter det på int, hvis int hadde, som, en fremgangsmåte til det, f.eks. Og så, hvis vi kjøre denne koden, vil vi Legg merke til at bakgrunnen er faktisk ikke rød. Det er fortsatt hvit. Og hvordan vi kan komme rundt dette er, legge merke til hvordan det er self.window. Det vil si, i likhet med, den endelige beholderen for din søknad. Det er den ultimate ting som inneholder alt på skjermen, for en iPhone eller iPad applikasjon. Og, beleilig, self.window har denne egenskapen som kalles rootViewController. Og det kommer til å være pekeren til den aller første visningen kontrolleren inne av programmet ditt. Så, hva vi ønsker å gjøre her, nå, er å sette det lik vår navigasjon kontrolleren. Høyre? Fordi, teknisk, navigasjon kontrolleren er vår aller første visning kontrolleren. Den holder styr på en rekke andre visning kontrollere, og vi presset dette view kontrolleren i denne matrisen i navigasjonskontrolleren. Så, om du ikke ønsker å gjøre dette. Det ville egentlig ikke hjelpe deg. Du ønsker å gjøre dette, hvis du ønsket å gjøre en navigeringskontroller, som de fleste av dere sikkert vil fordi vil du ønsker å, liksom, har noen form for, lignende, menyen for å gå tilbake til eller noen hjemmesiden for å gå tilbake til, snarere enn en tom skjerm. Ja? PUBLIKUM: Er det ubehagelig for deg å zoome inn på - RHED SHI: Yeah. Så, ja. Dette er koden, og nu la oss teste det ut. Så, det vi går. Magic. Så, OK. Takk. OK. Så nå, hva vi ønsker å gjøre er - så, vi er litt begrenset, her, ikke sant? Vi kunne potensielt skrive alt innsiden av denne funksjonen. Men, det er ikke hvordan iOS utvikling vanligvis arbeider. Så, hva vi skal gjøre er, vi er kommer til å lage noen nye filer. Men, mer spesifikt, skal vi opprette en annen Objective-C-klasse, eller et annet objekt - klasse og gjenstander er utskiftbare her. Og, her er hvordan jeg kunne, potensielt, opprette en annen klasse av U-kontrollere. Så, det er en sub-klasse, som du vil legge merke til, her, det er en underklasse av den UI vise kontrolleren, men jeg kan kaller det noe annet navn her. Jeg kunne kalle dette CS50, kunne jeg ringe dette synet kontrolleren, jeg kunne ringe dette blah vise kontrolleren - hva jeg vil. Dette er bare navnet på klassen. Men, det kommer til å være viktig fordi, i hovedsak, hva jeg gjør her er, jeg skaper en annen klasse navn. Så, det kommer til å være, som noen slags type eller en gjenstand. Så bør det være litt generisk. Det kommer ikke til å være veldig konkret. Og også, jeg ønsker å påpeke ut disse to alternativene. Fordi vi gjør alt innsiden av kode, noen ganger er det mye enklere å bringe inn et grensesnitt-fil, slik at Jeg kan bokstavelig talt dra og slippe, som vi gjorde tidligere med storyboard - du vet, en etikett, eller en knapp, eller noe annet. Og så, xibs er filer som lar deg gjør det, og du må koble den opp på denne vis kontroller fil. Så, jeg kommer til å bevisst ikke sjekke dette. Vanligvis ville jeg sjekke dette, og hvis jeg bare gjorde dette for iPhone eller iPad, jeg ville sjekke dette og bare har én for, du vet, iPhone eller iPad. Men siden jeg gjør universell, jeg kommer å lage to av dem senere. Så, jeg kommer til å bevisst deaktiverer du dette. Dette er også svært viktig. Mange ganger har jeg hatt bugs hvor dette ikke ble sjekket. Og så, selvsagt, er denne filen ikke, liksom, som inkluderte eller importerte innsiden av denne test mappen. Og så har min kode absolutt ingen anelse om eksistensen av denne filen, og som fører til mye smerte og timer med feilsøking. Men, bare sørg for at dette er sjekket så det, vet du, målet for denne filen er for dette programmet. OK. Så, nå har vi laget to nye filer. Og disse filene ser ganske tom. Og, faktisk, la oss også fortsette på ved å skape xib filer. Så, som tidligere, var jeg i Cocoa Touch drop-down. Nå kommer jeg til å gå inn i bruker Interface touch, og som du kan se, jeg kan lage et storyboard. Så, selv om jeg startet med en tom søknad, kan jeg fortsatt bruke en storyboard. Selv om det blir vanskelig når det gjelder av hvordan du vil koble som til koden din. Så, jeg vil ikke gå dit. Men, hva vi ønsker å gjøre nå er å lage en visning. Og du kan velge for en iPhone eller en iPad. Og vanligvis, for å betegne forskjell - hvis du gjør en universell bruk - du enten sette en understrekning iPhone, eller du kan gjøre en twiddly. Det spiller egentlig ingen rolle. Det er rett og slett for deg å skille hvilken visning er for hvilken enhet. Og så, nå ser. Jeg har en skjerm som jeg kan jobbe med. Og så, for eksempel, jeg kan sette en merkelapp på her, vet du, og jeg kan også sette en annen knapp her. Jeg vil ikke bry endre verdiene her. Men, det som er viktig her er at filens eier - så, jeg er innsiden av iPhone visning, iPhone xib fil. Og ned i denne navigeringsområdet eller drop-down menyen, ønsker jeg å gå til filens eier. Og dette er virkelig viktig skritt her. Jeg ønsker å gjøre klassen visning kontrolleren, slik at denne xib fil kommer til å være forbundet med mitt syn kontrolleren. Og noe som jeg gjør inne i mitt syn kontrolleren programma er kommer til å bli reflektert på her. Så imidlertid legge merke til at - faktisk, la oss gjøre dette synet blå bakgrunn, f.eks. Eller grønn. Og da, så hvis du vil legge merke til, tilbake i denne koden, er dette hvor vi fikk vår navigeringskontrolleren. Selv om vi gjorde det skrittet, er det fortsatt kommer til å være rød, ikke grønn. Og det er en grunn hvorfor. Det er fordi, når vi inited vårt syn kontrolleren, her - Beklager, det er litt sprøtt - når vi inited vårt syn kontrolleren her, vi inited det av den generelle type UIViewController. OK? Slik at vi ikke selv gjøre det med denne klassen. Så husk, dette er som en klasse nå. Det kan sees på som en type, bare som UIViewController er en type. Og for å bruke det, hva vi trenger å gjøre er å importere den - import ViewController - og, som du kan se, det autofills det for meg. Så, ViewController - og nå, her, jeg kan endre dette UIViewController til ViewController. Og nå, her, jeg kan endre dette til ViewController. La oss kjøre dette igjen. Det er fortsatt rød. Og grunnen til at det er fortsatt rødt er fordi - woah, hva skjedde der? Vi ønsket å knytte denne xib fil med utsikt kontrolleren. Men for å faktisk gjøre det, trenger vi å gå inn i dette. Og når vi gjør det init, ønsker vi å gjøre initWithNibName, og da ønsker vi å gjøre det på strengen View_iPhone, for eksempel. Du kan ignorere bunten her. Og dette kommer til å tillate oss til, faktisk - uh oh, det er et problem. Høyre. Og så, det er et problem fordi, i vårt syn xib fil, har vi en etikett og vi har en knapp. Men selv om vi har koblet disse to, det er ingenting inni ViewController.h eller ViewController.m som reflekterer de knapper eller de etiketter. Så må vi skrive de i så egenskapene til det vis-kontrolleren. Så, er dette hvordan du deklarerer en eiendom. Det tar i, som regel, disse to alternativene. Ved anvendelsen av oss, og dette seminaret, Jeg vil si at, generelt, de fleste eiendommene er nonatomic og beholde. Du kan lese opp av Google søk, du vet, forskjellen mellom nonatomic og beholde den, du vet, Google eller noe. Og jeg skal ta deg til, som, Stack Overløp, der folk vil ha svar til forskjellene mellom disse. Men for nå, er at det vi ønsker å være opptatt av. Og vi ønsker å gjøre en UI etikett, stjerne, og vi kan kalle det hva vi vil. Vi kan kalle dette, du vet, etiketten. Og, vil vi lage en annen en for knapp. Og husk å ta med stjerne, fordi vi har å gjøre med pekere ganske mye overalt inne av Objective-C. Men det vil fortsatt ikke løse problemet, som du kan se her. Og grunnen er fordi, når vi ønsker å koble en xib fil etikett eller en knappen til programmet, eller header og gjennomføring fil, vi ønsker å legge denne kodebit - utløp. Legg merke til at det er et nøkkelord. Og så snart jeg er ferdig å skrive det ut, bør den ha disse to sirkler, her. Vanligvis, de er ikke fylt i. Jeg er ikke sikker på hvorfor de er. Men vanligvis, må du manuelt koble dem ved å gå til denne siden av verktøyområdet. Og så, akkurat nå, jeg har fått min etiketten valgt, og jeg ønsker å dra denne nye referering uttaket til min filens eier, og klikk deretter på Etikett. Så nå, endelig, er denne etiketten forbundet med denne etiketten. Og denne etiketten er hva vi kommer til å bruke programmatisk å endre sin tekst, sin skrift, dens bakgrunn farge, et cetera. Så, hvorfor kan ikke vi gjøre det samme for knappen? Og som du vil legge merke til, for på-knappen, det er litt mer komplisert. Fordi, jeg mener, du er ment å trykker på en knapp, så det har en mye alternativer for hvordan brukerne kan trykke på en knapp. Og så får vi se senere om at vi kan koble denne til vår kode for å gjøre det arbeidet. Så, for nå skjønt, vi ønsker å koble den til den aktuelle knapp innsiden av koden vår. Så vi går til den nye referering utløp, og gjør deretter knappen. Nå, la oss kjøre dette igjen. Uh oh. OK. Jeg vet ikke hva som skjer her nå. Whoa. Bare det ene øyeblikket, her. Egentlig, hvorfor ikke vi ta en se på et annet eksempel i interesse av tiden. OK. Så, her er det lettere forberedt eksempel for ViewController. Som du kan se her, har jeg tatt egenskapene for etiketten og knappen. Og så, denne del av koden her - dette IBaction - var en forbindelse til denne knappen her. Så som du kan se her, Touch Up Inside er koblet til velger kalt knappen inne. Så kan vi faktisk gå gjennom bevegelse igjen, her, ved å ta Touch Up Inne og dra det til Filens eier, og deretter Klikk på knappen inne. Nå, la oss kjøre vår kode. Så nå, på denne knappen nå fungerer og vil ta oss til neste side. Og, når det gjelder vårt syn kontrolleren, Dette er stykke kode som tok omsorg av knappen inne. Og det er viktig å merke seg her, at Jeg har laget en annen type visning regulatoren kalles en tabell view controller. Så, dette var lik tilbake i storyboard, da jeg dro en av disse tabell view kontrollere i dreieboken. Jeg oppretter en annen Peker til tabellvisningen kontrolleren, Alloc og init-ing det, og da gjør selv dot navigeringskontrolleren, presse ViewController, denne nye viewController. Og jeg har satt animasjonen til ja, fordi nå inne i min app, og jeg ønsker å faktisk se animasjonen kommer fra hjemmesiden til bordet view controller. PUBLIKUM: Har du fortsatt bekymre om søppelrydding? RHED SHI: Hva er det? Nei. Så, spørsmålet var, har du å jobbe med søppelrydding? Så, Xcode 4 hadde som ARC, som er automatisk referansetelling. Og så, vanligvis når du starter en ny prosjekt, vil du sjekke det, fordi ingen egentlig ønsker å forholde seg til frigjøre minne og sånt. Men jeg tror i Xcode 5, det er ikke engang at alternativet på det nye prosjektet. Så, det automatisk gjør det for deg. Ja? PUBLIKUM: Kan du eksportere et PDF i dreieboken? RHED SHI: Ja, definitivt. Så, vil alle disse bli inkludert i kildekoden, slik at dere kan sjekke ut selve Xcode prosjekt for det. Yeah? PUBLIKUM: Men, jeg mener, i likhet med, kan jeg skrive ut en PDF med min storyboard? Hvis jeg bare ønsker å eksportere bilder for å vise noen. RHED SHI: Oh yeah. Jeg tror, ​​kanskje, du kan bare ta en skjermdump. Ja, og sende dem en skjerm skudd eller noe. Yeah. Så, la oss se. I interesse av tiden, tror jeg det er alt jeg kan dekke i dag. Men, jeg vet at det er, faktisk, bare knapt berøre overflaten av iOS utvikling. Så, kan du gjerne kontakte meg hvis Har du spørsmål om iOS utvikling. Og forhåpentligvis vil jeg være i stand til å rense opp noen av koden for kilden koden filer, slik at du vil ha noen virkelig fine eksempler å jobbe med. Annet enn det, hvis dere går til CS50 Hackathon, kan jeg eller kan ikke være der, og jeg kan hjelpe ut med noen iOS utvikling, også. Så, tusen takk, folkens.