RHED SHI: Velkommen til se CS50 seminar - Introduktion til iOS. Tak til alle for at komme. Jeg håber du er lige så begejstrede da jeg om iOS. Sidste år tog jeg CS50 som sophomore, og jeg dybest set lært iOS til min afgangsprojekt. Og det var temmelig - godt, det var ikke let, men der er masser af support tutorials online. Og jeg håber virkelig, at denne seminar, vil jeg give jer et hoved starte på iOS udvikling Så i form af iOS udvikling, Der er to vigtigste ting, vi ønsker at dække i dag. Først sproget - sproget kommer til at være i Objective-C. Vi vil faktisk høre noget virkelig spændende. Så kan du deltage i hele Apple fællesskab af udviklere og bygge nogle virkelig awesome apps. Også iOS 7 er smuk, forhåbentlig, til nogle af jer. Men det er kontroversielt, jeg kender. Og først og fremmest, hvad jeg ønsker at gøre, er at guide dig gennem Objective-C og også Xcode, som er den integrerede udviklingsmiljø, som du vil være arbejder i til iOS. Og så bare et ord om Objective-C. Dybest set er det nøjagtig den samme som C, men med en masse andre ting. Og så, mere strengt, det er faktisk en super-sæt C. Så noget, du kan gøre i C lige nu, hvilket er dybest set gerne PSET 0 til 6, du kan gøre i Objective-C. Så føler ikke bange om denne nye sprog, som du kommer til at lære. Du har allerede dækket en masse af det, fordi du har alle gjort C denne sidste semester, undtagen nu går du at have en masse mere at arbejde med. Og jeg bare at lede dig gennem en par eksempler at fremhæve nogle af de vigtigste forskelle, som jeg fandt var virkelig vigtigt, når jeg lærte Objective-C sidste år. Godt faktisk, så det andet punkt er, Objective-C er naturligvis objektorienteret. Og vi vil diskutere en lille smule om, hvad det betyder senere. Dybest set, det er ligesom, hvordan du har arbejdet med structs i denne sidste PSET med noder og lignende andre ting som. Undtagen i Objective-C, alt er et objekt, og du kommer til at være passerer rundt pointere til objekter snarere end selve værdierne. Så det er bare noget vigtigt at huske på. Så hvorfor skal vi ikke starte med et par forskelle i syntaks mellem C og Objective-C? Jeg ønsker at fremhæve # include, du ved standard io.h i C og C + +, med Objective-C-version af det, som er # import, og derefter en slags header-fil. I dette tilfælde ville det være UIKit, du ved, skråstreg UIKit.h. Det kunne også være, du ved, MKMapview til dig, skråstreg MKMapview.h, hvis du vil at gøre, ligesom, et kort inde i din app. Lignende ting som. Så det vigtige er omfatte har nu ændret til at importere. Men ideen stadig. Du kommer til at importere en slags af header fil i dit program. Jeg vil også gerne fremhæve forskellen mellem printf og NSLog. Men som vi sagde tidligere, Objective-C er en streng super-sæt C, hvilket betyder, at printf eksisterer i Objective-C, også. Men de fleste mennesker ikke bruger det. De fleste mennesker bruger denne NSLog fordi det giver dig et tidsstempel, og vi vil se det i aktion senere. Men det er generelt en mere brugbar måde at udskrive variabler. Og jeg vil også gerne understrege, at NSLog tager i netop den samme pladsholder værdier printf gør - så% d er for en int, % F er en float. Men jeg ønsker at fremhæve denne meget sidste - NSLog% snabel - der er en pladsholder for et objekt. Og som jeg sagde tidligere, Objective-C behandler temmelig meget for det meste i objekter, og så dette kommer i brug, når man ønsker at udskrive, måske, måske en NSArray eller NSDictionary, eller NSString. Så også, bemærke, at i vores NSLog erklæring, vi har et snabel foran af citatet - det vil betyde, at strengene, nu i Objective-C er objekter. De er ikke længere blot char stjerner. De er objekter, og er behandles som sådan. Så det er virkelig vigtigt, at når du bruger NSLog det tager på en NS snor, hvilket betyder, at du har at omfatte en på foran din anførselstegn. Og det er derfor, du ser her, i alle min funktion opkald til dette NSLog, jeg har en i foran anførselstegn, selv selvom% d og% f er er alle de samme fra C. Eventuelle spørgsmål, så vidt? Jeg vil prøve at gå gennem denne hurtigt, så at vi kan få mere tid til at arbejde med Xcode og Objective-C, så at du fyre kan få mere fortrolig med det. Dernæst vil jeg fremhæve noget begrebsmæssigt vigtigt. Så i C, de fleste ting er funktioner. Vi gør en funktion opkald. Vi erklærer funktioner på denne måde, med afkastet skrive først, derefter funktionsnavnet, parenteser og derefter uanset argumenter og den type disse argumenter, vi ønsker at gå i. Og Objective-C, fordi alt er et objekt eller klasse - så klasse og objekt er to begreber, er for det meste synonymt med hinanden, så jeg kan bruge dem i flæng hele seminaret. Men, vil du se, at vi har metoder i Objective-C snarere end funktioner. Og metoder hører til objekter. Så lige så, måske tage for eksempel knudepunkt - vores type [uhørligt] node fra PSET 6 eller 5 - vi har ordet, ejendom, eller den næste node pointer. Metoder er simpelthen funktioner inde eller anden form for struktur. Så i dette tilfælde ville strukturen være objektet, og metoden er noget, der hører til en genstand. Og det er hvordan du ville erklære, slags en fremgangsmåde. Du ville starte med igen, afkastet typen - så prøvede jeg at farve kode nøgleordene her, så du fyre kan se i det mindste formatering ligheder mellem funktion erklæringer og metode erklæringer. Så du starter med, du ved, en tilbagevenden typen - i dette tilfælde, er det et array, eller en NSArray pointer - og så har du denne metode. Og så, hvad der er interessant her er at i stedet for at have parenteser, vi have disse koloner. Og så, foran vores argumenter, vi sættes igen i parentes avanceret af vores argument. Så lige nu prøver jeg at gøre sammenligning mellem, du ved, n og nummer, fordi de er både som ints. Og så, den anden er en NSUInteger type. Og så, med Objective-C, når du ønsker at have flere argumenter i Deres metode klausul, du, en slags, skille dem ud lidt ligesom dette - Jeg er ikke helt sikker på hvordan til at beskrive det, men det er et godt eksempel på, hvordan du kan have flere argumenter derinde. Du kunne selvfølgelig bare helt ignorere andArray kolon NSArray matrix, hvis du ønsker bare en metode der tager i et argument. Ja, spørgsmål. PUBLIKUM: Er både NSUInteger og NSArray argumenter, der kan tages i i NSArray? RHED SHI: Ja. Så lad mig forklare. Så, ja. Så spørgsmålet var er NSUInteger og NSArray * typer af de argumenter, og det er korrekt. Så du altid ønsker at angive, hvad typen af ​​dit argument er. Og her, jeg prøver at introducere dig til nogle af syntaks og ordforråd af Objective-C, så dem er faktiske typer at du vil beskæftige sig med. Og som du lægger mærke, matrixer ikke længere, slags, simple beslag ting. De er objekter. Selv hvis vi går videre til den næste dias, kan vi se, at vi kan hard-code en NSArray i Objective-C med simpelthen en på symbol foran beslagene. Jeg er ikke, faktisk, helt sikker på, om Jeg syntaktisk hårdkodet et array korrekt for C-version, men det er formodes at være i en C array. Så det er sådan du vil, du ved, måske bruge funktioner eller metoder, som vi oprettede tidligere. Right? Så det er, hvor vi erklærer vores funktion og vores metode. Og nu ønsker vi at bruge dem i vores program, og det er hvordan vi ville gøre det. Så i C, ville du have, du ved, måske en bool b og du indstiller den til lig med funktionen, og derefter du passerer i argumenterne. I Objective-C, er det temmelig meget de samme ting. Du har NSArray * my_array, og det er kommer til at svare til - nu kun Forskellen her er dette objekt ting, som jeg har markeret med gult, og som du kan se, i C, der er ingen anden gul ord. Og det er fordi metoder hører med et bestemt objekt. Så det er derfor, jeg har brug for at have et objekt der, en slags, kalder denne metode på tallet nul, og derefter Den NSArray a, b, c, d. Eventuelle spørgsmål om det? Vi vil se disse begreber i aktion temmelig snart, når vi går ind i en demo. OK. Nu ønsker jeg at tale lidt kort om Xcode 5, som er integreret udviklingsmiljø at du skal arbejde med. Jeg kender en masse af jer, eller nogle af jer, ikke har Mac, hvilket er et problem fordi Xcode er ikke tilgængelig til Windows og PC. Spørg mig ikke hvorfor, men sandsynligvis - yeah, corporate. Uanset hvad. Men alligevel, så jeg undskylder, hvis nogle af du behøver at downloade en slags virtuel maskine til Mac i For at køre Xcode 5.. Men det er en temmelig fiks software til brug. Og så, før vi dykker ned i enhver slags af demo, jeg vil bare gerne vise dig en billede af, hvad Xcode ser ud i din vinduet, og derefter også tale om hvad hele dette rum er. Så det er lidt ligesom at lære at bruger Microsoft Word, medmindre du ønsker at blive fortrolig med alle de forskellige ting, er i gang her. Så det første, jeg vil pege dig til værktøjslinjen øverst. Du vil se, at der på toppen, har du filnavnet - eller faktisk, dit projekt navn og derefter dit filnavn. Vær opmærksom på leg og stop knapperne. Det er dem, som du vil være bruger til at køre din app på simulator - iOS simulator. Dette kommer automatisk med Xcode 5, så du ikke behøver at bekymre dig om downloade en slags simulator. Du skal bare trykke på play og så det kører din app. Og du kan lege med dig, og du vil se, hvordan det fungerer senere. Og så, i midten, er naturligvis hvor alle dine smukke kode er kommer til at gå. Og så, på den venstre side, vil du har denne, en slags, mappe - navigation - og så vil du også se, at sammen med mappeikonet, er der en bundt af andre ikoner der, vil være nyttige senere. Og så, på højre side er et hjælpeprogram område, hvor du kan arbejde med nogle af objekterne, og angiv, du vide, hvilken farve skal være, hvad skrifttypen skal være, et cetera. Selv alt, hvad du gør i bryggers område, kan du gøre i koden så godt. Og så vil jeg være at gå igennem to eksempler på brug, simpelthen ingen kode alle - eller meget minimal kode - vers al kode, bare så du fyre vide, hvad du kan og ikke kan gøre i Xcode og Objective-C. Og derefter endelig ned i bunden, har du debug-området. Så du ikke længere nødt til at køre GDB, et cetera, på dine programmer. Det gør det automatisk for dig. Og du kan også udskrive ting til dette område. Så faktisk, senere, vi vil gå igennem mario.c, hvis du fyre stadig huske at i Xcode. Så det skal være sjovt. Og så, bare for at bringe det tilbage til Objective-C, jeg ønsker at fremhæve, hvad du kan gøre med, hvis udsagn. Så, du ved, fordi Objective-C er en overordnet C, alt du skal gøre er, bogstaveligt, det samme som C. Du skal bare have små forskelle. Så vil du bemærke den formular til en hvis erklæring er stadig den samme - du har hvis og så har du en parentes med en tilstand inde i det, og derefter krøllede parenteser for hvad du ønsker at gøre indersiden af ​​der. Men jeg ønskede at sætte denne slide op her, blot for at illustrere, at fordi vi har at gøre med objekter nu vil vi nødt til at bruge disse ting kaldet som er lig med streng, som er tilfældigvis en fremgangsmåde til en streng eller NSString objekt. Så ord, i dette tilfælde, er en NSString objekt, og det har en metode, der kaldes, er svarende til snor, og så vi passerer i en hard-kodet streng at se hvorvidt de er lige til hinanden. Eventuelle spørgsmål, så vidt? OK. Og jeg ønsker at gå over en for erklæring også. Så for eksempel, hvis vi ønskede at sløjfe over længden af ​​en streng i C, hvilket bør være bekendt for dig. Og i Objective-C, vil jeg have at fremhæve dette, en slags, metode kaldet tæller. Tja, faktisk, lad mig bare tage det tilbage. Count er en metode til array. Men det er mere specifikt en egenskab af array, hvilket er hvorfor du kan anvende dot notation. Men jeg ønsker ikke at komme ind i for meget af denne begrebsmæssige ting, jeg vil bare at vise dig, hvordan tingene ville se ud ligesom i Objective-C versus C. Og også, jeg ønsker at påpege, at selvom jeg har brugt NSUInteger foran alle mine i'er i Objective-C, du kan også bruge int, fordi int er fuldt gyldige i Objective-C, også. Ja? PUBLIKUM: Er det bare stilistiske, eller er - RHED SHI: Ja. Så, som du vil se - Så spørgsmålet var, er, at bare et stilistisk spørgsmål. Som du kan se, jeg har en, en slags, stjerne stjerne ting ned i bunden, og at link fører dig til en Stack Overflow dannes, hvor nogen forklarer forskellen mellem en int i NSInteger og en NSUInteger. Og så kan du læse om det senere. Disse slides vil være, selvfølgelig, til rådighed for dig. Lad os se. OK, awesome. Så er det også i slide fordi jeg troede, det var en stor hjemmeside, der introducerer dig til mål-C syntaks. Så faktisk, hvorfor vi ikke flytter til Chrome og tjek denne hjemmeside? Right. Så, hvad jeg vil vise dig fyre her er dette billede. Så dette er, en slags, kommer til at være, hvad du kommer til at se indersiden af ​​enhver Xcode fil. Faktisk, hvorfor vi ikke bare tage en øjeblik til, en slags, tage dette i. Så denne bog - det er det objekt, vi har at gøre med. Og så er det selvfølgelig vil være arvet fra en anden genstand, men du behøver ikke at bekymre dig om det. Og så det, måske, har nogle medlemsstater variabler. Det vigtige ting, jeg vil vise dig er instansmetoder, her. Så er instansmetoder betegnet af denne minustegn. Og så, som du vil opdage, er vi allerede begyndt at se paradigme for metode erklæring, right? Afkastet typen, metoden navn, og derefter den type argument, og derefter navnet af argumentet. Og dette minustegn betyder, at det er en eksempel metoden, hvilket betyder, at disse metoder er kun tilgængelige for objekter, der er instantieres. Til kontrast, at metoder med et plus log ind foran dem er klasse metoder, hvilket betyder, at du kan ringe disse metoder, selvom du ikke har et objekt oprettet endnu. Så for en klart eksempel, NSString er en klasse. Og du kan ringe til, for eksempel, klasse metoder på NSString - den egentlige, ligesom, word NSString. Men for at bruge disse metoder, du rent faktisk nødt til at oprette en streng. For eksempel NSString stjerne streng lig ved anførselstegn, hej verden. Og så kan du bruge disse metoder - instansmetoder - på den hej verden streng. Så det er forskellen mellem instansmetoder og klasse metoder. Og, vi bare dækket denne del. Ejendomme er en anden ting, der er indersiden af ​​objekter, dybest set. Og du erklære dem med den på ejendommen søgeord. Du har disse muligheder, her, at jeg vil forklare senere, når vi går ind i en demo. Ja? Hej. PUBLIKUM: Kan du zoome ind, tak? RHED SHI: Åh ja. Undskyld. PUBLIKUM: Tak. RHED SHI: Det bør være meget bedre. PUBLIKUM: Ja. Tak. RHED SHI: Ja, mind mig om Jeg glemmer at zoome ind eller ud. Så det er alt, jeg ønskede for at vise dig for - whoa, det er en masse - til dette websted. Så lad os gå tilbage til vores dias. Faktisk, nu lad os tage et øjeblik at dykke ned i en demo. Så vil vi starte med en ny Xcode projekt. Så hvis du vil åbne Xcode på alle maskinerne, bør det tage dig lidt side, hvor der står, ligesom enten åbent op et eksisterende projekt eller en ny projekt, og du bør Klik på et nyt projekt. Og så skal det tage dig til dette skærmbillede. Ja? PUBLIKUM: Hvis vi ikke har en Mac, vi bare lidt chill? RHED SHI: Eller se på med nogen, ja. Ja. Du kan slappe af, også. OK. Så, hvad vi skal gøre først, nu, er faktisk, vi kommer til at gøre en enkelt visning ansøgning. Så hvis du vil opdage, hvad der er stor om Xcode og Apple support til udviklere er, at du har en masse skabeloner til at arbejde med allerede. Du kan for eksempel gøre en mester-detalje ansøgning. Du kan lave et spil - og faktisk vil jeg ikke gå ind i spil, fordi spil er en anden historie til iOS udvikling. Og de er slags adskilt, så jeg vil ikke gå ind i det. Så du har side-baserede applikationer. Du har en fane ansøgning - så gerne, for eksempel, Bank of America sandsynligvis har, ligesom, en tabbed app. Det er dem, hvor du har knapperne forneden. Og så har du en Sprite Kit spil. Eller du kan arbejde fra bunden, hvilket er, hvad vi vil gøre senere. Men lad os først starte med en enkelt visning ansøgning. Derefter vil det bede om et produktnavn, og vi kan bare gøre test. Organisationens navn - så, organisationens navn, selskab identifier - de er vigtige, hvis du vil at sætte din app på App Store. Andre end det, er din kode kommer til at køre helt fint uden dette. Det vil være vigtigt, hvis du ønsker - så sig selv, ligesom, sætte din app på din telefon eller noget, og test det ud, du ved, i det virkelige liv - dette vil være vigtigt. Denne tendens til at normalt være forbundet med en slags developer konto med Apple. Og så ved jeg, sandsynligvis en masse af jer vil ikke have nogen udviklerkonti. Jeg kender universitetet har en. Jeg tror CS har en. Men, kan du kontakte mig og jeg vil prøve at regne det ud for dig. Men lige nu har jeg bare sat i nogle pladsholder ting her. Og du kan selvfølgelig her, vælg om du vil have det til at være alene iPhone, i iPad, eller begge dele - universel anvendelse. Så for nu, lad os gøre universel, bare at se begge sider af platformen. Lad os se. Så lige nu, jeg kommer til at spare det i en slags mappe. Betyder ikke noget, hvor - du kan altid flytte det senere. Og nu er vi bragt vores Xcode projekt. Jeg ville ikke bekymre dig om alt dette. Jeg foreslår ikke at røre nogen af dette, medmindre du ved præcis, hvad du laver. Så alt dette, bare ignorere for det meste. Du behøver ikke at røre ved den, og hvis du du rod op nogle ting her, det bliver lidt tricky. Så hvorfor ikke vi ser ind filerne på venstre side i vores navigator. 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, lad mig zoome ind OK. Lad mig zoome ind Right, så du har header filer og du har gennemførelsen filer. Faktisk - OK. Det er lidt underligt, men bær over med mig. Derefter, fordi vi har valgt en enkelt visning ansøgning, vi kommer til at være arbejde med storyboard. Så storyboard er noget, som Apple er kommet op med for virkelig at hjælpe udviklere hurtigt prototype deres ansøgninger. Så det er, hvor du kan oprette en app uden at skrive en eneste linje kode. Men i vores enkelt visning ansøgning, Vi skal naturligvis have en filen for vores opfattelse, som er en afbildning controller. Så vi har sidehovedet og implementering fil her. Og jeg har tænkt mig at zoome ud nu, fordi vi bliver nødt til at arbejde i storyboard. Så her er vores opfattelse. Hvis vi blot køre app lige nu, der er ikke meget spændende foregår. Så vil du se denne hvid skærm. OK? Og i vores forsyningsvirksomheder område, kan vi tilføje en masse forskellige ting til det. Så når du har at gøre med skærme i iOS, se controllere er den objekter, der indkapsler, slags, dine synspunkter. Så en visning controller altid har en ejendom kaldet visning. Og denne opfattelse, typisk indeholder du ved, hvad du ønsker at se på en skærm. Så ja, lad os bare starte med at sætte, måske, måske en etiket. Så lad os sætte en etiket på der - holde det i midten. Så nu, at jeg har klikket på etiketten, jeg kan gå ind i egenskaberne inspektør og begynder at ændre sin værdi. Lad os kalde det CS50 Colours. Og kan jeg også ændre skrifttype. Så i stedet for at gøre system, som er standard, kan vi gøre en brugerdefineret én. Vi kan ændre sig - du ved, ultralette, gør det 32. Og så kan vi gøre vores kasse større. PUBLIKUM: Tror du, du kan zoome på bare lidt mere, måske? RHED SHI: Ja? OK. PUBLIKUM: Bare tryk på det? RHED SHI: Lad os se. Er dette arbejde? PUBLIKUM: Bare passere Xcode? RHED SHI: Selvfølgelig. OK. Awesome. PUBLIKUM: Etiketten under? Etiketten? RHED SHI: Hvad er det? PUBLIKUM: Hvad drop-down var mærket under? RHED SHI: Så spørgsmålet var, hvad drop-down var etiketten under? Det skal simpelthen være under her. Jeg tror det er en terning ting. Men som regel, dette er standard - Jeg bare hernede indtil jeg finder en etiket. Ja. Så nu har vi vores label. Lad os centrere det. Og Xcode giver os retningslinjer til centrering objekter. Så lad os nu køre vores kode igen. Der vi går. Så vi har CS50 Colours. Og nu, lad os sætte en knap på der, ikke? Fordi vi ønsker at gøre denne interaktive. Så lad os sætte en knap her. Og vi vil kalde denne knap "tap her for at fortsætte. "Vi vil centrere det, også Faktisk er det allerede centreret. Ja. Så nu har vi en knap. Og hvis vi kører det igen, vil vi at have en dejlig lille knap her. Og jeg kan klikke på det, men det gør ikke noget, fordi vi ikke har gjort noget med knappen endnu. Så lad os skabe en anden mening, right? Så lad os sige, at jeg ønsker at udnytte at knap og jeg ønsker at gå til en anden side - en anden opfattelse. Hvad jeg har tænkt mig at gøre, er, kan jeg oprette en visning controller, right? Nu vil jeg klikker på min knap, og derefter, det vigtigste er, jeg har tænkt mig at klik - eller - ja, skal du trykke på kontrol på mit tastatur. Kontrol. Klik på knappen, og derefter trække. Så husk at holde Ctrl-tasten. Lad os gøre det igen. Så holde kontrol, klik, og træk til, hvad du ønsker at gøre. OK. Og nu, jeg har flere muligheder her. Jeg kan enten skubbe, eller jeg kan gøre en modal, eller jeg kan gøre en brugerdefineret. Push er kun hvis du har en navigations-controlleren. Lige nu vores allerførste visning regulatoren er ikke inde i noget navigations-controlleren. Så navigations-controlleren er den ene der giver dig den tilbage-knap på iOS app, hvor du har, du ved, at top, en slags, tyk bar - hvor du kan gå tilbage, eller fremad, et cetera. Lige nu har jeg ikke det. Og ja, det er derfor jeg ikke kan gøre et skub. Så jeg klikkede på tryk uheld, her. Og faktisk, lad os køre koden, og det bør gå ned på mig. Kun hvis jeg trykker på knappen selv om, så - højre. Så det er dårligt. Og som du kan se her, vi have fejlmeddelelsen. Så "Push segues kan kun bruges, når kilde controller forvaltes af en forekomst af UI navigations-controlleren. " , Fordi dette ikke var inde i en navigations-controlleren, Jeg kunne ikke gøre det. Så lige nu vil jeg tilbage til mappe, der går tilbage til storyboard. PUBLIKUM: Hvad er navigation controller, igen? RHED SHI: Så lige nu skal jeg vise dig. Lad os se. Så jeg har tænkt mig at klikke på dette synspunkt controller, og så jeg har tænkt mig at gå op til produkt - faktisk, nej, undskyld - editor. Og jeg har tænkt mig at gå ind i - faktisk, jeg klikker på det? Nej. Der vi går. Jeg har tænkt mig at gå op i editor, gå ned at integrere i, og derefter navigation controller. OK. Og mit arbejdsområde ser virkelig rodet, så lad os rydde op. Så alt dette er storyboard. Og på denne måde - OK, stop - Jeg kan hurtigt bygge noget som dette. Og så, nu kan jeg gå tilbage, du kender? Men det er lidt kedeligt, ikke? Så, hvad jeg vil gøre, er, jeg vil ikke have at gøre, simpelthen, en visning controller. Lad os sige, jeg ville faktisk gøre en tabelvisning controller, så jeg kan sætte i nogle flotte farver, i tabellen. Så nu, at jeg har lagt i mit bord visning controller, jeg har brug for at tilslutte den tilbage fra denne knap til view controller. Så jeg nødt til at gøre min kontrol, klik, drag ting igen. Og nu kan jeg gøre skubbe, fordi jeg integrere det inde i en navigations-controlleren. PUBLIKUM: Navigation controller bare giver dig mulighed for at gå fra sted til sted? RHED SHI: Ja. Så mere teknisk, er det et objekt, hvor - så indersiden af ​​navigationen controller objekt, det holder styr på et array. Og at vifte besidder alle de efterfølgende se controllere. Det er derfor, når du trykker tilbage, er det går tilbage til forrige side. Fordi navigations-controlleren objekt, eller den kode, der tager sig af dette formål har en matrix, der holder styr på disse visning controllere, og kan derefter, ved du, dq visningen controller og give dig tilbage tidligere. Så dette er tekniske ting, men - og jeg vil vise dig senere i kode, hvis vi har tid. Jeg er lidt at løbe ud på tid, men - Så med tabel visning, hvad vi kan gøre, er - Det er sat som regel automatisk til Dynamic Prototype - vi kommer til at gøre det Statiske Cells, ellers vil vi løbe ind i nogle problemer. Og så, lad os sige, at jeg har tænkt mig at have en sektion. Så sektioner er ligesom - hvis du nogensinde har set musik app, når du har kunstnere, sektioner ville være A'er gennem Z's - bogstaverne - og så, du ved, den enkelte rækker ville være kunstnernavne. Og ja, hvad er cool her, er, at jeg kan adgang til alle objekter inde min storyboard gennem denne drop-down menu, også. Så jeg har tænkt mig at klikke på mit sektion, og jeg vil, du ved, måske fem rækker. Og derefter inde i hver række, Jeg ønsker at sætte en etiket. Og jeg har tænkt mig at kalde dette Blå. Og så, jeg ønsker at sætte en UI visning, du ved, måske for, ligesom, en lille boks. Så jeg kan vise folk et eksempel på farven. Og jeg vil gå tilbage til ejendommen og ændre denne farve til, åh, det gør jeg ikke ved, er dette ene. Og så bemærker også, her, når jeg har tilbehør, kan jeg have masser af de forskellige tilbehør at du typisk ser. Offentliggørelsen indikator, den detalje, eller flueben, eller simpelthen bare detaljer. Så måske kan vi gøre, ligesom, en afsløring indikator, for eksempel. Og så, hvorfor vi ikke tager disse, kopi indsætte dem, og sætte dem i næste tabelrække. Så kan vi kalde dette Gul. Og jeg måske nødt til at udvide dette. Lad os gøre det gul. Og på denne måde, kan vi kopiere indsætte vores vej ned. Hvad var det? Lilla. Så disse er alle de typiske CS50 farver, som du har set i klassen - faktisk, undskyld - eller på hjemmesiden. Forhåbentlig du fyre kan se hvad jeg laver her. OK. Sidste. PUBLIKUM: Hvordan har du tilføjer rækken oprindeligt? RHED SHI: Så spørgsmålet var, hvordan jeg tilføje rækken oprindeligt? Jeg gik ind i denne tabel sektion - eller men jeg kan vælge tabellen sektion - og så her, jeg opdaterede antallet af rækker. Og lad mig håbe, at det virker. OK. Lad os se, om det virker. Åh, perfekt, awesome. OK. Mens jeg var ved at bygge op min demo, nogle ting var ikke justeret, så tak for bifald. Ja. Så lad os se. Vi vil gøre dette ni bare for at gøre alt - eller faktisk, lad os bare slå alle disse i afsløring indikatorer. Og så, hvad jeg vil vise dig, også, var, hvordan jeg kan tage hver enkelt af dem tabelrækker og få dem interagere - oh. Nej. Oh. Også, jeg vil vise dig - her, kan jeg sætte titlen på min navigations-controlleren, right? Så faktisk, vil du bemærke, så snart jeg indlejret denne visning controller inde af navigations-controlleren, ser vi denne navigationslinje øverst på vores storyboard repræsentation af en visning controller. Og så giver det os, ligesom, en visuel, slags, guide til vores synlige skærm. Dette er naturligvis vil være navigationslinjen. Og hvad jeg ønsker at gøre hurtigt, nu er sat i en anden - så denne tabel view controller jeg gjorde ved at tage en af ​​disse, og trække det her, og det er hvad der tilladt mig at hurtigt, virkelig, oprette en tabel visning controller. Hvis vi har tid selv, vil du se, at programmatisk, det er en lidt mere tricky at oprette en tabel visning controller, fordi der er et par metoder, der er kræves for dig at, en slags, skrive i For tabelvisningen controller til at blive vist korrekt. Men jeg vil bare gerne vise dig, nu, et eksempel på, hvor, hvis jeg tager det, for eksempel - Jeg har sat i en anden visning controller. Og nu, lad os sige, at jeg ønsker at styre Altogether min allerførste blå tabelrække til her. Og jeg vil kalde denne Blå. Og så - lad os se. Jeg er på visningen nu, og jeg kan ændre baggrunden til blå. Og så, varsel, her, denne drop-down Menuen giver dig også et hierarki af alle af disse objekter. Så en vigtig ting at bemærke her, er, at alle disse ting, her - denne tabel view controller, bordet visning, tabelvisning sektion, bord view celle - alle disse er objekter i kode. Så, du ved, en etiket lige nu er under indholdet visning, et cetera. Så videre og så videre. Så hvis vi køre denne kode, vi skulle se noget - lad os se om det - ja. Så der går vi. Men hvis vi ikke gør det, ingen af disse andre ting virker. Right? Så kun denne ene virker. Og af hensyn til tiden, det vil jeg ikke gå ind, du ved, at sætte ned de andre. Og dette er slutningen af, slags, storyboard - hvad jeg ønskede at vise dig til storyboard. Og jeg har en gennemarbejdet eksempel, faktisk, lige her. Så dette er storyboard at jeg gjorde tidligere. Så, som du kan se, var denne min navigations-controlleren. Så jeg havde min første visning controller, så havde jeg min tabel view-controller, og derefter havde jeg alle disse - så tidligere, var jeg gør noget helt andet. Så, undskyld disse ting. Jeg skal nok rense det op senere før Jeg sender det ud til produktionen. Men hvis vi køre dette, vil vi se at alle muligheder er til rådighed for os. Bortset fra jeg ikke gøre baggrunde disse farver. Så dejlig simpel applikation. Lad os nu prøve at løse denne programmering. OK. Så for at gøre det, vi bare at starte et nyt Xcode projekt. Vi vil gøre det til en tom ansøgning nu, fordi vi ikke ønsker at have den storyboard. Så jeg blot at begrænse mig til ikke bruge nogen af ​​storyboard, og en tom ansøgning vil ikke giv mig et storyboard. Dette er blot at forhindre mig selv fra at snyde. Lad os se. Vent. Gjorde jeg - Ja. OK. Right. Så her er vi tilbage med intet andet, men kode. Så lad mig flytte dette vindue lidt over. Right. Som du kan se her, er de eneste filer vi er givet, er AppDelegate.h og prik m, og vi har ikke storyboard længere. Så hvis vi kører det, er vi stadig kommer til at komme til den hvide skærm, gudskelov. OK - hvid skærm, men intet andet. Og her er den vigtige del. Dette er, hvor handlingen sker. I de tidligere versioner, der er normalt ingen kode, men storyboard væsentlige giver koden for denne del. Jeg vil ikke gå i detaljer om, hvordan. Og hvad vi ønsker at gøre nu, er, at vi ønsker at gå ind her, og denne lille rum begynder at skabe vores app igen. Så - ja? PUBLIKUM: Zoom? RHED SHI: Zoom. Ja, selvfølgelig. OK. Jeg vil være at skrive, så det ikke skulle noget for meget. OK. Så først, husk vi ønskede at skabe en navigations-controlleren, right? Og også, som du kan se her, Xcode gør et rigtig stort stykke arbejde selv-påfyldning. Så, som du lægger mærke til, navnene på alt er meget længere end sædvanlig, men Xcode fylder den i for dig. Så jeg kan bare trykke Enter. Så jeg ønsker at oprette en UI navigation controller pointer, og jeg kan kalde det navigationController. Nu, hvad gør jeg nu? Efter dette lighedstegn, jeg har brug for det første, skabe det inde i hukommelsen. Så jeg har tænkt mig at gøre NavigationController Alloc - så, det er magen til malloc, at du fyre, der anvendes i C - og så, jeg har tænkt mig at init det. Så det er virkelig vigtigt, at enhver objekt, du opretter, vil du Alloc og init det. Det kommer til at skabe den, og instantialize det inde i hukommelsen, og nu kan du bruge den. Okay? Hvis du ikke gør det, dit objekt gør ikke findes, og du vil løbe ind i en flok problemer. Og så, jeg ønsker at skabe en visning controller, right? Så jeg ønsker at oprette en UIViewController stjerne - så alt er en pointer i Objective-C, og jeg har tænkt mig at gøre noget lignende, her - Alloc, init. OK. Og hvad så jeg har tænkt mig at gøre, er, jeg er gå til - så huske, da vi gjorde indlejre i navigation controller? Dette er, hvordan du gør det i kode. Du kommer til at gøre navigationController pushViewController - PUBLIKUM: [uhørligt]. Vil dette ske for os - eller? RHED SHI: Åh, ja. Nej. Det kan lide mig bedre. Nej, det vil arbejde for dig, også. Så disse er alle metoder. Så pushViewController er en metode, og også mere specifikt, det er en eksempel metode UI navigations-controlleren. Fordi jeg var nødt til at skabe min UI navigation controller stjerne, og så er jeg kan kalde dette pushViewController på min specifik instans af en UI navigation controller. PUBLIKUM: Har vi nødt til at gøre det nøjagtige ord, eller er det allerede findes for det? RHED SHI: Ja, fordi det er en metode. Det er ligesom en funktion. Det er ligesom printf. Det er ligesom scanf. Det er ligesom strcompare. Bortset fra det ved, hvad du måske ønsker at skriver, og bemærk, at det vil altid komme op med ting, der er juridisk tilladt for dig. Så hvis intet dukker op her, er der noget galt. Så pushViewController. Så nu vil jeg til at skubbe min nyoprettede UIViewController og derefter, animeret - måske ikke. Da dette vil være den første visning controller. Jeg mener, selvom jeg gjorde animeret, det vil sandsynligvis ikke dukke op, fordi det er det første skærmbillede. Og husk de kantede parenteser. Så husk, hvordan vi brugte konsollerne? Og inde i parentes objekt kalder på en metode - så vores objekt er navigationen controller, og metoden er en push view controller animeret. Og se, hvordan det tager to argumenter, og de er adskilt af den, en slags, ord og et kolon. Så Objective-C forsøger at gøre det rart og nemt for dig at læse højt - din kode - og få den semi, slags, giver mening. Men at gøre netop dette er ikke nok. Lad mig zoome ud nu. Gøre netop dette er ikke nok til få, hvad vi fik til tidligere. Så her, vil du bemærke, at der er faktisk ikke kommer til at være nogen form for bar, her, ikke? Der er ingen navigation bar, hvilket betyder, at vi stadig ikke har fået det. Og vi kan teste det ud, også ved, måske ændre baggrunden af Viewcontroller, right? ViewController.background-- ah. Så, se hvordan viewcontroller ikke havde en baggrundsfarve, selvom jeg ønskede at få adgang til det? Og det er fordi viewcontroller er en beholder for visningen. Så det har en visning ejendom, som så har en baggrundsfarve. Og jeg kan indstille det, en slags kedelig, ved at kalde farve på UIColor objektet. Så varsel her, redColor er en metode. Det er en klasse metode UIcolor. Fordi jeg ikke nødt til at oprette en faktiske forekomst af en UIColor for at kalde metoden på det. Jeg bare simpelthen, kaldte det af typen-lignende navn. Jeg, ligesom, kaldte det på int, hvis int havde, lignende, en fremgangsmåde til den, f.eks. Og så, hvis vi køre denne kode, vi får bemærke, at baggrunden er faktisk ikke rød. Det er stadig hvid. Og hvordan vi kan komme rundt, der er, mærke til, hvordan der er self.window. Det er ligesom, det ultimative beholder for din ansøgning. Det er det ultimative ting, der indeholder alt på skærmen, for en iPhone eller iPad applikation. Og bekvemt self.window har denne egenskab kaldet rootViewController. Og det bliver markøren til den allerførste visning controller inde af din app. Så, hvad vi ønsker at gøre her, nu er for at indstille det svarer til vores navigation controller. Right? Fordi, teknisk navigation controller er vores allerførste visning controller. Det holder styr på en række andre udsigt controllere, og vi pressede dette view controller i denne matrix i navigations-controlleren. Så behøver du ikke ønsker at gøre dette. Det ville ikke rigtig hjælpe dig. Du ønsker at gøre dette, hvis du ønskede at gøre en navigations-controller, som de fleste af jer sikkert vil, fordi du ønsker til, en slags, har en slags, ligesom, menu for at gå tilbage til eller nogle hjemmeside for at gå tilbage til, snarere end en tom skærm. Ja? PUBLIKUM: Er det ubehageligt for dig at zoome ind på det - RHED SHI: Ja. Så, ja. Det er den kode, og nu Lad os prøve det af. Så der går vi. Magic. Så OK. Tak. OK. Så nu, hvad vi ønsker at gøre, er - så, vi slags begrænset her, right? Vi potentielt kunne skrive alt indersiden af ​​denne funktion. Men, det er ikke sådan iOS udvikling normalt arbejder. Så, hvad vi vil gøre, er, at vi kommer til at skabe nogle nye filer. Men mere specifikt vil vi oprette en anden Objective-C klassen, eller andet formål - klasse og objekter er udskifteligt her. Og her er hvordan jeg kunne potentielt oprette en anden klasse af U-controllere. Så det er en underklasse, som du vil opdage, her, det er en underklasse af UI view controller, men jeg kan kalde det noget andet navn her. Jeg kunne kalde denne CS50, kunne jeg kalde dette synspunkt controller, jeg kunne kalde denne blah view controller - noget jeg vil. Dette er blot navnet på klassen. Men det vil være vigtigt fordi det væsentlige, hvad jeg gør her er, jeg skaber anden klasse navn. Så det kommer til at være, ligesom nogle slags type eller et objekt. Så skal det være en lille smule generiske. Det kommer ikke til at være meget specifik. Og også, jeg ønsker at pege disse to muligheder. Fordi vi gør alt inde i kode, nogle gange er det meget lettere at bringe i en grænseflade fil, således at Jeg kan bogstaveligt talt trække og slippe, som vi gjorde tidligere med storyboard - du ved, en etiket eller på en knap, eller hvad. Og så xibs er filer, der giver dig mulighed for at gør det, og du er nødt til at tilslutte den denne opfattelse controller-fil. Så jeg har tænkt mig at bevidst ikke kontrollere dette. Normalt ville jeg kontrollere dette, og hvis jeg kun gjorde det for iPhone eller iPad, jeg ville kontrollere dette og blot have en for, du ved, iPhone eller iPad. Men da jeg gør universel, vil jeg at oprette to af dem senere. Så jeg har tænkt mig at bevidst Fjern markeringen af ​​denne. Det er også meget vigtigt. En masse gange, jeg har haft bugs hvor dette ikke blev kontrolleret. Og så, naturligvis, denne fil er ikke, slags, ligesom, inkluderet eller importeret indersiden af ​​denne test mappe. Og ja, min kode har absolut ingen idé om eksistensen af ​​denne fil, og der forårsager en masse smerte og timer af debugging. Men, bare sørg for dette er markeret, så , du ved, målet for denne fil er til denne anvendelse. OK. Så nu har vi oprettet to nye filer. Og disse filer ser temmelig tom. Og faktisk, lad os også fortsætte på ved at skabe XIb filer. Så tidligere, var jeg i Cocoa Touch drop-down. Nu, jeg har tænkt mig at gå ind i Bruger Interface touch, og som du kan se, jeg kan skabe et storyboard. Så selv jeg startede med en tom program, kan jeg stadig bruge en storyboard. Selvom, det bliver tricky i form hvordan du ønsker at tilslutte det til din kode. Så vil jeg ikke gå der. Men, hvad vi ønsker at gøre nu er at oprette en visning. Og du kan vælge til en iPhone eller en iPad. Og typisk, at betegne forskel - hvis du laver en universel anvendelse - du enten sætte en understregning iPhone, eller du kan gøre en Twiddly. Det betyder ikke rigtig noget. Det er simpelthen for dig at differentiere hvilket synspunkt er, hvilken enhed. Og så ser nu. Jeg har en skærm, som jeg kan arbejde med. Og så, for eksempel, jeg kan sætte en etiket her, du kender, og jeg kan også sætte anden knap her. Jeg gider ikke at ændre værdierne her. Men hvad der er vigtigt her, er at filens ejer - så er jeg inde i iPhone visning, iPhone XIb fil. Og ned i denne sejlads område eller drop-down menu, jeg ønsker at gå til filens ejer. Og det er virkelig vigtigt skridt her. Jeg ønsker at gøre klassen udsigt controller, så denne XIb fil vil være forbundet med min opfattelse controller. Og noget, jeg gør inde i min mening controller programmatisk er kommer til at blive reflekteret på her. Så dog bemærke, at - faktisk, lad os gøre dette synspunkt baggrund blå, for eksempel. Eller grøn. Og så, så hvis du lægger mærke til, tilbage i denne kode, det er her vi fik vores navigations-controlleren. Selvom vi gjorde det skridt, det er stadig vil være rød, ikke grøn. Og der er en grund til hvorfor. Det er fordi, når vi inited vores opfattelse controller, her - Beklager, det er lidt skørt - når vi inited vores opfattelse controller her, vi inited det af den generelle type UIViewController. OK? Så vi ikke engang gøre det med denne klasse. Så husk, det er ligesom en klasse nu. Det kan opfattes som en type, bare som UIViewController er en type. Og for at bruge det, hvad vi skal gøre, er at importere det - import viewcontroller - og som du kan se, det fylder automatisk det for mig. Så viewcontroller - og nu her, jeg kan ændre dette UIViewController til viewcontroller. Og nu, her, jeg kan ændre dette viewcontroller. Lad os køre det igen. Det er stadig rød. Og grunden til, at det er stadig rød er fordi - Woah, hvad skete der? Vi ønskede at knytte dette XIb fil med henblik på controlleren. Men for at rent faktisk gøre , at vi er nødt til at gå ind i dette. Og når vi gør det init, vi ønsker at gøre initWithNibName, og så ønsker vi at gøre det på strengen View_iPhone, for eksempel. Du kan ignorere pakken her. Og det kommer til at tillade os til, faktisk - uh oh, der er et problem. Right. Og så er der et problem, fordi i vores opfattelse XIb fil, vi har en etiket og vi har en knap. Men selvom vi har tilsluttet de to, der er ikke noget inde i ViewController.h eller ViewController.m der afspejler dem knapper eller disse etiketter. Så vi er nødt til at skrive dem ind som egenskaber visning controller. Så det er sådan du erklærer en ejendom. Det tager, typisk i disse to muligheder. Ved anvendelsen af ​​os, og dette seminar, Jeg vil sige, at der generelt, de fleste ejendomme er nonatomic og fastholde. Du kan læse op af Google søgning, du ved, at forskellen mellem nonatomic og opbevare om, du ved, Google eller noget. Og jeg vil tage dig til, ligesom, Stack Overløb, hvor folk vil have svar til de forskelle, mellem dem. Men for nu, det er hvad vi ønsker at beskæftige sig med. Og vi ønsker at gøre en UI etiket, stjerne, og vi kan kalde det hvad vi ønsker. Vi kan kalde dette, du ved, etiket. Og, vil vi skabe en anden én til knappen. Og husk at inkludere stjerne fordi vi har at gøre med pegepinde temmelig overalt inde af mål-C. Men der vil stadig ikke løse problemet, som du kan se her. Og årsagen er, fordi, når vi ønsker at tilslutte en XIb fil etiket eller en knap til programmet, eller header og implementering fil, vi ønsker at tilføje dette stykke kode - stikkontakt. Bemærk, at det er et nøgleord. Og så snart jeg er færdig med at skrive det ud, bør det have disse to cirkler, her. Normalt er de ikke udfyldt Jeg er ikke sikker på, hvorfor de er. Men som regel, bliver du nødt til manuelt at forbinde dem ved at gå til denne side af forsyningssektoren området. Og så, lige nu, jeg har fået min etiket valgt, og jeg ønsker at trække denne nye henvisninger stikkontakt til min fil ejer, og klik derefter på Label. Så nu endelig denne etiket er tilsluttet til denne etiket. Og dette mærke er, hvad vi vil bruge programmering til at ændre sin tekst, dens skrifttype, dens baggrund farve, et cetera. Så hvorfor gør vi ikke det samme til knappen? Og som du vil opdage, til knappen, det er lidt mere kompliceret. Fordi, jeg mener, du skulle tryk på en knap, så det fik en masse af muligheder for, hvordan brugerne kan trykke på en knap. Og så vil vi se senere, at vi kan forbinde dette til vores kode til at gøre det arbejde. Så for nu, selvom vi ønsker at forbinde den til den aktuelle knap inde i vores kode. Så vi gå til den nye henvisninger stikkontakten, og gøre derefter på knappen. Nu, lad os køre det igen. Uh oh. OK. Jeg ved ikke, hvad der foregår her nu. Whoa. Bare et øjeblik, her. Faktisk, hvorfor vi ikke tage en se på et andet eksempel på interesse tid. OK. Så her er det lettere forberedt eksempel for viewcontroller. Som du kan se her, har jeg medtaget egenskaberne for etiket og knappen. Og så dette stykke kode her - denne IBaction - var en forbindelse til denne knap her. Så som du kan se her, Touch Up Inside er forbundet med vælgeren kaldet nede. Så kan vi faktisk gå gennem bevægelse igen, her, ved at tage Touch Up Inde og trække det til Filens ejer, og derefter klik på nede. Nu, lad os køre vores kode. Så nu, denne knap nu virker og vil tage os til den næste side. Og med hensyn til vores opfattelse controller, dette er det stykke kode, der tog pleje af knappen nede. Og det er vigtigt at bemærke her, at Jeg har oprettet en anden type visning controller kaldes en tabel view controller. Så det var den samme til tilbage i storyboard, da jeg slæbte en af disse tabel view controllere i storyboard. Jeg skaber en anden Pointer til tabellen visning controller, alloc og init-ning det, og så gøre self dot navigations-controlleren, skubbe viewcontroller denne nye viewcontroller. Og jeg har sat animationen til ja, fordi nu inde i min app, og jeg ønsker rent faktisk at se animationen går fra startsiden til bordet view controller. PUBLIKUM: Har du stadig bekymre om garbage collection? RHED SHI: Hvad er det? Nej. Så spørgsmålet var, har du at arbejde med garbage collection? Så Xcode 4 havde ligesom ARC, hvilket er automatisk henvisning optælling. Og så, som regel, når du starter en ny projekt, ville du kontrollere, at fordi ingen virkelig ønsker at beskæftige sig med frigøre hukommelse og kram. Men jeg tror i Xcode 5, er der ikke engang denne mulighed på det nye projekt. Så det automatisk gør det for dig. Ja? PUBLIKUM: Kan du eksportere en PDF i din storyboard? RHED SHI: Ja, absolut. Så vil alle disse indgå i kildekode, så du fyre kan tjekke den faktiske Xcode projekt for det. Ja? PUBLIKUM: Men, jeg mener, ligesom, jeg kan udskrive en PDF-fil med mit storyboard? Hvis jeg bare vil eksportere billeder at vise nogen. RHED SHI: Oh yeah. Jeg tror, ​​måske, kan du bare tage et skærmbillede. Ja, og sende dem en skærm skud eller noget. Ja. Så lad os se. Af hensyn til tiden, tror jeg det er alt jeg kan dække i dag. Men jeg ved, det er, faktisk, bare næppe berøre overfladen af ​​iOS udvikling. Så er du velkommen til at kontakte mig, hvis du har spørgsmål om iOS udvikling. Og forhåbentlig vil jeg være i stand til at rense op på nogle af koden for kilden kode filer, så du har nogle virkelig rart eksempler at arbejde med. Anden end at, hvis du fyre går til CS50 hackathon, jeg måske eller måske ikke være der, og jeg kan hjælpe med nogle iOS udvikling, også. Så takket være en masse, gutter.