RHED SHI: Welkom bij zie CS50 seminar - Introduction to iOS. Ik dank u allen voor uw komst. Ik hoop dat je net zo enthousiast als ik over iOS. Vorig jaar nam ik CS50 als tweedejaarsstudent, en ik eigenlijk geleerd iOS voor mijn afstudeerproject. En het was behoorlijk - goed, het was niet makkelijk, maar er zijn veel steun tutorials online. En ik hoop echt dat met deze seminar, ik geef je jongens een hoofd start op iOS ontwikkeling Dus in termen van IOS ontwikkeling, zijn er twee belangrijke dingen die we vandaag willen dekken. Ten eerste, de taal - de taal gaat worden in Objective-C. We zullen eigenlijk horen iets echt spannend. Dus, kun je lid worden van de hele Apple gemeenschap van ontwikkelaars en bouwen een aantal echt geweldig apps. Ook iOS 7 is mooi, hopelijk, voor sommigen van u. Maar het is controversieel, ik weet het. En vooral, wat ik wil doen is gids je door Objective-C, en ook Xcode, de geïntegreerde ontwikkelomgeving dat je in werken in voor iOS. En dus, maar een woord over Objective-C. Kortom, het is exact dezelfde als C, maar met een heleboel andere dingen. En zo, strenger, het is eigenlijk een super set van C. Dus alles wat je kan doen in C op dit moment, dat is eigenlijk graag PSET 0 tot en met 6, je kan doen in Objective-C. Dus, voel je niet bang voor deze nieuwe taal die je gaat om te leren. Je hebt al gedekt er veel van, want je hebt alles gedaan C afgelopen semester, behalve nu je gaat veel meer om mee te werken. En ik ga gewoon om u te leiden door middel van een enkele voorbeelden om wat te markeren van de belangrijkste verschillen die ik vond waren echt belangrijk toen ik hoorde Objective-C vorig jaar. Nou eigenlijk, ja, het andere punt is, Objective-C is uiteraard object-georiënteerde. En we zullen een beetje bespreken over wat dat later betekent. Kortom, het is net hoe je gewerkt met structs in deze afgelopen PSET, met knooppunten en soortgelijke andere dat soort dingen. Behalve, in Objective-C, alles is een object, en je gaat worden passeren rond verwijzingen naar objecten dan de waarden zelf. Dus, het is gewoon iets belangrijks in gedachten te houden. Dus, waarom beginnen we niet met een paar verschillen in syntax tussen C en Objective-C? Ik wil de # markeren, kunt Weet standaard io.H in C en C + +, met de Objective-C-versie van dat, wat is # import, en dan een soort van header file. In dit geval zou het UIKit zijn, je weet wel, slash UIKit.h. Het kan ook zijn, je weet wel, MKMapView om je in te hakken MKMapview.h als je wilt te doen, zoals een kaart binnenkant van je app. Soortgelijke dingen als dat. Dus, het belangrijkste is onder andere is nu veranderd te importeren. Maar het idee blijft. Je gaat importeren een soort van header-bestand in uw programma. Ik wil ook het verschil te benadrukken tussen printf en NSLog. Maar, zoals we al eerder zeiden, Objective-C is een strikte super-set van C, waardoor printf bestaat in Objective-C, ook. Maar, de meeste mensen niet dat gebruiken. De meeste mensen gebruiken dit NSLog omdat het geeft u een tijdstempel, en we zullen zien in latere actie. Maar, het is over het algemeen een meer bruikbaar manier om uit te printen variabelen. En ik wil ook benadrukken dat NSLog neemt op precies dezelfde placeholder waarden als printf doet - dus% d is voor een int, % F is voor een vlotter. Maar ik wil benadrukken deze allerlaatste - NSLog% at-teken - dat is een tijdelijke aanduiding voor een object. En zoals ik al eerder zei, Objective-C voor vrij veel meestal in objecten, en zo zal deze in gebruik komen wanneer u wilt afdrukken, misschien, misschien een NSArray of NSDictionary, of een NSString. Dus, ook merken dat, in onze NSLog verklaring, hebben we een aan-teken voor van de offerte - dat wil zeggen dat de snaren betekenen, nu, in Objective-C zijn objecten. Ze zijn niet langer alleen char sterren. Ze zijn objecten en zijn als zodanig behandeld. Dus, het is echt belangrijk dat wanneer je NSLog gebruiken duurt het in een NS snaar, wat betekent dat je zult moeten een op te nemen in de voorkant van uw aanhalingstekens. En daarom zie je, hier, in alle mijn functie oproepen op dit NSLog, ik een aan voor de aanhalingstekens, zelfs hoewel de% d en% f's zijn allemaal hetzelfde uit C. Eventuele vragen tot nu toe? Ik zal proberen om te gaan door dit snel dus dat we meer tijd om te werken kan hebben met Xcode en Objective-C, dus dat jullie meer kunt krijgen vertrouwd mee. Vervolgens wil ik iets markeren conceptueel belangrijk. Dus, C meeste dingen functies. We maken een functie aan te roepen. Wij verklaren functies op deze manier, met de terugkeer typt eerst, dan de functienaam, haakjes, en dan ongeacht argumenten en het soort deze argumenten willen we passeren inch En Objective-C, omdat alles is een object of klasse - dus klasse en object zijn twee termen die meestal synoniem met elkaar, dus ik kan zijn uitwisselbaar gedurende het seminar. Maar, zult u zien dat we methoden in Objective-C plaats functies. En methoden behoren tot objecten. Dus gewoon zo, misschien wel bijvoorbeeld, knoop - ons type [onverstaanbaar] knooppunt van PSET 6 of 5 - we hebben het woord, eigendom, of het volgende knooppunt aanwijzer. Methoden zijn gewoon functies binnen van een soort van structuur. Dus, in dit geval, zou de structuur het object, en dan is de methode iets dat van een object. En dit is hoe je zou verklaren, soort, een methode. Je zou beginnen met, opnieuw, de terugkeer soort - dus, heb ik geprobeerd om kleur coderen de sleutelwoorden, zodat jullie kan het, op zijn minst, opmaak zien gelijkenissen tussen functie verklaringen en methode verklaringen. Dus, begin je met, je weet wel, een terugkeer Type - in dit geval is een array of een NSArray pointer - en dan heb je deze methode. En dan, wat interessant is hier dat in plaats van haakjes, we zijn deze dubbele punten. En dan, in de voorkant van onze argumenten, we gezet, weer haakjes het type van ons betoog. Zo, nu ben ik probeer te maken de vergelijking tussen, je weet wel, n en nummer, omdat ze zowel als ints. En dan, de andere is een NSUInteger type. En dan, met Objective-C, wanneer u wilt meerdere argumenten hebben in uw methode clausule, u, soort van, scheiden ze uit dit soort zoals - Ik ben niet helemaal zeker hoe het te beschrijven, maar dit is een goed voorbeeld van hoe je kan meerdere argumenten hebben daar. Je zou natuurlijk gewoon helemaal negeren de andArray colon NSArray matrix als je gewoon een methode wilde dat neemt in een argument. Ja, vraag. Publiek: Zijn beide NSUInteger en NSArray argumenten die kunnen worden genomen in binnen de NSArray? RHED SHI: Ja. Dus, laat het me uitleggen. Dus, ja. Dus, de vraag was zijn NSUInteger en NSArray * typen van de argumenten, en dat klopt. Dus, wil je altijd wat te specificeren het type van uw argument is. En hier, ik probeer u voorstellen om een ​​deel van de syntax en vocab van Objective-C, dus die zijn werkelijke types dat je te maken krijgt met. En zoals u zult merken, arrays zijn niet meer, soort, eenvoudige beugel dingen. Ze zijn objecten. Hoewel, als we naar het volgende glijbaan, kunnen we zien dat we kunnen hard-code een NSArray in Objective-C met gewoon een op symbool voor de beugels. Ik ben niet, eigenlijk, helemaal zeker van of Ik syntactisch hard-coded een array juist voor de C-versie, maar dat is hoort in een C array. Dus, dit is hoe je zou, weet je, misschien gebruik maken van de functies of de methoden die we eerder gemaakt. Rechts? Dus, dit is waar we verklaren ons functie en onze methode. En nu willen we ze te gebruiken in ons programma, en dit is hoe wij het zouden doen. Dus, in C, zou je, je weet wel, misschien, een bool b en u instellen dat gelijk zijn aan de functie, en vervolgens u passeert in de argumenten. In Objective-C, is het vrij veel het zelfde ding. Je hebt NSArray * my_array, en het is ga gelijk - nu, de enige verschil hier is dit object ding, die ik heb geel gemarkeerd, en zoals je kunt zien, in C, is er geen andere gele woord. En het is omdat methoden behoren met een bepaald object. Dus dat is de reden waarom ik een object moet hebben dat, soort, noemt deze methode op het getal nul, en vervolgens de NSArray a, b, c, d. Heeft u vragen over zeggen? We zullen deze begrippen in actie te zien vrij snel als we het gaan in een demo. OK. Nu wil ik een beetje kort praten Xcode ongeveer 5, de geïntegreerde ontwikkelomgeving dat je zult werken met. Ik weet dat veel van jullie, of sommigen van u, niet Macs, wat een probleem omdat Xcode is niet beschikbaar voor Windows en PC. Vraag me niet waarom, maar waarschijnlijk - ja, corporate. Whatever. Maar toch, dus, ik verontschuldig me als sommige van je moet wel een soort van downloaden virtuele machine voor Mac Om Xcode 5 draaien. Maar het is een tamelijk sjiek software te gebruiken. En dus, voordat we een duik in een soort demo, ik wil je alleen een toon beeld van wat Xcode eruit ziet in uw venster, en dan ook praten over wat deze hele ruimte is. Dus, het is net zoiets als het leren hoe te gebruik van Microsoft Word, behalve dat u wilt vertrouwd gemaakt met alle verschillende dingen die zijn hier aan de hand. Dus eerst, wil ik je wijzen aan de werkbalk bovenaan. Je zult zien dat, aan de top, zult u de bestandsnaam hebben - of, eigenlijk, je project naam en dan de bestandsnaam. Kennis te nemen van het spel en de stop knoppen. Dat zijn degenen die je in gebruiken om uw app draaien op de simulator - de iOS-simulator. Dit komt automatisch met Xcode 5, zodat u zich geen zorgen te maken over downloaden van een soort van simulator. Je drukt gewoon spelen en dan loopt uw ​​app. En je kunt spelen met je, en je zult zien hoe het later werkt. En vervolgens in het midden, is natuurlijk waar al uw mooie code is ga. En dan, op de linkerzijde, zult u hebben dit, soort, map - navigatie - en dan zul je ook zien dat, samen met het mappictogram, zijn er een boel andere iconen er die later nuttig zijn. En dan, aan de rechterkant is een hulpprogramma gebied waar u kunt werken met sommige objecten en geef je weten wat de kleur hebben, welke Het lettertype moet zijn, et cetera. Hoewel, alles wat je doet in de bijkeuken, kunt u doen in de code ook. En dus, zal ik gaan door twee voorbeelden van het gebruik, eenvoudig, geen code op alle - of zeer minimale code - verzen alle code, gewoon zo dat jullie weet wat je wel en niet kan doen in Xcode en Objective-C. En tenslotte op de bodem, heb je de debug omgeving. Dus, u niet langer hoeft te GDB lopen, et cetera, op uw programma's. Het doet dit automatisch voor u. En u kunt ook afdrukken dingen naar dit gebied. Dus eigenlijk, later, we gaan door mario.c, als jullie nog herinneren dat, in Xcode. Dus dat zou leuk zijn. En dan, alleen maar om het terug te brengen Objective-C, wil ik benadrukken wat je kunt doen met if statements. Dus, weet je, want Objective-C is een superset van C, alles wat je doet, letterlijk, hetzelfde als C. U gewoon kleine verschillen. Zo, zult u het formulier merken voor een if verklaring is nog steeds hetzelfde - je hebt indien, en dan heb je tussen haakjes met een voorwaarde binnenkant van, en dan accolades voor wat u wilt doen binnenkant van daar. Toch wilde ik deze dia zetten hier, alleen om te illustreren dat, omdat we te maken hebben met objecten nu, we zullen moeten deze dingen te gebruiken zo genoemd, is gelijk aan touwtjes, omdat is toevallig een werkwijze van koord of een NSString object. Zo word in dit geval, een NSString object, en het heeft een methode genaamd is gelijk aan touwtje, en dan zijn we passeren in een hard-coded string zien of die gelijk zijn elkaar. Eventuele vragen tot nu toe? OK. En, ik wil gaan over een voor de verklaring ook. Dus, bijvoorbeeld, als we wilden lus over de lengte van een string C, deze u bekend moet zijn. En, in Objective-C, wil ik om deze te markeren, soort, methode genaamd telling. Nou, laat me neem dat terug. Telling is een methode array. Echter, het is meer in het bijzonder een eigendom van de array, dat is waarom je kan de dot-notatie te gebruiken. Maar ik wil niet te krijgen in te veel van dit conceptuele spul, ik wil gewoon om te laten zien hoe de dingen eruit zou zien zoals in Objective-C versus C. En ook, ik wil erop wijzen dat hoewel ik heb gebruikt NSUInteger voor al mijn i's in Objective-C, U kunt ook gebruik maken van int, omdat int is volledig geldig in Objective-C, ook. Ja? PUBLIEK: Is het gewoon stilistische, of is - RHED SHI: Yeah. Dus, zoals u zult zien - Dus, de vraag was is dat gewoon een kwestie van stijl. Zoals je zult zien, ik heb een, soort van, ster sterretje ding naar beneden op de bodem, en die link brengt u naar een stack overflow vormen, waar iemand uitlegt het verschil tussen een int in NSInteger en een NSUInteger. En ja, kunt u daarover later meer lezen. Deze dia's zullen zijn, natuurlijk, voor u beschikbaar. Laten we eens kijken. OK, geweldig. Dus, dit is ook opgenomen in de dia omdat ik dacht dat dit een grote website die u introduceert Objective-C syntax. Dus, eigenlijk, waarom gaan we niet naar Chroom en bekijk deze website? Rechts. Dus, wat ik wil laten zien jongens hier is dit beeld. Dus, dit is, een soort van, gaat worden wat je gaat om te zien binnenkant van een Xcode bestand. Eigenlijk, waarom gaan we niet alleen een moment om, soort van, neem deze in Dus, dit boek - dat is het object dat we te maken hebben. En dan is het duidelijk gaat worden overgenomen van een ander voorwerp, maar je hoeft geen zorgen te maken over dat. En dan, het, misschien, heeft sommige lid variabelen. Het belangrijkste wat ik wil laten zien is de instantie methodes, hier. Dus, bijvoorbeeld methoden aangeduid door deze minteken. En dan, zoals u zult merken, zijn we reeds beginnen de paradigma zien voor methode verklaring, toch? De return type, de naam van de methode, en vervolgens het type van het argument, en vervolgens de naam van het argument. En dit minteken betekent dat het een instantiemethode, waardoor deze methoden zijn alleen beschikbaar voor voorwerpen die zijn geïnstantieerd. Om het contrast dat, methoden met een plus teken voor hen zijn klasse methoden, hetgeen betekent dat u kunt bellen deze methoden, zelfs als u niet beschikt over nog een object gecreëerd. Dus, voor een duidelijk voorbeeld, NSString is een klasse. En u kunt bellen, bijvoorbeeld, methoden van de klasse op NSString - de werkelijke, zoals, woord NSString. Echter, om deze te gebruiken methoden, je eigenlijk nodig hebt om een ​​string te maken. Bijvoorbeeld, NSString ster koord gelijk bij aanhalingsteken, hello wereld. En dan kunt u deze methoden gebruiken - bijvoorbeeld methoden - op die hello wereld string. Dus, dat is het verschil tussen bijvoorbeeld methoden en methoden van de klasse. En, we hebben net bedekt dit deel. Eigenschappen zijn een ander ding dat zijn binnenkant van objecten, in principe. En verklaart u deze met het pand op trefwoord. U aan deze opties, hier, dat ik later zal uitleggen wanneer we gaan in een demo. Ja? Hi. Publiek: Kunt u inzoomen, alstublieft? RHED SHI: Oh ja. Sorry. PUBLIEK: Dank je wel. RHED SHI: Dat moet een stuk beter. PUBLIEK: Ja. Dank u. RHED SHI: Ja, gelieve herinneren me als Ik vergeet om in of uit te zoomen. Dus, dit is alles wat ik wilde om te laten zien voor - whoa, dat is veel - voor deze website. Dus, laten we terugkeren naar onze dia gaan. Eigenlijk, nu laten we een moment nemen te duiken in een demo. Dus, zullen we beginnen met een nieuwe Xcode project. Dus, als u zult openen Xcode op al uw machines, moet u een aantal te nemen pagina waar het zegt, als, ofwel geopend een bestaand project of een nieuwe project, en je moet klik een nieuw project. En dan moet daarbij rekening u naar dit scherm. Ja? PUBLIEK: Als we niet over een Mac, doen we gewoon een soort chill? RHED SHI: Of kijk op met iemand, ja. Yeah. U kunt relaxen, ook. OK. Dus, wat gaan we eerst doen, nu, is, eigenlijk, we gaan doen Single View applicatie. Dus, als u zult opmerken, wat is er veel over Xcode en Apple ondersteuning voor ontwikkelaars is dat je een heleboel sjablonen te werken met reeds. Je zou, bijvoorbeeld, maken een meester-detail toepassing. U kunt een spel te maken - en eigenlijk, zal ik niet ingaan op games, omdat games zijn een ander verhaal voor iOS ontwikkeling. En ze zijn soort te scheiden, dus ik zal niet ingaan. Dan heb je pagina-gebaseerde toepassingen. Je hebt een tab toepassing - zo willen, bijvoorbeeld Bank of America Waarschijnlijk heeft, zoals, een tabblad app. Het is degene waar je de knoppen onderaan. En dan heb je een Sprite Kit spel. Of u kunt werken vanuit het niets, die is wat we later zullen doen. Maar laten we eerst beginnen met een weergave applicatie. Daarna zal het vragen om een ​​naam product, en we kunnen gewoon test te doen. Naam van de organisatie - zo, naam van de organisatie, bedrijf identifier - deze zijn belangrijk als je gaat om uw app in de App Store gezet. Anders dan dat, is uw code gaat draaien absoluut prima zonder dit. Dit gaat van belang zijn als u wil - zo, per se, zoals, zet je app op uw telefoon of iets, en testen het uit, je weet wel, in het echte leven - Dit zal belangrijk zijn. Dit heeft de neiging om meestal geassocieerd met een soort van ontwikkelaar rekening met Apple. En zo is, weet ik, waarschijnlijk, veel van jullie hoeft niet elke ontwikkelaar accounts. Ik weet dat de universiteit heeft er een. Ik denk CS heeft er een. Maar, kun je me e-mail en ik zal proberen om dat uit voor je. Maar nu, ik heb net in sommige placeholder dingen hier. En je kunt natuurlijk hier, kies of je wilt dat het uitsluitend in iPhone, in iPad, of beide - universele toepassing. Dus, voor nu, laten we het doen universeel, net aan beide zijden van het platform te bekijken. Laten we eens kijken. Dus, nu, ik ga sparen het in een soort map. Maakt niet uit waar - je kan altijd verplaatsen later. En, nu, we worden gebracht onze Xcode project. Ik zou me geen zorgen over dit alles. Ik stel niets van aan te raken dit, tenzij u precies weet wat je doet. Dus, dit alles, gewoon negeren grotendeels. U hoeft niet aan te raken, en als je denkt u frituren sommige dingen hier, het krijgt een beetje lastig. Dus, waarom niet we kijken naar de bestanden op de linkerkant in onze navigator. Hier hebben we AppDelegate.h. We hebben AppDelegate.m Dus, zoals u zult bericht, hebben we bestanden, header die eindigen in punt h, en we hebben implementatie - eigenlijk, laat me vergroten OK. Laat me vergroten Juist, dus je hebt bestanden header en je hebt implementatie bestanden. Eigenlijk - OK. Dit is een beetje raar, maar geduld met mij. Dan, want we hebben gekozen voor een weergave toepassing, gaan we zijn werken met storyboard. Dus, storyboard is iets dat Apple is gekomen met om echt te helpen ontwikkelaars snel prototype hun toepassingen. Dus, dit is waar je kunt maken een app zonder het schrijven van een enkele regel code. Echter, in onze enkele weergave toepassing, Wij uiteraard een bestand voor onze mening, die is een uitzicht controller. Dus hebben we de header en de implementatie-bestand, hier. En, ik ga nu uit te zoomen, omdat we zullen moeten werken in het storyboard. Dus, hier is onze mening. Als we, gewoon, lopen de app op dit moment, er is niet veel spannende gaande. Zo, zult u deze witte scherm te zien. OK? En, in onze nutsbedrijven gebied, kunnen we toevoegen een heleboel verschillende dingen aan. Dus, wanneer je te maken met schermen in iOS, uitzicht controllers zijn de objecten kapselen, soort, uw opvattingen. Dus, een uitzicht controller altijd heeft een eigenschap genaamd uitzicht. En dat uitzicht, typisch, bevat, je weet, wat je willen zien op een scherm. Dus, nou ja, laten we beginnen met het zetten, misschien, misschien een label. Dus, laten we een label op daar - plak het in het midden. Zo, nu dat ik heb geklikt op het etiket, I kan gaan in de eigenschappen inspecteur en beginnen met de waarde veranderen. Laten we het CS50 Colours. En, kan ik ook het lettertype veranderen. Dus in plaats van het doen, dat is de standaard, kunnen we een aangepaste een te doen. We kunnen veranderen - je weet wel, UltraLight, maak het 32. En dan kunnen we onze box groter maken. PUBLIEK: Denk je dat je kunt inzoomen in slechts een beetje meer, misschien? RHED SHI: Ja? OK. PUBLIEK: tik het gewoon? RHED SHI: Eens kijken. Werkt dit? PUBLIEK: Net voorbij de Xcode? RHED SHI: Zeker. OK. Geweldig. Publiek: Het etiket onder? Het label? RHED SHI: Wat is dat? Publiek: Wat drop-down was het etiket onder? RHED SHI: Dus, de vraag was, wat vervolgkeuzelijst was het etiket onder? Het moet gewoon, onder hier. Ik denk dat het een kubus ding. Maar meestal, dit is de standaard - Ik ga gewoon hier beneden tot ik een label. Yeah. Dus nu hebben we ons label. Laten we hem in het midden. En Xcode geeft ons richtlijnen voor het centreren objecten. Dus, laten we nu weer lopen onze code. Daar gaan we. Dus, we hebben CS50 Colours. En nu, laten we een knop op daar, toch? Want we willen maken deze interactieve. Dus, laten we hier een knop. En we zullen op deze knop "tap hier noemen om verder te gaan. "We zullen het centreren, ook Eigenlijk is het al gecentreerd. Yeah. Zo, nu hebben we een knop. En als we weer rennen dit, we gaan een leuke kleine knop hier te hebben. En ik kan het klikken, maar het niet doet niets, want we hebben niet gedaan iets met de knop nog. Dus, laten we maken een andere mening, toch? Dus, laten we zeggen dat ik wil aan te boren die knop en ik wil ga naar een andere pagina - andere weergave. Wat ik ga doen is, kan ik maken een uitzicht controller, toch? Nu zal ik op mijn knop klikt, en vervolgens, het belangrijkste is, ik ga klik - of - ja, drukt controle op mijn toetsenbord. Controle. Klik op de knop, en sleep. Dus, vergeet niet om de control-toets ingedrukt. Laten we dat opnieuw doen. Dus, houd controle, klik en sleep aan wat je wilt doen. OK. En nu, ik heb verschillende opties hier. Ik kan ofwel duwen, of ik kan een doen modal, of ik kan een aangepaste doen. Push is alleen als je een navigatie-controller. Op dit moment, onze allereerste zicht controller is niet de binnenkant van elke navigatie-controller. Dus, de navigatie-controller is degene dat geeft je de back-knop op de iOS-app waar je hebt, weet je, die top, soort van, dikke streep - waar je terug kunt gaan, of vooruit, et cetera. Op dit moment heb ik niet dat. En ja, dat is waarom ik een push niet kan doen. Dus, ik klikte op push ongeluk, hier. En eigenlijk, laten we lopen de code, en het zou crashen op mij. Alleen als ik op de knop hoewel, dus - rechts. Dus, dit is slecht. En, zoals je kunt zien, hier, we hebben de foutmelding. Dus, "Push segues kan alleen worden gebruikt wanneer bron controller wordt beheerd door een exemplaar van UI navigatie-controller. " Dus, omdat dit niet binnen een navigatie-controller, Ik kon dat niet doen. Dus, nu, ga ik terug naar de map, terug naar storyboard gaan. Publiek: Wat is de navigatie controller, weer? RHED SHI: Zo, nu ik zal je laten zien. Laten we eens kijken. Dus, ik ga om te klikken op deze visie controller, en dan ga ik om te gaan tot product - eigenlijk, nee, sorry - editor. En ik ga in te gaan - eigenlijk, heb ik klik op het? Nee. Daar gaan we. Ik ga om omhoog te gaan in de editor, ga naar beneden insluiten in, en daarna de navigatie controller. OK. En, mijn werkruimte ziet er echt rommelig, dus laten we dit opruimen. Dus, dit alles is storyboard. En op deze manier - OK, stop - Ik kan snel iets op te bouwen als deze. En toen, nu kan ik terug gaan, weet je? Maar dit is een beetje saai, toch? Dus, wat ik wil doen is, wil ik niet te maken, gewoon, een uitzicht controller. Laten we zeggen dat ik wilde eigenlijk een table view controller, dus ik kan zetten in enkele mooie kleuren, in de tabel. Zo, nu heb ik in mijn table view zetten controller, moet ik het terug aansluiten van deze toets om de view controller. Dus ik moet mijn controle doen, klikken, slepen ding weer. En nu kan ik push doen, omdat ik het insluiten het in een navigatie-controller. PUBLIEK: Navigation controller net stelt u in staat om te gaan van plaats tot plaats? RHED SHI: Ja. Dus, meer technisch, het is een object waar - zo, de binnenkant van de navigatie controller object, het houdt van een array. En dat array bevat alle volgende bekijken controllers. Dat is waarom wanneer u op terug, het gaat terug naar de vorige pagina. Omdat de navigatie-controller object, of de code die zorgt voor Dit object heeft een array die houdt volgen van deze view controllers en kan dan, weet je, DQ het uitzicht controller en geef je terug de vorige. Dus, dit is technische zaken, maar - en ik zal je later in te laten zien code, als we tijd hebben. Ik ben soort van lopen op tijd, maar - Dus, met de tabelweergave wat we kunnen doen is - Het is meestal automatisch ingesteld Dynamische Prototype - we gaan het Statische cellen te maken, anders gaan we lopen in sommige problemen. En dan, laten we zeggen dat ik ga een sectie hebben. Dus, secties is als - als je ooit hebt gezien dat de muziek app, wanneer je hebt kunstenaars, secties zou als een door middel Z's - de letters - en dan, weet je, de individuele rijen zou zijn de namen van de artiesten. En ja, wat is cool hier, is dat ik niet kan naar alle objecten binnen van mijn storyboard via deze drop-down menu, ook. Dus, ga ik klik op mijn afdeling, en ik wil, weet je, misschien vijf rijen. En dan, binnen elke rij, Ik wil een label zetten. En ik ga dit Blue bellen. En dan, ik wil een UI weergave zetten, je weet, misschien voor, zoals, een klein doosje. Zodat ik mensen kan laten zien een voorbeeld van de kleur. En ik kom terug naar het pand gaan en veranderen die kleur aan, oh, ik niet weet, deze. En dan, let ook, hier, als ik de accessoires, kan ik veel hebben van de verschillende accessoires die je normaal gesproken ziet. De onthulling indicator, het detail, of vinkje, of gewoon detail. Dus, misschien kunnen we doen, zoals, een openbaring indicator, bijvoorbeeld. En dan, waarom gaan we niet deze, kopie plakken, en leg ze in de volgende tabel rij. Dus, kunnen we dit Yellow noemen. En ik zou kunnen hebben om dit uit te breiden. Laten we het geel. En zo, kunnen we kopiëren plak onze weg naar beneden. Wat was het? Paars. Dus, dit zijn alle typische CS50 kleuren die je hebt gezien in de klas - eigenlijk, sorry - of op de website. Hopelijk kunnen jullie zien wat ik hier doe. OK. Laatste. Publiek: Hoe heb je toevoegen de rij in eerste instantie? RHED SHI: Dus, de vraag was, hoe heb ik voeg de rij aanvankelijk? Ik ging in deze sectie tafel - of hoe kan ik selecteert u de sectie tafel - en dan, hier, ik bijgewerkt het aantal rijen. En, laat ik hopen dat dit werkt. OK. Eens kijken of dit werkt. Oh, perfect, geweldig. OK. Terwijl ik aan het opbouwen was mijn demo, sommige dingen zijn niet op een lijn, dus, bedankt voor het applaus. Yeah. Dus, laten we eens kijken. We maken deze negen gewoon om ervoor te alles - of eigenlijk, laten we gewoon zet al deze tot openbaarmaking indicatoren. En dan, wat ik wil jou ook zien,, was hoe ik elk van deze kunnen nemen tabel rijen en hebben ze interageren - oh. Nee. Oh. Ook wil ik je laten zien - hier kan ik de titel van leg mijn navigatie controller, toch? Dus eigenlijk, zult u merken, zodra ik ingebedde deze visie controller binnen van de navigatie-controller, zien we deze navigatiebalk aan de top van onze storyboard vertegenwoordiging van een uitzicht controller. En ja, dit geeft ons, als een visuele, soort, te begeleiden naar onze zichtbare scherm. Dit gaat duidelijk zijn de navigatiebalk. En wat ik snel wil doen, nu, wordt in een andere - dus dit table view controller deed ik door die een van deze en slepen hier, en dat is wat me toegestaan ​​om snel, echt, maak een tabelweergave controller. Als we de tijd wel, zult u zien dat, programmatisch, het is een beetje lastig om een ​​tabel te maken view controller, want er zijn een paar methoden die zijn nodig zijn voor u om, soort van, schrijven uitgevoerd om voor de tabelweergave controller correct worden weergegeven. Echter, ik wil gewoon laten zien, nu, een voorbeeld van waar, als ik deze nemen, bijvoorbeeld - Ik heb in een andere weergave controller zetten. En nu, laten we zeggen dat ik wil controleren alt mijn allereerste blauwe tabelrij naar hier. En ik wil dit Blue bellen. En dan - laten we eens kijken. Ik ben op het uitzicht nu, en ik kan veranderen de achtergrond blauw. En dus, bericht, hier, deze drop-down menu geeft je ook een hiërarchie van alle van deze objecten. Dus een belangrijk ding om op te merken, hier, is dat al deze dingen, hier - deze tabel View Controller, de tafel uitzicht, tafeltje, tabelweergave cel - het zijn allemaal objecten, in code. Dus, je weet wel, een label is nu onder de inhoud uitzicht, et cetera. Zo verder en zo voort. Dus, als we deze code uitvoert, we moet iets te zien - laten we eens kijken of dit - ja. Dus, daar gaan we. Maar als we dat niet doen, geen van deze andere dingen werken. Rechts? Dus alleen deze werkt. En, in het belang van de tijd, zal ik niet gaan in, weet je, het zetten langs de andere. En dit is het einde van, soort, storyboard - wat ik wilde laten zien u voor het storyboard. En, ik heb wel een uitgewerkt voorbeeld, eigenlijk, hier. Dus, dit is de storyboard die ik eerder maakte. Dus, zoals je kunt zien, dit was mijn navigatie controller. Dan had ik mijn eerste mening controller, dan had ik mijn table view controller, en toen had ik al deze - dus eerder, ik deed iets heel anders. Dus, excuseer die dingen. Ik zal waarschijnlijk opruimen later voor Ik stuur het op naar de productie. Maar als we dit uitvoeren, we zullen zien dat alle opties zijn beschikbaar voor ons. Behalve dat ik niet de achtergronden maakte die kleuren. Dus, mooie eenvoudige applicatie. Nu, laten we proberen aan te pakken dit programmatisch. OK. Dus, om dat te doen, we gaan gewoon om een ​​nieuwe Xcode project te starten. We zullen het een lege applicatie nu te maken, omdat we niet willen hebben de storyboard. Dus, ik ben mezelf gewoon te beperken tot niet Gebruik een van de storyboard, en een lege applicatie zal niet geef me een storyboard. Dit is gewoon om te voorkomen dat me van vreemdgaan. Laten we eens kijken. Wacht. Heb ik - Ja. OK. Rechts. Dus, hier, we blijven zitten met niets anders dan code. Dus, laat me dit venster verplaatsen iets meer dan. Rechts. Zoals je hier kunt zien, de enige bestanden ons gegeven zijn AppDelegate.h en dot m, en we hebben niet storyboard meer. Dus als we dit uitvoeren, zijn we nog steeds naar naar het witte doek, God zij dank. OK - wit scherm, maar niets anders. En, hier is het belangrijkste onderdeel. Dit is waar de actie gebeurt. In de vorige versies, is er meestal geen code hier, maar de storyboard bepaalt in wezen de code voor dit deel. Ik zal niet in detail treden over de wijze waarop. En wat we nu willen doen is, willen we hier in te gaan, en deze kleine ruimte opnieuw begint het creëren van onze app. Dus - ja? PUBLIEK: Zoom? RHED SHI: Zoom. Ja, natuurlijk. OK. Ik zal het typen, dus moet dit niet zo veel uit. OK. Dus, eerst, herinneren we ons wilden maken een navigatie controller, toch? En ook, zoals je hier kunt zien, Xcode doet een heel groot werk van self-vulling. Dus, zoals je zult merken, de namen van alles is een stuk langer dan gebruikelijk, maar Xcode vult het in voor je. Dus ik kan gewoon op Enter. Dus, ik wil een UI navigatie creëren controller wijzer, en ik kan het noemen navigationController. Nu, wat moet ik nu doen? Na deze gelijk-teken, moet ik, ten eerste, maak het binnenste van het geheugen. Dus ik ga doen NavigationController alloc - dus, dit is vergelijkbaar met malloc, dat jullie gebruikt in C - en dan, ik ga het init. Dus, het is echt belangrijk dat elke object dat u maakt, wilt u alloc en init het. Dat gaat om het creëren en instantialize het in geheugen, en nu kun je het gebruiken. Oke? Als u dat niet doet, uw object doet niet bestaan, en kom je in een bos problemen. En dan, ik wil maken een uitzicht controller, toch? Dus, ik wil een UIViewController maken ster - zo, alles is een pointer in Objective-C, en ik ga doen iets dergelijks hier - alloc, init. OK. En wat ik ga doen is, ik ben gaat - zo, herinneren wanneer we deden de embed in de navigatie-controller? Dit is hoe je het doet in de code. Je gaat doen navigationController pushViewController - PUBLIEK: [onverstaanbaar]. Zal dit gebeuren voor ons, of -? RHED SHI: Oh, ja. Nee. Het houdt me beter. Nee, het zal werken voor u, ook. Dus, dit zijn alle methoden. Dus pushViewController is een werkwijze en Ook, meer specifiek, het is een instantie methode van de UI navigatie-controller. Want ik moest mijn UI navigatie creëren controller ster, en dan heb ik kan dit pushViewController roep mijn specifiek geval van een UI navigatie controller. PUBLIEK: Moeten we de exacte doen woord, of is het al bestaan ​​voor het? RHED SHI: Ja, want het is een methode. Het is als een functie. Het is net als printf. Het is net als scanf. Het is net als strcompare. Behalve het weet wat je zou willen typen en merken dat het zal altijd komen met dingen die wettelijk is toegestaan ​​voor u. Dus, als er niets opduikt hier, dan is er iets mis. Dus, pushViewController. Zo, nu, ik wil duwen mijn nieuw gemaakte UIViewController, en dan, geanimeerd - misschien niet. Omdat dit gaat worden de eerste view controller. Ik bedoel, zelfs als ik te maken geanimeerde, het zal waarschijnlijk niet opdagen, omdat het is het eerste scherm. En vergeet niet de beugels. Dus, herinner me hoe we de beugels? En tussen haakjes, de object roept een methode - dus ons doel is de navigatie controller, en de methode is een push view controller geanimeerd. En zie hoe het is in twee argumenten, en ze zijn van elkaar gescheiden door de, soort, woorden, en een dubbele punt. Dus, Objective-C probeert het leuk te maken en gemakkelijk voor u om te lezen hardop - uw code - en hebben het semi, soort, zinvol. Echter, deze norm te bereiken is niet genoeg. Laat me uitzoomen nu. Doen alleen dit is niet genoeg om krijgen wat we hebben gekregen om eerder. Dus hier, zult u merken dat er eigenlijk niet van plan om elke vorm van zijn bar, hier, toch? Er is geen navigatiebalk, die een middel dat we nog steeds niet gekregen het. En we kunnen testen dat uit, ook, door, misschien de achtergrondkleur van ViewController, toch? ViewController.background-- ah. Dus, zie hoe ViewController hoefde niet een achtergrond kleur, hoewel ik wilde het openen? En dat komt omdat ViewController is een container voor het uitzicht. Dus, het heeft een eigenschap, die heeft dan een achtergrondkleur. En, kan ik het opgezet, een soort moeizaam, door te bellen naar de kleur op de UIColor object. Dus, bericht hier, redcolor is een methode. Het is een klasse methode UIColor. Omdat ik niet een te maken daadwerkelijke aanleg van een UIColor in orde om de methode aan te roepen op. Ik, gewoon, noemde het van het type-achtige naam. Ik, net als, noemde het op int, als int had, als een werkwijze om het, bijvoorbeeld. En dus, als we deze code uitvoert, zullen we merken dat de achtergrond is eigenlijk niet rood. Het is nog steeds wit. En hoe we kunnen krijgen rond dat is, merken hoe er het self.window. Dat is, net als de uiteindelijke container voor uw toepassing. Het is de ultieme ding dat bevat alles op het scherm, voor iPhone of iPad applicatie. En, heel handig, self.window heeft deze eigenschap genaamd rootViewController. En dat gaat de wijzer te zijn de allereerste View Controller binnen van uw app. Dus, wat we willen doen hier, nu, is op gelijke onze NAVIGATIESET controller. Rechts? Omdat, technisch, navigatie controller is onze allereerste zicht controller. Het houdt van een scala aan andere view controllers, en we dit geduwd view controller in die array in de navigatie-controller. Dus, wil je niet om dit te doen. Dat zou je niet echt helpen. Wil je dit doen, als je wilde doen een navigatie-controller, die het meest van jullie zullen waarschijnlijk omdat je wilt aan, een soort van, een soort van, zoals, het menu om terug te gaan naar of een homepage om terug te gaan, in plaats van een leeg scherm. Ja? PUBLIEK: Is het ongemakkelijk voor u om in te zoomen op de - RHED SHI: Yeah. Dus, ja. Dit is de code, en nu Laten we eens testen het uit. Dus, daar gaan we. Magic. Dus, OK. Dank u. OK. Dus nu, wat we willen doen is - dus, we soort beperkt, hier, toch? We konden in potentie alles schrijven binnenkant van deze functie. Maar, dat is niet hoe iOS ontwikkeling meestal werkt. Dus, wat we gaan doen is, we zijn gaat een aantal nieuwe bestanden te maken. Maar, meer in het bijzonder, we gaan maakt u een andere Objective-C klasse, of een ander object - klasse en objecten uitwisselbaar hier. En, hier is hoe ik kon, in potentie, maak een andere klasse van U-controllers. Dus, het is een sub-klasse, zoals u zult merken, hier, het is een sub-klasse van de UI view controller, maar ik kan noem het een andere naam hier. Ik kon deze CS50 noemen, kon ik bellen deze visie controller, kon ik bellen dit blah view controller - wat ik wil. Dit is gewoon de naam voor de klasse. Echter, gaat het belangrijk om omdat, in wezen, wat ik doe hier is, ik ben het creëren een andere klasse naam. Dus het gaat worden, zoals sommige soort type of een object. Dus, moet het een beetje generiek. Het gaat niet heel specifiek te zijn. En ook, ik wil wel wijzen uit deze twee opties. Omdat we doen alles wat binnen van code, soms is het een stuk makkelijker om in een interface bestand, zodat Ik kan letterlijk slepen en neerzetten, als we eerder deden met storyboard - je weet wel, een label of een knop, of wat anders. En zo, xibs zijn bestanden die u toelaten om die wel, en je hebt om het aansluiten deze opvatting controller bestand. Dus, ik ga bewust check deze niet. Normaal zou ik dit controleren, en als ik alleen dit deed voor de iPhone of iPad, I zou dit controleren en gewoon een voor, je weet wel, de iPhone of de iPad. Maar omdat ik doe universele, ik ga later twee van die maken. Dus, ik ga bewust vink deze. Dit is ook heel belangrijk. Heel vaak heb ik bugs gehad waar dit niet werd gecontroleerd. En ja, natuurlijk, is dit bestand niet, soort van, zoals, opgenomen of ingevoerd binnenkant van deze test map. En dus, mijn code heeft absoluut geen idee van het bestaan ​​van dit bestand, en dat veel pijn veroorzaakt en uren van debuggen. Maar, maar zorg ervoor dat dit zo is gecontroleerd dat, je weet wel, het doel van deze bestand voor deze toepassing. OK. Zo, nu hebben we twee nieuwe bestanden aangemaakt. En deze bestanden zien er vrij leeg. En, eigenlijk, laten we ook doorgaan op door het creëren van de xib bestanden. Dus, eerder, was ik in de Cocoa Touch drop-down. Nu, ik ga naar de gebruiker te gaan Interfaceaanraking, en zoals je kunt zien, ik kan een storyboard maken. Dus, zelfs ik begon met een leeg toepassing, kan ik nog steeds gebruik maken van een storyboard. Hoewel, het wordt lastig in termen van hoe u verbinding wilt maken dat uw code. Dus, ik zal niet gaan. Maar, wat we willen doen nu is het creëren van een uitzicht. En u kunt kiezen voor een iPhone of een iPad. En typisch, om aan te geven verschil - als u een doet universele toepassing - je ofwel zet een underscore iPhone, of u kunt een twiddly PARP doen. Het maakt eigenlijk niet uit. Het is gewoon voor u om te differentiëren die uitzicht is voor welk apparaat. En zo, kijk nu. Ik heb een scherm dat ik kan werken. En dus, bijvoorbeeld, ik kan een etiket aanbrengen hier, weet je, en ik kan ook zetten andere knop hier. Ik zal niet de moeite te veranderen de waarden hier. Maar, wat is hier belangrijk is dat het bestand eigenaar - zo, ik ben binnenkant van de iPhone uitzicht, iPhone xib bestand. En in dit vaargebied of drop-down menu, ik wil naar de eigenaar bestand. En dit is het echt belangrijke stap hier. Ik wil de klas uitzicht maken controller, zodat dit xib bestand zal worden geassocieerd met mijn mening controller. En alles wat ik doe in mijn mening controller programmatisch is zal hier worden weergegeven op. Dus, echter merken dat - eigenlijk, laten we deze visie achtergrond blauw, bijvoorbeeld. Of groen. En dan, dus als je zult opmerken, terug in deze code, dit is waar we naar onze navigatie-controller. Hoewel we die stap, het is nog steeds rood, niet groen te zijn. En er is een reden waarom. Het is omdat, wanneer we inited onze mening controller, hier - sorry, het is een beetje gek - toen we inited onze mening controller hier, we inited het van het algemene type UIViewController. OK? Dus we hebben niet eens doen het met deze klasse. Dus denk eraan, dit is als een klasse nu. Het kan worden gezien als een soort net als UIViewController is een type. En om dat te gebruiken, wat we moeten doen is het importeren - import ViewController - en, zoals je kunt zien, is het autofills het voor mij. Dus, ViewController - en nu, hier, kan ik dit veranderen UIViewController te ViewController. En nu, hier, ik kan veranderen dit ViewController. Laten we opnieuw uitvoeren dit. Het is nog steeds rood. En de reden waarom het nog steeds rood is, omdat - woah, wat daar gebeurde? We wilden deze xib associëren bestand met het uitzicht controller. Echter, om daadwerkelijk doen dat moeten we in te gaan. En als we dat doen de init, willen we doen initWithNibName, en dan willen we doen het op touw View_iPhone, bijvoorbeeld. U kunt de bundel hier negeren. En dit gaat toestaan ons, eigenlijk - uh oh, er is een probleem. Rechts. En ja, er is een probleem, want in onze mening xib file, we hebben een label en we hebben een knop. Echter, hoewel we hebben aangesloten die twee, er is niets binnen van ViewController.h of ViewController.m dat deze weerspiegelen toetsen of deze labels. Dus, moeten we die in zo schrijven eigenschappen van het uitzicht controller. Dus, dit is hoe je verklaren een woning. Het duurt in, meestal deze twee opties. Voor de toepassing van ons en dit seminar, Ik zou zeggen dat, in het algemeen, de meeste eigenschappen zijn nonatomic en behouden. U kunt maximaal gelezen door Google zoeken, je weet wel, het verschil tussen nonatomic en te behouden op, je weet, Google of zoiets. En ik neem je mee naar, zoals, Stapel Overloop, waar mensen zullen hebben antwoorden voor de verschillen tussen deze. Maar voor nu, dat is wat we willen worden betrokken bij. En we willen een UI label, ster maken, en we kunnen het noemen wat we willen. We kunnen dit noemen, je weet wel, label. En, we gaan een ander te creëren een voor de knop. En vergeet niet om de asterisk, omdat we te maken hebben met pointers vrijwel overal binnen van Objective-C. Maar dat zal nog niet opgelost het probleem, zoals je hier kunt zien. En de reden is dat, wanneer we willen een xib bestand etiket of een verbinding toets om het programma of de header en implementatie file, we willen voeg dit stukje code - stopcontact. Merk op dat het een sleutelwoord. En, zodra ik klaar ben met het typen dat uit, moet deze hebben twee cirkels, hier. Meestal zijn ze niet ingevuld Ik weet niet zeker waarom ze zijn. Maar meestal zal u handmatig hebt sluit ze door naar deze kant van de nutsbedrijven gebied. En dus, nu, ik heb mijn label gekregen geselecteerd, en ik wil slepen deze nieuwe verwijzingen stopcontact om eigenaar van mijn bestand, en klik vervolgens op Label. Dus nu, eindelijk, dit label is verbonden met dit label. En dit label is wat we gaan gebruiken programmatisch te veranderen zijn tekst, het lettertype, de achtergrond kleur, et cetera. Dus, waarom niet wij doen de hetzelfde voor de toets? En zoals u zult merken, voor de knop, het is een beetje ingewikkelder. Omdat, ik bedoel, je moet druk op een knop, dus het heeft een veel van opties voor de manier waarop gebruikers kan drukken op een knop. En dan zullen we later zien dat we kunnen dit verbinden aan onze code te laten werken. Dus, voor nu al willen we verbinden aan de eigenlijke knop binnenkant van onze code. Dus gaan we naar de nieuwe verwijzingen uitlaat, en doe dan de knop. Nu, laten we opnieuw uitvoeren dit. Uh oh. OK. Ik weet niet wat er hier aan de hand nu. Whoa. Slechts een ogenblik, hier. Eigenlijk, waarom gaan we niet een kijken naar een ander voorbeeld in het belang van de tijd. OK. Dus, hier is het beter voorbereid voorbeeld voor ViewController. Zoals je hier kunt zien, heb ik begrepen de eigenschappen van het label en de knop. En dan dit stukje code hier - dit IBAction - was een verbinding met deze knop hier. Dus zoals je hier kunt zien, Touch Binnen omhoog is verbonden met de selector riep ingedrukt houden. Dus kunnen we eigenlijk gaan door de beweging weer, hier, door het nemen van Touch Up Binnen en slepen het naar File's Owner, en vervolgens Klik op de knop gedrukt. Nu, laten we lopen onze code. Dus nu, op deze knop werkt nu en brengt ons naar de volgende pagina. En, in termen van onze view controller, dit is het stukje code dat nam zorg van de toets ingedrukt. En het is belangrijk om hier op te merken, dat Ik heb een ander type weergave gecreëerd controller heet een tafel view controller. Dus, dit gelijkaardig aan rug in was storyboard, toen sleepte ik een van deze table view controllers in het storyboard. Ik ben het creëren van een ander Pointer naar de tabelweergave controller, alloc en init-ing, en dan doen zelf dot navigatie controller, duwen ViewController, deze nieuwe ViewController. En ik heb de animatie om ja te stellen, want nu de binnenkant van mijn app, en ik willen eigenlijk zien de animatie gaan vanaf de homepage naar de tafel view controller. PUBLIEK: Heb je nog zorgen over garbage collection? RHED SHI: Wat is dat? Nee. Dus, de vraag is, heb je om te werken met garbage collection? Dus, Xcode 4 had als ARC, dat is automatische reference counting. En ja, meestal als je een nieuwe start project, zou je controleren dat, omdat niemand echt wil om te gaan met geheugen vrijmaken en zo. Maar ik denk dat in Xcode 5, is er zelfs geen die optie op het nieuwe project. Dus, het automatisch doet dat voor u. Ja? Publiek: Kunt u een exporteren PDF in je storyboard? RHED SHI: Ja, zeker. Dus, al deze zijn opgenomen in broncode, zodat jullie kunnen controleren het werkelijke Xcode project voor. Yeah? Publiek: Maar, ik bedoel, kan ik afdrukken van een PDF met mijn storyboard? Als ik wil gewoon exporteren beelden om iemand te tonen. RHED SHI: Oh ja. Ik denk, misschien, kun je gewoon neem een ​​schermafdruk. Ja, en een scherm stuur ze geschoten of zoiets. Yeah. Dus, laten we eens kijken. In het belang van de tijd, denk ik dat is alles wat ik kan vandaag dekken. Maar, ik weet dat het eigenlijk gewoon nauwelijks de oppervlakte van iOS te raken ontwikkeling. Dus, aarzel dan niet om me te contacteren als u vragen over iOS ontwikkeling. En hopelijk zal ik in staat om schoon een deel van de code voor de bron code-bestanden, zodat je wat je hebt echt mooie voorbeelden om mee te werken. Anders dan dat, als je jongens gaan de CS50 Hackathon, kan ik of kan er niet zijn, en ik kan helpen met een aantal iOS ontwikkeling, ook. Dus, heel erg bedankt, jongens.