[Powered by Google Translate] [Seminario] [iOS: Writing aplikaĵoj Kiel Boss] [Tommy MacWilliam] [Universitato Harvard] [Jen CS50.] [CS50.TV] Bone, ĉiuj, bonvenon al iOS: Writing aplikaĵoj kiel Boss. Tiu seminario tuj enfokusigi skribi apps por la iPhone kaj siavice skribas apps por la iPad, kaj tiel ni esence tuj marŝi tra paro malsamajn ekzemplojn de kiel fari programon, simpla ludo kiel Tic Tac Toe, aŭ se vi estas pli interesata en fari programon kiel ia novaĵlegilo aŭ iu kiu interagas kun la Interreto mi parolos pri tio ankaŭ. Jen nia mallonga tagordo. IOS apps estas skribitaj en lingvo nomita Objective-C, kaj tiel ĉi tiu estas iom simila al C sed ne vere tute ne, do ni parolos iom pri la lingvo mem kaj poste kiel konstrui iPhone apps uzas ĉi tiun programon programo nomata Xcode, kion se vi ne elŝutis ĝin ankoraŭ bonvolu komenci la download nun. Estas pluraj gigabajtoj. Ĝi devus esti liberaj en la App Store, tiel vi devas havi Mac ideale kurante la lasta versio de VIN X. Se vi ne estas, ne estas problemo. Ni havas Mac en la scienco centro disponebla por via uzo kun Xcode instalita, do bonvolu uzi tiujn por la disvolviĝo. Se vi volas fari programon sed ne havas Mac, ne maltrankviliĝu. Ekzistas multe da kampuso rimedojn por tio. Kaj tiel poste ni iras al kovri 2 grandaj ekzemploj de malsamaj apps vi povas fari. Objective-C estas teknike kion nomas la super aro de C. Tio signifas, ke iu C-kodo estas ankaŭ valida Objective-C-kodo. Tio signifas ke ni ia tubo gravurita sur iu plia trajtojn al C. Kelkaj el tiuj karakterizaĵoj inkluzivas ne devi ĉiam skribi malloc denove, dank 'al Dio, neniu devi zorgi pri tiuj stultaj punteros kaj liberigante ilin kaj cxion, kio stuff vi malamis pri C, kaj ĝi estas speco de aligxo Objective-C. Nun, Objective-C havas ankaŭ multe pli granda norma biblioteko, do ekzistas multe pli funcionalidad vi ricevas senpage ene de Objective-C. Memoru kiam ni skribas PHP ni rimarkas ke ni iris de ĉi plej malgranda lingvo al la giganto biblioteko de cxiuj tiuj frenezaj aĵoj vi povas fari. La sama afero okazas en iOS. Estas celoj por aĵoj kiel la budhisma kalendaro, kaj vere ion vi povus pensi probable ekzistas jam en Objective-C de efektivigo. La objektivo parto de Objective-C estas referenco ion nomata objektema programado. Tio estas speco de nova koncepto, sed ni vere plejparte lernis multon el tiuj konceptoj jam. La ideo malantaŭ Objekto-Orientita Programado estas, ke vi tuj strukturi multon de viaj kodo ĉirkaŭ tion nomas klasoj, kaj ĉi tiuj klasoj estas vere gloris structs. Ene de struct ni esence diris ĉi tie estas io, kaj cxi tiu afero povas havi membrojn. Ekzemple, nodo en ligitaj listo povus esti aliaj aĵoj kiel valoro, puntero al la sekvanta nodo en la listo, kaj kune ke puntero kaj tiu valoro formis ĉi tiun petskribon de struct. Klasoj estas tre similaj escepte klasoj povas ankaŭ havi funkcioj ene de ili. Kiam ni deklaris struct, ni povus nur diri int n aŭ nodo * proksima. Nun kun Objective-C ni povas efektive metis funkcioj ene de tiuj aĵoj. Alia afero kiun klasoj povas fari estas ili povas heredi datumojn de aliaj klasoj. Ekzemple, ni povas rigardi faskon de primitivaj Objective-C klasoj. Unu el ili povus esti la klaso kiu reprezentas la vidpunkton por ekrano, kaj tiel dirante mi volas efektivigi mian propran vidpunkto ni esence diri iu super ĉe Apple, probable vere bela popolo, verkis klaso por mi, kaj ĝi manipulas aĵojn kiel montri butonoj aŭ prunti la ekrano, kaj ni estus vere malkontentigas apliki cxiuj funcionalidad ni mem, kaj tiel per simple heredi datumoj povas diri ĉion, kion vi faris en tiu klaso Mi ankaŭ volas interne de mia klaso, kaj tiam mi iros fari iu alia materialo, nome implementar programon. Tion tiu vorto heredaĵo signifas. Ni vidos pli konkretan ekzemplon. Kaj fine, la ŝlosilo kun celoj Orientita Programado estas ke ĝi kondukas al datumoj encapsulación. En iuj de nia problemo aroj ni povus havi tiujn granda, tutmonda variabloj kaj globals ĉie, kaj tiel estas kiel ni volas konservi trako de stato. Kun klasoj ni povas komenci encapsulando informo ene de objekto. Se ni havas unu ekrano en nia programo, ni ne vere bezonas havi neniun informon de alia ekrano en nia programo interne de tiu, kaj tiel per encapsulando aferoj ene klasoj ĉi reale kondukas tre bona kodo dezajno, kaj tio eblas kun iuj de la pliaj karakterizaj de Objective-C. Forewarning, la sintakson por Objective-C estas la bananoj. Ĝi estas kiel nenio ni vidis antaŭe, tial estas iom da de lernado kurbo alkutimiĝi al kion la heck tio signifas? Sed kiam oni sukcesis pasi tiun komencan lernado kurbo estas vere, vere glata komenci skribi apps. Deklari klaso, diri jen mia klaso, ĝi ekzistas, kaj eble tie estas iuj aferoj kiuj mi tuj difini poste, Mi intencis diri @ interfaco. Mi intencis diri @ interfaco. Mi tuj donos mia klaso nomon. Kaj poste en alia loko mi intencis diri @ fino, kaj ĉio en inter la @ interfaco kaj la @ end tuj estos mia klaso. Tio tuj estos kio estas interne de nia. H dosierojn. Samkiel en C nia. H dosieroj esence diris jen kelkaj aĵoj kiu ekzistas. Mi ne nepre diras al vi, kion ili faras ankoraux, sed la tradukilo bezonas scii ke ekzistas. Poste ene de nia. M dosieroj-ĉar m por Objective-C estas kie ni fakte tuj difini kio tiuj klasoj fari. Same kiel nia. C dosieroj, ni havigis efektivigo por funkcioj. Ene de nia. M dosieron nin tuj diros tie estas kion ĉiuj funkcioj interne de mia klaso-kion ili ĉiuj faras. Kaj fine, ene de struct ni povus diri ene de tiuj buklaj krampoj int n aŭ nodo * proksima, kaj en Objective-C nin tuj uzi la ŝlosilvorto @ proprieto, kaj ĉi tiu estas kio okazas al difini la bienoj, aŭ la ne-funkcioj kiu estas parto de mia klasoj. Nomante funkcioj en Objective-C estas ankaŭ bananoj. Kiam ni deklaris funkcioj en C ni diris ion kiel int foo kaj malferma paren kaj poste donis ĝin listo de argumentoj. Jen kion deklaras metodoj aŭ funkcioj aspektas kiel en Objective-C. Se mi volas deklari funkcio aŭ metodo kie mi estas diranta metodo estas vere nur funkcio kiu estas membro de klaso, do speco de interŝanĝeblaj, sed ne vere, tiel interne de mia metodo Mi volas krei novan metodon. Oni tuj revenos nenio, por kio okazas al esti de tipo malplena. Ĉi tiu estas la reveno tipo de mia funkcio. Nun ni havas parens tie ĉar-mi ne scias. Sekva tuj estos la nomo de mia funkcio, kaj tiam fine ni havas punktokomo samkiel ni havis en C. Kio estas nova ĉi tie estas ĉi ulo tie. Tiu skripto estas reale necesa, kaj kion tiu diras estas ke ĉi tiu metodo ĉi tie devas tuŝi petskribon de klaso. Post kiam ni deklaris nian structs ni probable diris ion kiel struct nodo n, kaj ke en la praktiko kreis aŭ instantiated unu el tiuj structs tiel ke mi povis efektive komenci labori kun kio estas interne de gxi, tial ĉi haltostreko signifas ke ni devas instantiate la klaso nur kiel ni instantiated ke struct antaŭ ol ni povas nomi tiun metodon sur ĝi. Se mi volas komenci aldonante argumentojn por mia metodoj alvenas ankoraŭ pli bananoj. Jen mia metodo nomo. Tiam mi tuj devos dupunkto, kaj post tiu dupunkto diras tie venas iuj argumentoj. Ĉi tiu metodo prenas unu argumento. La tipo de ĝia argumento estas int, kaj la nomo de tiu argumento aŭ la variablo kiun mi tuj komencos uzi ene de la metodo estas nomita mi. Denove, tio estas metodo. Ĝi prenas unu argumento. Se vi volas komenci aldonante pli argumentoj alvenas pli bananoj en kiun ni ĉi dupunkto kiu diras tie venas mia listo de argumentoj. Ĉi tiu unua argumento estas entjero. Nun, ĉi tiu dua argumento estas interesa. La variablo, ke mi tuj uzos interne de mia funkcio nomas f, tiel interne de mia funkcio mi povus diri f + = 1 aŭ io. Tion ĉi tie estas esence ŝlosilo por tiu argumento aŭ parametro. Samkiel ni havis ŝlosilan valoron paroj kaj iu kiel JSON aŭ asociaj tabeloj Objective-C faris la decidon por diri, bone, nur tial, ke ĝi estas vere klaraj kiam vi nomas metodo kio ĉiuj ĉi tiuj parametroj estas Mi vere tuj citi ilin cxiujn. Kiam vi nomas metodon, vi vere diras andFloat, kaj tiam vi pasos ĝin in Interese, ĉi tiu ne estas nomata, sed ĉiuj el la aliaj parametroj estas, do se ni havis 3-a argumento mi povus diri andFloat kaj alia kaleŝego kaj tiel plu. Kiam mi vokas tiujn metodojn estas kompreneble bananoj, do se mi havas objekton, kaj mi difinis metodo nomata foo, kaj mi volas nomi ĝin, anstataŭ diri foo malferma / proksime parens Mi tuj malfermi krampo. Jen la nomo de mia metodo. Mi tuj fermos la krampo, kaj ĉi tiu estas la objekto mi nomante ĝin. Memoru, ĉiuj tiuj manieroj ekzisti ene klasoj ĉar klasoj povas havi metodoj difinitaj interne de ili. Jen mi arbitre kreis objekto de iu klaso, kaj ĉi tiu estas la sintakson por fari tion. Estas 2 paŝoj al krei objekton. La unua paŝo estas mi volas destini spaco. Ĉi tiu estas la ekvivalento de malloc. Ni ne devas diri malloc plu. Ni faligis la m, faris alloc, kaj anstataŭis la. C kun. M. Post kiam ni alloc ion ni tiam bezonos pravalorizi ĝin. Esence, kiam vi kreas objektojn vi eble volas havi iun logiko kiu ekzekutas kiam ili estas kreitaj, por ke vi povu pasi en iuj aprioraj valoroj aŭ io simila, kaj tiel ĉi init metodo estas kio vere kreas la objekto. Ni unue atribui spaco, samkiel ni faris en C, kaj poste ni pravalorizi ĝin, kio povas aŭ ne fari tutan tre. Tiam ni revenas tiun aferon en objekto o. Estas stelo tie ĉar ĉi tiu estas teknike pointer, sed ne maltrankviliĝu, punteros ne tiu granda traktadon en Objective-C plu. Nun ni instantiated tiu klaso nomis NSObject, kaj ĉi tiu estas nur hazarda klaso kiu Apple havas. Ni instantiated ĉi, kaj nun mi havas petskribo de ĉi tiu klaso en ĉi tiu objekto o, por ke signifas, ke se mi difinis ĉi tiuj metodoj mi povis nomi ilin kiel ĉi tio. Simile, se mi volis nomi metodo per unu argumento, do ĉi tiu estas la trinkejo metodo, kiu prenas unu argumenton, kaj jen estas la baz: qux metodo, do ĉi prenas 2 argumentojn. Ĉi tiu estas vokas unu funkcio sur tiu objekto o. Sencon? La sintakso devus sencon, sed vi ia alkutimiĝi al ĝi. Konsentite, ni parolu pri kelkaj aĵoj kiuj estas konstruitaj en Objective-C kiuj ne nepre konstruita en C. En C ni ia devis trakti ĉenojn kiel tiuj stultaj karaktero arrays, kaj ĝi alvenis vere tedas. Objective-C havas tiuj ĉiuj konstruitaj en por ni, kaj ĝi estas konstruita en uzante ĉi tiu klaso nomis NSString. Kiam mi volas krei NSString ni havas pli arcano sintakso. Anstataŭ diri "cs50" ni diru @ "cs50" kaj ĉi tiu estas nur la sintakson por deklari kordoj en Objective-C. Estas ege facile forgesas, kio ne. Nun, kiam mi havas ĉi tio, ĉi tiu estas ĉeno, sed rimarki estas vere nur objekto. Mi diris NSString, kio signifas Mi instantiated la klaso vokis NSString, kiu iu alia skribis por mi, kaj ili estis tre agrabla pri ĝi, kaj tial nun Mi povas komenci nomante metodoj sur ĝi. Se mi nomas la metodon length sur ĉi objekto j ĝi estas tuj revenos al mi la longo de la kordo. Tiu estas ĝuste kiel strlen en C. Tiu revenus 4. Simile, alia metodo Mi eble volas zorgi pri estas ĉi characterAtIndex. Tiu estas metodo kiu diras pri tiu ĉeno s Mi volas ke vi akiri la nula karaktero, kaj tiel ĉi revenus al mi la karaktero c, kaj jen mia tuta amaso pli da tiuj metodoj kiu vi povas Google vere facile. Apple dokumentado estas granda, kaj ni rigardu, ke en iom. Tiuj estas ŝnuroj. Ni ankaŭ ŝanĝiĝema grandeco arrays konstruis in Memoru en C, kiam ni deklaris tabelo ni devis diri ke vi havas 5 elementoj, fino de historio. Kiam ni alvenis al JavaScript kaj PHP ni povus starti fari tion kiel aldoni elementoj aŭ movanta elementoj. Ni povas fari la samon en Objective-C. Anstataŭ krei tabelo en la normala C vojo ni havas denove alian klason nomita NSMutableArray. Ekzistas ankaux NSArray, kaj ĉi tiu tuj esence encapsular iu tabelo. Ĉi tio diras la unua afero, kiun mi volas fari estas mi volas destini spaco por nova tabelo, kaj post Mi rezervu ĝin Mi tiam devas pravalorizi ĝin. Denove, simple nomi tiuj 2 metodoj. Nun ĉi tio signifas ke ene de ĉi tiu celo oni Mi malplenan tabelo sidas tie. Se mi volas aldoni ion al ĉi tiu tabelo, mi povas nomi la addObject metodo. Mi volas aldoni objekto al la tabelo al, kaj mi volas aldoni la kordo CS50. Se mi volis male forigi ke mi povas diri mi volas forigi la objekto en la unua loko en la tabelo aŭ kontesti al. Sencon? Okay, vi ia alkutimiĝi al ĉi kvadrata krampo afero. Per la vojo, ene de tre Apple bibliotekoj vi vidos ĉi NS. La NS efektive staras por sekva paŝo, kiu estis unu de Steve Jobs unuaj entreprenoj, kaj tie estas kie li vere komencis skribi multon de la kodo kiel speco de la bazo por Mac OS X kaj ĉiuj aliaj aĵoj, kaj tiel ĉi NS estas speco de ĉi bela legaco krii al unu el la unuaj firmaoj reen kiam Apple estis ĵus. Estas ĉie. Ni rigardu pli tuteca Objective-C ekzemplo. Jen mi estas interne de Xcode. Al preni tie, mi unue elŝutita Xcode de la App Store, malfermis ĝin, kaj poste mi supreniris tie por dosiero, super ĉi tie por nova, kaj tiam projekto. Post kiam mi fari tion mi havas ĉiujn tiujn eblojn de kion mi volas krei, kaj tiel ni rigardu tiujn eblojn poste, sed nur por ĉi tiu ekzemplo, ĉar ni ne vere tuj havos programo ankoraux, Mi venis ĉi tien, kaj mi diris Komando Linio Ilo, kaj ĉi tiu estas programo, kiun mi povus kuri al la komanda linio samkiel ni estis kuranta de C. Tiel estas kiel mi kreis ĉi tiun projekton, kaj nun mi estas tie ĉi, do ni unue rigardu tiun dosieron, kaj tiu devus aspekti bela familiara. Mi havas int nomo. Jen mia amiko argc, mia alia amiko argv. Kaj tiel ni povas vidi ke tiu estas la punkto de eniro por mia unua Objective-C apliko. Ĉi tie ni povas ignori tion por nun. Tio estas esence iu memoro mastrumado stuff ke vi ne faros vere iam devas maltrankviligi. Ni rigardu ĉi unua bloko tie. Ĉi tiu unua linio, se mi diros Studenta * alice = [[Studenta alloc] init] kio estas tio faras? Ĉi tiu unua studento tie, tio estas probable klaso. Ĉi tio ne estas klaso ke Apple skribis, sed estas klaso kiu mi skribis. La unua afero Mi volas fari estas mi volas destini spaco por nova lernanto, kaj tiam Mi volas pravalorizi, do ĉi tiu donas al mi tiu nova studento objekto, kaj mi provizon ĉi en variablo nomata Alice. Kien tiu klaso venis? Nu, ĉi tie en la maldekstra flanko tiuj estas ĉiuj la malsamaj dosieroj ene de mia projekto. Ni povas vidi ĉi tie mi havas Student.h kaj Student.m. La. H dosiero, memoras, kie mi rakontu pri cxiuj el la aĵoj kiu ekzistas ene de la klaso. Ni rigardu tion. Bone, ĉi tie ni havas ĉi @ interfaco, kaj ĉi diras ke tie venas la deklaroj de ĉiu kiu ekzistas ene mia klaso. Tiam mi havas dupunkto. Tiam mi havas ĉi NSObject afero. Ĉi dupunkto signifas ke posedajxo iom ni diskutis iom pli frue. Ĉi tio diras ĉiun NSObject povas fari kie NSObject estas ĉi klaso verkita de iu alia, ĉio ĉi NSObject povas fari mi volas povi fari tion. Dirante: NSObject tio signifas ke mi esence heredis tuta funcionalidad de alia klaso. Tio vere donis min tutan faskon da malsamaj metodoj kaj propraĵoj ke mi povas uzi. Cxi tie mi krei 2 propraĵoj. Tio signifas mia studento, se ĉi estis struct, tiuj estus la 2 aferoj interne de mia struct, do ĉiu studento havas nomon ke estas linio, kaj studento ankaŭ havas rangon, kiu estas int. Fine, cxi tie mi iros por krei metodon por mia lernanto. Mi vokis Mian metodo, initWithName, kaj ĝi prenas unu argumenton, kaj tiu argumento estas ĉeno, kaj mi donis al gxi la nomon. Nun ni rigardu kiom ni efektive implementado ĉi tiu klaso. Jen, nun mi estas interne de mia. M dosiero, m por efektivigo, mi supozas. Mi havas mian efektivigo, mia fino, kaj tie estas kie mi fakte difinanta kio initWithName faras. Mi havas initWithName, la nomo de mia parametro, kaj poste tiu estas kie mi efektive kreante studento, kaj tiel ĉi tiu estas iomete kripta, sed ĉi tiu estas speco de Boilerplate ke vi volas inkludi en vian constructores. Ĉi inicialización funkcio ĉi tie, initWithName, estas tipo de konstruilo. Vi esence konstruanta nova studento objekto kaj eble sendi iuj datumoj ene de ĝi. La unua afero Mi volas fari estas mi volas nomi init sur ĉi tiu super afero. Memoru ke kiam mi diris ĉi tien en la. H dosieron ke ĉiun NSObject havas studento ankaŭ havas. Tio signifas, kiam mi kreos studento kion mi ankaŭ bezonas fari estas Certigi ke la NSObject ke mi heredi ĉiuj kiuj datumojn de ankaŭ inicializado konvene. Kion mi devas diri estas ĉi tiu super fakte tuj raporti al la patro klaso ke mi heredi de, do mi volas certigi min pravalorizi ĉion mi depende antaŭ ol mi komencas provi uzi ĝin. Tiam se tiu inicializado ĝuste ĉi estas nur kiel diri se malloc ne revenis nula tiam mi povas komenci opcio iuj propraĵoj. En JavaScript kaj PHP ni ĉi ŝlosilvorto nomis tiun, kaj ĉi raportis al la nuna ekzemplo de klaso. En Objective-C Ni nomas tion mem. Kiam mi diras self.name, tio signifas ke la objekto Mi nur kreis kiam mi diris studento alloc init, ke tuj redonu al mi objekton. Tio signifas mi volas meti la nomon de tiu celo al kiom mi ĵus pasis in Ĝuste kiel en C, oni aliro membroj kun ĉi punkto, tiel self.name diras la nomo de la fakulo objekto nun tuj estos ajn vi ĵus pasis in Kaj tiel fine, mi povas redoni ĝin do mi reale preni ion. Demandoj? Okay, do ĉi mem = super init, se vi ne plene komprenas la heredaĵo stuff ne maltrankviliĝu. Nur scias ke se vi iam volas fari vian propran init metodo nur fari tion, kaj vi estos bona al iri. Yeah. >> [Studenta] Kion faras se mem meznombro? Tio signifas, kiam ni malloc ion ni ĉiam kontrolis se estis egala al nula, kaj se ĝi estis nula, tiam ni eliris. Ĉi tiu estas la sama afero, ĉar se tiu revenas nula, tiam ni probable tuj seg kulpo se ni komencos klopodi manipuli ĝin. Tio estas nia studenta klaso. Tio signifas ke ni povas pravalorizi niaj lernantoj en unu el du manieroj. Se mi diras studento alloc init Mi ne uzas tiu metodo, kiun mi ĵus skribis, kaj anstataŭ mi povas simple diri alice.name, kaj nun mi iros al starigis tiu bieno nomo. Simile, se mi volas uzi tiun initWithName metodo Mi povas diri simple alloc, kaj poste anstataŭ diri init Mi iros por voki tiu metodo, kiun mi ĵus kreis, kaj mi tuj pasos en Bob. Je ĉi tiu punkto, tiu objekto Bob havas nomon egala al Bob. Konsentite, cxi tie mi uzas tiun NSMutableArray ke ni rigardis antaŭe. Mi atribuo space.Then Mi inicializar nova tabelo. Mi tuj aldonos 2 aĵoj al ĝi. Tiu tabelo nun tenas studento celoj. Rimarku ke nenie mi ja devas diri ĉi tio estas tabelo de studentoj. Mi diris, ke ĝi estas tabelo, periodo. Tiam mi povas meti ajn ene de ĝi ke mi volas. Jen mi havas 2 celojn. Fine, mi havas alian celon tie, ĉi TF. Super tie en TF.h esence la sama aĵo. Mi heredi el NSObject, kaj por la vojo, kiam vi kreas klasoj ĉi estas ĉiuj faris al vi, tian interfaco Boilerplate. Ĝi havas proprieton de studentoj. Mi havas kelkajn metodojn tie kiuj ne vere tutan multe, kaj por ke signifas, post kiam mi kreis ĉi TF objekto Mi povas voki tiu metodo grado sur ĝi kiel ĉi tio. Demandojn sur Objective-C sintakso antaŭ ol ni komencos movi en iom pli interesa apps disvolviĝo stuff? Konsentite, do ni vere faras iPhone programon. La kerno klasoj kiuj vi estos uzanta ene de via iPhone programo nomiĝas vidpunkto controladores, kaj cele controlador esence reprezentas unuopa ekrano ene de via programo, do se mi sur la muziko programo, ekzemple, unu vido controlador povus reprezenti la vido, en kiu mi vidi ĉiujn kantojn de mia iPhone. Alia vido controlador povis esti kiam mi premas kanton kaj komenci ludi ĝin aŭ kiel mi taladrar malsupren en artistoj. Ĉiu el tiuj malsamaj ekranoj povus esti prezentita kiel malsama vidpunkto adaptilo, kaj cele controlador estas vere ĝuste klaso kiu diras ke tiu ekrano funkcias. Aĵoj ene de vido adaptilo, ni havos propraĵoj, tiel aĵoj kiel butono tuj estos propraĵo de nia vido adaptilo. Ni ankaŭ havos metodoj, kaj tiuj estas esence evento manipuladores. Ĉi tiu metodo diras kiam vi premas tiun butonon Mi volas fari ion, kaj fine, denove, nin tuj uzos ĉi mem ŝlosilvorto por aliri la nuna kazo. Konstrui interfacojn en iOS estas fakte vere, vere facila. Ili havas tiun belan treni kaj guto interfaco nomita Interfaco Builder, kaj la 2 ĉefaj konceptoj kiuj drato vian Objective-C al Interfaco Builder estas IBOutlet kaj IBAction. An IBOutlet simple diras ke se vi rakontos proprieto kiu estas butono, kaj vi volas enganchar ĝin al iu en via reala UI, vi tuj diras ke estas eliro. Simile, se vi volas reprezenti eventa traktilo tiam vi tuj diras ke estas ago. Por reale telegramon tiun grafikan reprezenton kaj via kodo estas vere, vere simpla. Se vi volas ligi al IBOutlet, ĉiuj vi devas fari estas kontrolas click, kaj ni vidos ekzemplon de tiu vere rapida. Vi kontroli klaku kie diras Montri Controller. Vi tuj treni en la interfaco, aŭ inverse, se vi volas conectarse okazaĵo traktilo vi tuj treni de la interfaco en la alia direkto. Ni rigardu vere simpla iOS ekzemplo. Ni kreu novan projekton. Mi tuj venos ĉi tien por Apliko, kaj mi tuj klaku Single Montri Apliko. Mi tuj klaku proksima. Mi donos mian projekton nomon. Mi nomas ĝin Saluton. Interese, Apple supozas ke vi kreis produkto por ke vi povas vendi ĝin kaj ili povas gajni monon. Cxi tie mi intencas diri ke ĉi tio estas iPhone programon. Vi povas krei iPad app, aŭ se vi volas krei unu el tiuj apps kiu apogas ambaŭ aparatoj povas fari tion ankaŭ. Tio estas kion vi volas, ke via checkmarks por simili. Vi volas uzi storyboards, kiujn ni vidos poste, kaj vi certe volas uzi aŭtomatan referenco kalkula, kiu estas bela trajto kiu malhelpas vin de devi diri malloc kaj libera. Krom se vi volas nomi malloc kaj libera, mi lasus ĉi antaŭŝirmtukon. Mi klaku sekva, kaj fine, ĉi tiu tuj demandas min, kie mi volas savi ĝin. Mi batis krei, kaj tie ni iru. Mi kreis novan projekton. Super tie maldekstre estas ĉiuj dosieroj, kiuj estas ene de mia projekto, kaj rimarki ke mi havas tutan faskon, kaj mi eĉ ne fari ion. IOS estas granda. Ekzemple, tie ĉi ViewController.h, ĉi tiu tuj reprezenti mia unua vido adaptilo, do la unua ekrano interne de mia programo. Nun ni scias kio estas tiu diras. Ni diris mi nomante tiun klason ViewController, kaj ViewController faras ĉion, kion oni UIViewController faras, kaj ĉi, denove, estas iu klaso kiuj Apple skribis kiu faras multan oportuna ajxojn ni kiel montras la ekranon. Jen kie mi povas vere komenci difini kio miaopinie controlador faras, kaj tio rezultas, ke mi vere ne bezonas iu ajn el ĉi tio. Ĉi tiu estas Boilerplate kodo ke Apple donas min senpage. Mi faris bezonas tiu unua linio, alie mi ne havas klason, do ni povas liveri de tiu kaj forigi ĉi. Okay, do ĉi tiu estas mia malplena ekrano. Nun ni alklaku ĉi MainStoryboard.storyboard, kaj ĉi tiu estas kie komencas akiri interesa. Ĉi tio reprezentas la unuan ekranon de mia programo. Se mi volas aldoni butonon, en HTML Mi devis krei butonon etikedo. En Android vi devas krei butonon etikedo, sed en iOS se Mi nur malsupreniris tien al la fundo dekstre kaj se mi alklaku ĉi 3rd ĉi tie kie diras Celoj, kaj mi povas rulumi malsupren, alie mi povas ekserĉi por butonon. Kaj vidu, butono, do se mi vere treni kaj faligi tiun rajton tie, Mi ĵus aldonis butonon al ĉi tiu ekrano de mia programo. Se mi volas ŝanĝi la tekston, mi povas duobla klaku ĝin, diri ion forlogante kiel "Premu Min." Okay, nun se mi kuros ĉi tiun programon, do ni kompili ĝin, tiel por ruligi ĝin mi premas la verko butonon en la supre maldekstre, kaj ne estas mia programo. Mi faris nenion, kaj mi ricevis agrablan rigardante iPhone programon. Se mi volas halti ĝin, vi povas alklaki la halto butono ĉar ĝi estas pli amuza. Diru, ke mi vere volas ion okazi kiam mi premas tiun butonon. Fari tion kion mi devas fari estas mi bezonas krei nova eventa traktilo aŭ ago. Tio signifas, ke mi devas krei iun metodon, ke mi volas esti nomata kiam mi premas la butonon, do ni kreos novan metodon. Mi estas ene de ViewController.h. Mi bezonas diri ke metodo ekzistas. Mi bezonas streketo unue ĉar mi tuj iros nomante tion en la vido adaptilo. Mi bezonas doni tiun tipo. La tipo de ĉi tio estos tiom IBAction afero, kiun ni vidis antaŭe. Ĉi tiu estas eventa traktilo, do tuj reveni al IBAction, kaj ĉi tiu estas aludo al Xcode diri ke ĉi tio estas iu volas telegramon ion. Mi povas doni al ĝi nomon, kiel buttonPressed, punktokomo. Nun mi deklaras novan metodon interne de mia klaso. Mi diris tiun metodon devas ekzisti. Nun ni venos en ViewController.m, kaj diru kion tiu metodo povas fari. Se mi ektajpu, ekzemple, (void) buttonPressed avizo Xcode estas vere belaj kaj autocompletes por mi. Tio estas vere mirinda. Rimarku tie ene de la. M dosiero mi povas ankaŭ diri malplena, kaj ĉi tio estas ĉar tiu IBAction ne reale tipo. Ĝi estas fakte hashtag difinita ie esti malplena, kaj denove, ĉi tiu estas nur aludo al Xcode kiu diras Mi volas ĉi esti eventa traktilo, kaj ni vidos kial en nur dua. Kiam tiun butonon estas premita Mi faros ion ĝena kiel montras ŝprucfenestron. Por fari tion mi povas krei novan petskribon de ĉi tiu klaso nomis UIAlertView, kaj ĉi tiu estas klaso ke Apple skribis ke tuj montri tedas popups. Ni nomas tion ŝprucfenestron garde, kaj mi havas 2 paŝoj, memoru, por krei ĉi tiun celon. La unua afero Mi bezonas fari estas atribui spaco. Mi volas UIAlertView. Mi volas destini spaco. Tiu estas mia unua metodo. Mia sekva maniero estas mi volas pravalorizi ĝin, kaj tial mi havas ĉi granda, longa metodo nomata initWithTitle. Tio esence tuj kontroli kion ĉi ŝprucfenestron diras. La titolo de mia ŝprucfenestron povas esti saluton. La mesaĝo de tiu ŝprucfenestron povas esti "Tio estas iOS." Delegita afero, mi ne scias kion tio estas. Diru ĝi estas nenio. Nun la butono kiu tuj aperos povas diri ion kiel "certa estas," kaj mi ne vere volas ajna alia butonoj, do ni forviŝi tion kaj fermi la krampo. Konsentite, mi kreis ekstran unu. Tie ni iru. Jen kiel mi povas krei novan fenestron. Se mi volas reale montras la ŝprucfenestron mi volas alvoki show metodo. Por fari tion mi povas diri garde kaj programo, kaj denove, autocomplete estis super agrabla. Se mi forgesis kion tio estis, se mi nur tajpis en s, Mi povas rulumi tra ĉi tie por malkovri kio estis, kaj ĝi filtras bele. Nun mi kreis tiun novan fenestron. Ni revenos al kio delegito signifas poste, kaj nun mi volas diri ke mi volas ke tiu metodo esti pafitaj kiam mi premas la butonon, do mi tuj revenos al mia storyboard, kaj mi volas nun kunigi ĉi IBAction. La unua kiu volas fari estas klaki la butonon. Kiam mi premas tiun butonon Mi volas ion okazos. Mi ne tuj premadu kontrolo. Mi tuj alklaki kaj treni de la butonon al pli tie kie diras Montri Controller. Ni povas vidi ke ĝi bele lumigas supren. Se mi lasis iri kun mia muso Mi nun havas tiun fenestron super tie kie mi havas iujn eblojn. Unu el tiuj estas la eventoj, ke mi povas registriĝi. Ĉi tiuj estas ĉiuj el tiuj metodoj mi deklaris en mia h dosiero IBActions. Tiel estas kiel Xcode scias kion devus aperi en tiu malgranda listo, por ke estas nur aludo. Se mi alklaku butonon premita, mi nun registris la eventa traktilo. En JavaScript ni devis diri ke mi havas iom da kodo kiu registris la eventa traktilo. En Objective-C estis vere tiel facila. Se mi kuras ĉi denove nun kiam mi premas la butonon mia eventa traktilo tuj pafi, kaj mi tuj get this ŝprucfenestron. Super, super simplan tie. Se vi iam volis vidi ĉiujn eventojn kiuj okazas esti registrita sur komponanto se mi alklaku tiun butonon kaj mi venis ĉi tien al la dekstra flanko unue vi povas vidi ĉi tie mi povas fari aferojn kiel la tipo de la butono, do se vi volas unu el tiuj mi aŭ de la add kontakto butono aŭ kion ajn. Se mi volas vidi ĉiujn eventojn, kiuj estas sur tiun butonon se mi venos tuta vojo ĉi tien al la dekstra flanko ni povas vidi tie en la okazaĵoj Mi havas ĉiujn tiujn malsamaj okazaĵoj. Mi povas premi la butonon, kiam mi lasis iri de la butono, kiam mi duobligi krano aŭ kion ajn, kaj la unu mi nur registris estas ĉi evento nomita Touch Supren Ene, kaj ĉi diras ke tuj kiam mia fingro elspezas la butono tiu evento tuj fajro, kaj tio estas ĝuste kion ĵus okazis. Tio estas speco de la defaŭlta butono premita evento. Demandojn ĝis nun? Okay, jen kiel ni povas starti al telegramon aferojn en nia kodo en aferoj ene de nia interfaco. Memoru ni unue devis fari estis trovi la kodon, kaj poste ni telegramis ĝis la interfaco por la kodo, kaj tie estas nia unua programon. Konsentite, kiu estis vere malvarmeta, kaj ni kreis tiun ĉi butonon. Kio se ni ne volas havi por krei aron da propraĵoj reprezenti tiuj butonoj? Ekzemple, en Tic Tac Toe mi havas 9 butonoj, kaj tio estus super, super tedas devos treni kaj faligi 9 fojoj aŭ ĉu mi devis fari Tic Tac Toe kun 81 anstataŭ 9 kaj mi devis treni kaj faligi 81 fojojn, kaj tio estas lama. Kion ni povas fari anstataŭ estas multe kiel HTML kiam ni havis aĵojn kiel IDs kaj nomoj kaj ni povas serĉi aĵoj per sia ID, ekzistas simila nocio en iOS nomata etikedoj. Al etikedo estas simple solaj nombraj ensalutilo por komponanto. Se mi diras ĉi havas etikedo de 0, ekzemple, se mi krei butonon kaj doni etikedo de 0, kaj ni vidos kiel fari tion en nur dua, se mi volas ke butono mi povas simple diri ke mi volas nomi la viewWithTag metodo en la objekto tien, la self.view, kiu reprezentas la aktualan ekranon, ekzemple. Se mi nomas tion viewWithTag metodo, mi iros tiri reen al la butono kun etikedo 0. Ni rigardu tion per konstruaĵo Tic Tac Toe. Unue, ĉi tiu estas mia storyboard. Mi kreis ĉi tiujn 10 UI butonoj. Rimarku ili ĉiuj havas la saman grandecon. Se mi premas unu el tiuj kaj mi revenos tien sur ĉi dekstra flanko vi vidos mi ĝustigis la tiparon ĉi tie, do mi faris la tiparo iomete pli granda, sed kion mi ankaux faris estis mi starigis ĉi etikedo. Mi diris ke ĉi tiu havas etikedo de 1, kaj tio estas la supro maldekstro. Nun, se mi klaku alia butono, kiel ĉi tiu dua ĉi tie, nun vi vidos, ke mia etikedo estas 2. Ĉiu el tiuj butonoj nur havas unika etikedo, kaj tiel ĉi tio poste kiom mi iros por komenci interagante kun mia programo. Tio estas ĉio ene de unu vido adaptilo, sed jen estas, kion ni havas. Ni havas 3 propraĵoj tie. La unua kaj lasta tuj reprezentas la staton de mia estraro. Esence tiu unua estas tabelo reprezenti kie la x kaj Os estas. Ĉi tiu alia ĉi tie diras al ni, kies vico estas. Vi rimarkos, ke mi ankaŭ havas ĉi tiujn aĵojn tie. Antaŭ kiam ni deklaris propraĵoj ni donis ilin gloraj kaj tipon. Ni povas ankaŭ doni al ili kelkajn pliajn informojn ĉi tie. Ĉi tiu unua diras nonatomic, kaj kion tiu diras estas esence nur unu afero iam esti provante atingi tiun variablon samtempe. Vi povus fari pli kompleksaj aplikaĵoj kiuj estas mult-threaded, kaj tiel denove en Scratch ni havis malsamajn fadenoj, kaj malsamaj sprites povus fari malsamajn aferojn samtempe. Se tio ne estas la kazo, kiu estas ne en tio kion ni estos rigardante, se ni dirus nonatomic ĝi estas vere tuj faros tion iomete pli rapida. Ni havas ankaŭ tion nomis atribuas, fortaj, aŭ malforta. Ĉi atribui nur diras ke tiu estas normo tipo. Tio ne estas objekto aŭ puntero ĉar ĉi estas nur bool, tiel bool estas konstruita en Objective-C. Ĉi tio diras ne provas fari ion fantazio kun indikoj tie. Ĝi estas regula malnova scaler. Fortaj kaj malfortaj, ĉi malforta diras ke efektive Mi volas ke ĉi tio montras ion en la vido adaptilo. Mi ne tuj reale atribui aŭ init ĉi mi mem. La interfaco konstruanto, kiam mi kuras la app, tuj manipuli cxiuj inicialización. Se mi diras malforta, kiu diras iun alian tuj estos krei ĉi. Se mi diras forta, ĉi tiu diras, ke mi tuj estos la unu ke tio kreas tiun tabulon objekto, kaj tiel tie mi havas iom pli metodoj tie, ekzemple, ago por kiam la nova ludo butono estas premita, ago cxar kiam iu el la aliaj butonoj premitaj, kaj tiel plu. Ni ne eniri tro multa de la logiko de Tic Tac Toe, kvankam estas tre ekscita, sed ni rigardu iuj el la aĵoj kiujn ni povas fari ene de iOS. Ĉi nova ludo metodo tuj estos pafis kiam mi premas la nova ludo butonon. Por enganchar ke ĝis mi simple venu al mia storyboard. Mi alklakis nova ludo. Se mi revenos tien dekstre mi vidas ke Tuŝu Supren Ene estas telegramis al la newGame metodo. Tial ĉi tiu tuj get pafis. La newGame metodo tuj faros iu aro supren. Oni intencas diri mi volas ke vi certe la stato de la tabulo. Tiu estas bela maniero de mutable tabeloj. Tiu tuj diri ke estas nun X la vico, kaj nun mi iros por utiligi ĉi viewWithTag afero. Mi scias ke mia butonoj havas la etikedoj 1-9, kaj tio estas io, kion mi arbitre plukis. Se mi volas agordi la teksto de ĉiu butonon por esti malplena ĉar mi ĵus komencis novan ludon kaj mi ne volas X aŭ Os resti super mi povas fari ĉi tion. Mi povas diri ke mi volas la vido kun la etikedo, 1, 2, 3, 4 kaj tiel plu. Tio tiri malsama butonon ĉiufoje. Jen mi tuj ĵetis ĝin al UIButton. Samkiel ni povus jxetu ints al flosas kaj inverse ĉi diras, ke mi volas jxetu ĉi al UIButton. Tio signifas la tipo de ĉi estos UIButton * pro punteros, sed ne zorgu, ili estas ne timigas plu. Iam mi havas tiun butonon mi iros por voki metodon sur ĝi. Tiu metodo nomiĝas setTitle forState, kaj tiel ĉi diras Mi volas meti la tekston de la butono al esti la malplena linio, kaj mi volas ke ĝi estu la malplena linio, kiam ĝi ne premis. Se Mi uzas tiun metodon, mi povas ŝanĝi la tekston de la butonon tuj kiam iu batas ĝi, sed ni volas diri kiam la butono estas nur sidas tie Mi volas la teksto esti malplena. Fine, ni iras al pravalorizi miaj tabulo, kaj mi tuj diros ke ĉiu estas aktuale je 0, tial ĉi tiu forumaro membroj neŝanĝeblaj estas ŝanĝebla tabelo, kio signifas mi povas alvoki addObject metodo kaj nur 0 ene de ĝi. Tio estas kio okazas kiam mi krei novan ludon. Ni rigardu alian. Ĉi tiu metodo tie estas la IBAction ke tuj estos premata ĉiufoje unu el tiuj kvadratoj estas premita. Nun ni havas iujn Tic Tac Toe logiko tie. Ni elŝeligi kies vico estas, kaj surbaze de tiu ni ĉu agordi X aŭ O, sed ni rimarkas ke ni reutilizando ĉi sama eventa traktilo por ĉiu sola unu el tiuj butonoj. Tio signifas ke mi ne havas metodon por la supre maldekstre butonon, malsama maniero por la fundo dekstra butono, kvankam mi povus havi faris tion. Tio ne vere estas bona dezajno. Kion mi faras tie ĉi estas mi fakte tuj determini kion la etikedo de la butono kiu premis estas. Vi rimarkos ke ĉi verko metodo prenas unu argumento. Ĝi estas nomita sendinto, kaj kio sendinto estas estas sendinto tuj reprezenti ĝuste kio estis farita agado sur. Se mi premi butonon, ĉi sendinto tuj estos ke UIButton ke mi enŝovis, do tio signifas ke tiu UIButton havas etikedo ĉar mi kreis etikedon. Se mi volas atingi la etikedo mi povas simple diri Mi volas la etikedo de la sendinto, kaj denove, mi ĵus distribuita la rolo ĝin al UIButton. Mi hazarde scias ke la sendinto estos UIButton. Ĝi ne ĉiam devas esti UIButton. Mi povus, ekzemple, registri la sama okazaĵo traktilo  dum unu por butonon, unu kiel slider. En ĉi tiu kazo, mi scias ke ili estas ĉiuj butonoj, do mi tuj diros Mi volas ĉi esti butonon, kaj tiam mi povos atingi la etikedo, kaj el la etikedo mi nun scias, kie mi estas ene de la tabulo. Tiam mi povas simple starigis ĉu la X aŭ la O, povas klaki la turno, kontroli kiu gajnis, kaj tiel plu. Demandojn en ĉi ĝis nun? Konsentite, la tuta kodo ni afiŝis online-ni ne volas eniri tro multe de la Tic Tac Toe logiko, sed nun vi povas vidi, ke vere ĉiuj ni faras estas ni looping super ĉi tabelo, do ni havos kelkajn por maŝojn tie, kaj ni simple kompari vidi do ni havas partion en ĉiuj vicoj, turniro en kolumno aŭ io kiel tio. Por reale kuri ĉi tiun programon, se mi tap sur unu el tiuj butonoj kiun ili ludas metodo estis pafita, do tio signifas Mi nur metis la butonon esti X, do nun tiun butonon estos ho, kaj tiel plu, kaj por ke estas kiel ni komencas interagi kun ĉi sola paĝo programon. Ni afiŝi la kodon, do bonvolu peruse ke, sed ni nun parolas pri iu apps kiuj estas pli ol nur unu paĝo. Kiel ekscita kiel Tic Tac Toe estis, multe da apps ene de iOS estas speco de tiuj borilo malsupren aĵojn kun multnombraj ekranoj. La unua koncepto ke estas bezono paroli estas protokoloj, kaj protokolo estas simple aro de metodoj ke vi povas promesi al difini. Se mi kreos tiu nova protokolo kun 2 metodoj, tiu unua, se la reveno tipo estas malplena, mi nomis ĝin foo. Ĝi prenas neniun argumenton. Mi havas alian metodon. Ĝi redonas int. Mi vokis ĝin bari, kaj ĝi prenas unu argumento. Ĉiuj ĉi protokolo estas kiu nomas SomeProtocol tien, ĉi estas aro de aĵoj ke iu povas apliki. Mi ne ene de ĉi protokolo diris kion foo faras. Anstataŭe, mi nur diras al vi povus difini foo se vi volas. Se mi kreas view controlador aŭ kreante klason Mi povas ene de tiu klaso promeso apliki kelkaj el tiuj manieroj, tiel ekzemple, se diri ĉi nun diras mi faras promeson al vi, ke interne de tiu vidpunkto controlador klaso mi havos difinojn por ambaŭ foo kaj trinkejo. Kial tiom utila? Multaj de komponantoj ene de iOS utiligi tiun dezajno mastro vokis delegacio, kaj kion delegacio diras estas ke, ekzemple, se mi havas teksta kadro kaj tie estas kelkaj okazaĵoj kiuj povus esti registrita interne de mia teksto skatolo, anstataŭ krei apartajn eventojn kion mi povas fari estas mi povas diri la delegita de ĉi tiu teksto skatolo estos iu celo. Kiam mi diras ke ĉi tiu estas delegito nun ke signifas, ke ĉiufoje kiam iu evento estus pafitaj en la teksta kadro prefere ol, havante registri ĝin aŭ io simila ĝi estas nur irante voki metodon en la delegita. Ekzemple, ene de mia teksto skatolo mi havas metodon por kiam mi premas ke faris butonon malsupre dekstre, kaj tiel anstataŭ registri eventa traktilo, kion mi povas diri estas teksto skatolo, tie estas objekto, kiun mi volas ke vi nomas metodo en ĉiufoje iu premas la farita butonon, kaj tio signifas ke tiu celo devas apliki iujn protokolo kiu diras mi promesas al difini kiuj faris butono ago, ĉar se ĝi ne difini tiu metodo kaj vi gazetaro farita, tiam tuj estos konfuza. Ni rigardu ekzemplon. Jen Mi simple havas unu teksta kadro, kaj unu el la ecoj de ĉi tiu teksto skatolo tien sur ĉi dekstra flanko estas la delegito. Tiu estas propraĵo de la klaso. Kion mi faris tie estas mi kontroli klakis, kaj mi trenis de ĉi loko sur ĉi tie al la vidpunkto adaptilo, kaj kiu diras nun la delegita de ĉi tiu teksto skatolo tuj estos la vido adaptilo. Tio signifas ke kiam iuj agoj okazas, prefere ol registri aparta okazaĵo manipuladores Mi volas ke vi sendu ilin al la delegita. Nun ni rigardu mian vidon adaptilo. Ene de la. H dosieron mi faris promeson. Mi promesis realigi iujn metodojn ene de tiu protokolo vokis UITextFieldDelegate, kaj denove, ĉi tiu estas nur iuj listo de iuj aĵoj kiuj mi povas elekti por apliki. Se mi venos ĉi tie en mia. M dosiero, mi implementado unu tia metodo. Mi nomis ĝin textFieldShouldReturn ĉar tio kio estis nomita ene de la protokolo. Kaj nun kiam mi premas la butonon farita ene de tiu teksto kampo ĉi tiu estas kio okazas al get nomita, do mi ne registris okazaĵo traktilo. Mi konektis la delegito, kaj kiam ajn tiu okazaĵo estas pafita ĉi tiu estas la metodo kiu get nomita, do se mi venos ĉi tien al mia storyboard kaj ruli ĝin- dum ke tio ŝarĝo povas vidi kio estas tiu faras. Sur mia ekrano mi havas 2 aĵoj. Mi havas ĉi tiun tekston kampo, kaj mi havas ĉi etikedo. Mi simple dirante Mi volas la teksto de ĉi etikedo esti egala al kiom la uzanto tajpas en internon de la teksto kampo. Ĉi sekva linio tie estas simple metodo kiu mi vokas en la teksto kampo kiu diras mi volas ke vi kasxu la klavaro. Tiu estas ĝuste la arbitra metodo kiu Apple elektis. Denove, antaŭ ol mi faris ĉion, kion mi devis telegramon ĉio, do mi unue venis ĉi tien. El la vidpunkto controlador mi treni super la teksta kadro. Mi lasas iri, kaj mi povas vidi ĉi tie ke mi povas fari ĉi la tekston kampo proprieto ekde ĉi tien en la vido controlador mi difinis proprieto ke estas IBOutlet de teksto kampo. Ĉi tio diras, ke mi povas telegramon ĉi tiu propraĵo supren al teksto kampo en mia UI. Nun kiam mi premas tio mi povas ektajpu. Nun, se mi premas la faritaj butonon ĉi tuj pafi evento, kiun mi povas nun respondi al. Neniu evento manipuladores. Tiel estas kiel mi ĵus respondis al tiu farita butonon. Sencon? Ĉi tio ne estas dezajno pattern that-vi eble neniam trovos vin mem krei vian propran protokolon, sed nur scias, ke iuj malsamaj iOS komponantoj registri eventoj en malsamaj manieroj. Butonoj, ekzemple, uzi tiujn IBActions. Teksto kampoj, aliflanke, tuj uzos delegitoj. Ni povas vidi kaj vi povas rigardi ĉiujn ke ĝis interne de la dokumentado. Parenteze, estas reale ton de UI stuff konstruita en iOS por vi, tiel ekzemple, la vojo kiun mi faris, ke oni dirus farita ĉe la malsupro dekstra estas mi elektis tiun tekston kampo. Mi venis ĉi tien. Mi scrolled malsupren iom reveni ŝlosilo, kaj mi povas efektive fari ĉi tutan faskon da aferoj, kiel se mi volas ke diri kriz nomas anstataŭ mi povas fari tion, kio estas tute hazarda, kaj mi ne scias kial estas enkonstruita en kriz alvoko butonon, sed tie, diras kriz voku vere malgrandaj literoj. Tie vi iros. Definitive esplori ĉiujn el tiuj malsamaj ebloj en iOS. Demandojn sur delegitoj? Denove, nur interesa dezajno ŝablono kiun ci devus konscii pri. Konsentite, ni sekva rigardu tablo opiniojn. Tabulo vidpunkto estas esence, ke listo de artikoloj kiuj estas en la tuta placo en iOS. Kiam vi flipping tra ĉiuj viaj kontaktoj, vi rigardas la opcio paĝo, kaj tia listo de aferoj nomiĝas tablo vido. Implementando tablo vido en iOS estas sufiĉe simpla. Anstataŭ fari klaso kiu desciende de tiu UIViewController kiel ni faris antaux ni simple devas eldiri anstataŭ ĉiun UIViewController tio mi volas fari, Mi diras ĉiun UITableViewController tio mi volas fari, por ke simple aldonas plian aĵoj kiuj estas plene farita por ni. Ni bezonas fari tre malmulta por esence spacplenigaj ene de la tablo. Por montri tablo mi bezonas por respondi kelkajn demandojn. La unua demando mi bezonas por respondi estas kiom da sekcioj estas en la tabulo? Kiam vi flipping tra viaj kontaktoj programo vi rimarkos ke ĝi estas speco de organizita de la mezuro, tiam vi havas la Bs, kaj vi havas tiun malgrandan sub kaploko. Ĉiu el tiuj nomiĝas sekcio. Vi povas aŭ ne bezonas tiujn. La unua kiu bezonas fari estas apliki metodon vokis tableView: numberOfSectionsInTableView. Tio simple revenas kiom sekcioj havas, tiel ĉi povus diri reveni unu se vi havas unu grandan tablon vido. La sekva demando kiu iOS bezonas scii estas kiom da vicoj vi havas? Ekzemple, vi flipping tra tablo vido. Vi havas fiksan nombro de kantoj vi rigardas aŭ fiksa nombro de kontaktoj. Se vi estas mi, kompreneble, ne ke multaj, kaj por ke estas kiel iOS scias kiom da ĉeloj por montri. Denove, tio povus diri iun kiel reveno 3. Mia tablo view havas 3 vicoj. Fine, iOS bezonas scii kion ĉiu ĉelo similas, do kio ĝi estas vere tuj fari estas nomas tiun metodon cxi tie, ĉi tableView: cellForRowAtIndexPath. Ĝi tuj nomas tiun metodon en ĉiu unuopa ĉelo ene de via tablo. Kiel ĝi scias kiom da fojoj nomi ĝin? Nu, vi rakontis ĝin ene de la numero de vicoj en sekcio. Ni tuj nomas tion sur ĉiu el niaj ĉeloj, kaj ene de ĉi tio estas, kie vi povas reale fari aferojn kiel starigis la teksto aŭ diri al vi kion tio iom blua butono ĉe la dekstra flanko faras. La mastro por atingi tiujn ĉelojn, ni tuj uzas tiun metodon vokis dequeueReusableCellWithIdentifier. Objective-C estas vere tre bone konata pro la ridinda longo de lia metodo nomoj, kaj ĉi tiu estas vere bela kazo en punkto ekzemplo. Kio ĉi metodo faras estas ĉi nur diras mi volas ke vi donu al mi ĉelo. Nur iOS afero. Se vi havas iun kiel 100.000 kantoj sur via iPod kio iOS ne volas fari estas atribui 100.000 ĉeloj, ĉar se vi estas ĉe la supro de via listo, vi vere bezonas rezervi memoron por la ĉelo kiu estas 99.000 vicoj malsupren? Ne, ĉar kiel vi movo vi povas ia destini kiel vi iros kune. Ĉi tiu estas farita por vi. Vi ne bezonas zorgi pri ĉio, kion stultan agadon stuff. Ĉiuj vi diras estas vi nomas tiun metodon dequeueReusableCellWithIdentifier, kaj ĉi tio diras, estas bone, se vi bezonas ilin tuj krei novajn ĉelo por vi. Sed se vi estas sur la fundo de la tablo kaj vi jam asignitaj iuj ĉeloj ĉe la supro de la tablo, ke vi vere ne tuj bezonos aùton frue Mi tuj donos al vi unu el tiuj reen anstataŭ atribui nova, kaj tiel ĉi tiu estas bona agado maltrankvilo. Vi ne devas atribui la ĉeloj mem. Tio tuj donas vin ĉelo. Oni tuj revenos al vi ĉelo objekto. Kiam vi havas la ĉelo objekto povas fari aferojn al ĝi. Vi povas agordi la teksto de la ĉelo kun ĉi tiu propraĵo nomata teksto stampo. Vi povas aldoni ke sago dekstre aŭ iu alia hazarda stuff kun tiu alia propraĵo nomata accessoryType, kaj tiel plu kaj tiel plu. Ni rigardu efektive apliki tablo view nun. Kiam mi kreis ĉi tiun projekton anstataŭ diri sola vido apliko mi fakte venis ĉi tien al sinjoro-detalo apliko, kaj tiel esence ĉi tiu korespondas al la poŝto programo sur la iPad kun la tablo vido sur la maldekstra kaj tiam la enhavon dekstre. En la iPod aŭ iPhone ĉi tuj respondas al sola tablo vido. Tie estas kie mi atingis mian malfermilo kodo. Ni unue rigardu la storyboard. Ĉio ĉi estis farita por mi, esence kreita. Ĉi navigado trinkejo montris al mi kion ekzemplo ĉelo povus aspekti, kaj mi povas duobla klaku ĉi, ŝanĝi la titolon. Ajna alia UI zorgojn Mi povas manipuli tie. La kapdosiero aspektas vere simpla. Anstataŭ diri ĉi estas UIViewController ni nun dirante tio estas TableViewController, do ni scias, ke ni volas nomi tiujn tablo metodoj. Sekva mi volas krei proprieto kiu tuj reprezenti la aferojn interne de mia tablo. Ĉi tiu tabelo tuj arbitre montri listo de frukto, do mi devas krei iu tabelo en kiu mi povas enmeti frukton. Ene de mia efektivigo dosiero la unua afero, kiun mi volas fari Estas mi volas certigi min pravalorizi ĉi tabelo. Mi diris alloc init, kreita mia frukto tabelo, kaj mi aldonas 4 aĵoj al ĝi, unu el kiuj estas multe pli polemika ol la aliaj 3. Kaj nun mi havas aron de amplekso 4. Ni skuante ĝin en CS50. Mi nun havas aron de amplekso 4. Nun mi iros por komenci respondi tiujn demandojn, kaj fakte, kiam mi kreis ĉi tiun programon ĉio ĉi estis jam faris por mi. Mi ne devis tajpi el la nombro de sekcioj en tabelo vido. Estis jam ekzistas, kaj mi plenigas de spacoj. Kiom da sekcioj mi havas? Unu. Ĉiuj faris. Kiom da vicoj mi havas? Nu, mi havas unu vicon por ĉiu frukto, do ĉi grafo estas propraĵo de neniu tabelo kiu diras kiom granda ĝi estas? Tio estas, kiom da vicoj mi havas. Fine, mi bezonas diri kion signifas ĉiu ĉelo aspektas? Mi intencis diri dequeueReusableCellWithIdentifier. Denove, ĉi estis jam skribita por mi. Mi ne devis fari ĉi mi mem, kaj mi volas reiri ĉi tiu ĉelo en ĉi loko. Memoru ke ni alvokas tiun saman metodon en ĉiu unuopa ĉelo, kaj ĉi tiu argumento tie, ĉi indexPath argumento, diras kion vico mi in Se mi diras indexPath.row cxi tie ĉi tio estos 0, tiam ĝi estos esti 1, tiam ĝi estos 2, kaj ĉi tio estas tiel Mi scias kio ĉelo Mi aktuale montri. Mi volas meti la tekston de la ĉelo uzante ĉi textLabel proprieto iri interne mia frukto tabelo kaj akiri la objekto responda al ĉiu vico. Se ĉi tiu estas ĉeno, mi nun opcio la teksto proprieto al ĉeno. Mi povas fari unu alia afero. Mi povas ankaŭ registri okazaĵo traktilo sur ĉiu de la ĉeloj, do kiam mi tap ĉiu de tiuj ĉeloj ĉi didSelectRowAtIndexPath, ĉi tiu tuj estos nomata por mi, tiel simple per difinanta tio mi povas nun manipuli kio okazas kiam vi tap ĉelo, kaj denove, ni pasas en kiu ĉelo estis frapetis por ke ni povas reuzi tiun saman eventa traktilo por ĉiuj niaj ĉeloj. Denove, tio estas io iOS faras por mi. Ni montros alian tedas ŝprucfenestron kiuj simple diras vi prenas ion kie ke io tuj estos la vico objekto. Kiam mi kuras ĉi, mi iros al havi tiun belan tablon vido kun unu linio por ĉiu el tiuj fruktoj, kaj se mi tap unu ĝi diras al mi kio okazis. Sencon? Ni konstruu iomete pli kompleksa de app, kiom klakante vi plukis tomato estas. La belan parton pri la storyboarding Estas ĝi estas ne nur helpos nin dezajno ekranoj individue, ĝi estas ankaŭ helpos al ni ligi kune nian tutan app, do la fina programo ni estos konstruaĵo estas ĉi bela sportoj novaĵlegilo, kaj tiel ĝi tuj devos multnombraj ekranoj, kaj do mi povas fakte reprezentas ĉiu el tiuj multnombraj ekranoj sur la storyboard, kaj mi povas malzomi kaj rigardu mian programon de alta nivelo. Por krei novan elementon ene de mia storyboard estas vere simpla ene de Interface Builder. Se mi volas aldoni alian ekranon por tio, ekzemple, Mi povas unue malzomi kun la pinĉaĵon zoom ke Apple amas tiom, kaj cxi tie antaux Mi serĉi butono kaj mi treni kaj faligi butonon se mi volas krei novan ekranon mi povas fakte nur treni kaj faligi tutan vidon adaptilo, do se mi elektas tion, tiri ĝin ĉi tie, hey, ekzistas alia ekrano, kaj tiel nun uzas tiun ĉi saman storyboard dosieron Mi povas havi ĉiujn ekranojn interne de mia programo, kaj mi povas malzomi kaj vidi kiel interagi. Tiuj ne interagas ankoraŭ. La maniero en kiu tiuj 2 ekranoj interagi estas vi difinas rilatojn. Vi povas esence diras ekrano, kiam vi premas tiun butonon, Mi volas vin gliti sur ĉi tiu nova ekrano. Tio signifas ke estas ĉi tia rilato inter  la unua ekrano kaj la dua ekrano. Vi devos esence sago de tiu butono por la dua ekrano dirante, ke kiam vi premas tiun butonon estas kie mi volas foriri. Samkiel ni Kontrolo klakis kaj trenis difini tiuj fontoj ni tuj faros la samon por difini tiujn segues. Ni vidos ekzemplon por tio, kaj antaŭ ni efektive transiro de unu ekrano al alia iOS estas bela sufiĉas nomi tiun metodon vokis prepareForSegue, kaj ĉi tiu estas kie ni povas komenci sendi datumojn de unu programo al alia. En la ekzemplo ni pri rigardi ĝin estos esence permesi al ni filtri bazpilkado teamoj de ligoj kaj dividojn. Kiam mi elektu ligo, ekzemple, mi volas transiro al mia sekva ekrano kie mi povas montri ĉiujn dividojn en tiu ligo aŭ ĉiuj malsamaj teamoj. Mi bezonas sendi al tiu ekrano kio teamoj vi devus montri. Por fari tion mi iros por utiligi tiun metodon tie. Fine, nur hazarda punkto sur iOS. Se vi volas konservi datumoj ekzistas tiu afero nomata kerno datumoj, kiu estas fakte ia komplika por labori kun. Vi povas ankaŭ uzi SQL stoki datumojn, kiu, denove, estas agrabla sed speco de la pli komplika flanko labori kun, sed iOS ankaŭ apogas tiujn vere malvarmeta aĵoj nomata propraĵo lertaj, kaj proprieto listo estas nur dosiero kiu reprezentas ŝlosilo valoro paroj. Vi difinas liston de klavoj, kaj vi tion diras ŝlosilo tuj estos tabelo. Ĉi tiu ŝlosilo tuj estos ŝnuro, kaj esence io vi povas fari en JSON vi povas fari ene de proprieto listo, kaj tiel ĉi vere bele nin permesas labori kun iuj datumoj. Ekzemple, mi havas ĉi Teams.plist ke mi kreis. Mi kreis novan plist dosiero, kaj mi povas sondi sube. Tiu estas vortaro, ĉi tiu estas vortaro, ĉi tiuj estas ŝnuroj, kaj tiel ĉi tiu estas bela grafika prezento de JSON dokumenton aŭ nur aro de ŝlosila valoro paroj, kaj tiel ĉi tiu estas la datumoj kiujn mi povas labori kun interne de mia programo. Ni unue veni tien. Ni havas multe pli dosieroj nun. Sed ni unue venis tien al la storyboard. La storyboard tie-se mi povas malzomi- ni povas nun vidi ke tiu estas la fluon de mia programo. Mi unue tuj komencos ĉi ekrano. Mi iros por sondi al tiu ekrano, kaj mi tuj sondi al tiu ekrano, kaj ni povas vidi ĉi tie ke se mi specon de movi unu el tiuj ĉirkaŭ ni tiujn sagoj tuj de tie al tie, kaj la vojon mi difinus ke sago estis se mi zomi iom, kaj se mi venos pli al tiu vidpunkto adaptilo, kaj jen ĉelo, kaj mi volas diri ke, kiam vi tap ĉelo Mi volas vin gliti sur al alia ekrano. Mi povas simple premadu kontrolo, rulumu super iomete, premadu kontrolo, treni tiun ĉelon kaj lasis iri. Kaj super tie ni diras kio estas la transiro, ke vi volas uzi? Ĉu vi volas uzi tiun slide kiu nomas puŝo? Ĉu vi volas gliti el la fundo? Tio nomiĝas modala. Kaj iam mi premas unu el tiuj, tio okazas por desegni tiun sagon por mi, kaj tio signifas ke mi reale manipulitaj kio okazas kiam mi premas tiun butonon grafike. Mi ne skribis ajna kodo por fakte gliti de unu ekrano al la sekva. Mi difinis ĉi vide ene de Interface Builder. Se mi alklaku ĉi sago, ni povas vidi ke mi donis tiun aferon nomon. Mi vokis ĝin showDivisions, kaj ĉi tiu estas tiel, ke mi povas scii kio transiro estas por okazi, kaj ni vidos kial en nur sek. Tiel estas kiel mi telegramis ĝis la malsamaj ekranoj en mia programo. Se ĉi tiu estis butono, ekzemple, anstataŭ tablo vido, Mi povus kontroli alklaku la butonon, treni super al la sekvanta ekrano, kaj tiel estas kiel mi povas fari navigado tiu vojo. Vere rapide, se ni venos en la MasterViewController, denove, ni simple tuj difini liston de aferoj ke estos montrata en la tabulo vido. Jen mi estas diranta Mi volas ke vi prenas tiun plist dosiero, kaj mi volas ke vi montru gxin en vortaro, kaj kiam vi havas tiun vortaron, mi tuj respondos tiujn samajn demandojn denove. Jen estas la nombro de sekcioj. Unu, estas unu linio por ĉiu ligo, kaj la teksto de ĉiu ĉelo devus esti ĉu la unua, la unua ligo, la dua ligo, kaj tiel plu. Fine, mi tuj uzos tiun metodon kiun ni ĵus vidis nomita prepareForSegue, kaj ĉi tiu estas la metodo kiu tuj esti pafitaj kiam mi premas sur unu el tiuj vicoj kaj sekve aktivigante ke transiro ke mi starigis kun la sagoj. Tiu diras ke mi povas havi plurajn rilatoj de unu ekrano al alia. Se mi havas 2 butonoj kaj ĉiu butono prenas vin al malsama ekrano Mi tuj havas 2 segues, 1 por ĉiu butono. Sed ĉi prepareForSegue estas, denove, tuj estos reuzata por ĉiu el la diversaj interrilatoj, do tio signifas, ke mi bezonas vojo de identigi se vi premas la unua butono aŭ vi premas la dua butono. Memoru, kiam mi donis tiun segue nomon, ĉi showDivisions, tiel estas kiel mi nun scias ke tiu estas la segue kiu aktivigita. Mi nur volas fari estas mi volas diri Mi volas kompreni pri kio mi ĵus batis, kaj tiel akiri tion, mi povas diri mi volas ke la indexPath por la elektita vico, memori la indexPath nur diras kie mi ĵus klakis, kaj tiam mi volas diri ke mi volas eltrovi kie mi iras. Ĉi destinationViewController, tio estas propraĵo de la segue. Tio estas la ekrano mi tuj, do mi scias ke la ekrano mi tuj nomas DivisionsViewController ĉar mi kreis tiun klason, kaj nun, se mi diros d.divisions Mi nun opcio propraĵo de la vido controlador mi ironta al. Jen kiel mi sendas datumojn de unu ekrano al alia ekrano. Nur rigardante ĉi DivisionsViewController vi povas vidi ĉi tie ke en la. h dosieron estas tiu bieno dividojn, kaj tio estas kion mi esence popolante, do tiel estas kiel mi scias, ke mi montri la dividojn responda al la ligo kiun mi klakis, kaj denove, la reala tablo vido aspektas preskaux la samo, nur respondi tiujn 3 simplaj demandoj tiel kiel identigi kio okazas kiam vi movas al la sekvanta ekrano. Nur kelkaj aliaj aferoj ĉi tie. Vi rimarkos supre tie anstataŭ diri # include Mi nun dirante # importi. Tiu estas nur Objective-C afero. La importado estas esence pli agrablan versio de inkluzivas, kaj ekzemple, ni bezonas scii kio estas tiu klaso estas, do mi ne povas simple diri DivisionsViewController. Se ni ne hashtag standardio.c ene de nia. C dosieron la tradukilo ne havis ideon kio printf estis. Simile, se mi ne importi la DivisionsViewController la tradukilo vere havas nenian ideon kia DivisionsViewController estas. Nur certigi ke ene de via malsama. M dosieroj vi certigi por importi la responda. h dosierojn por ke la tradukilo scias kio okazas. Fine, kio Apple finfine ne estas montri iuj datumoj uzante retejo vido, kaj tiel retejo vido estas objekto en kiu vi povas enigi iom retumilo ene de via programo. Vi bezonas fari estas provizi URL al via retumilo, do mi volas iri al mlb.mlb.com, kaj ĉi tiu estas kiel mi povas aliri la hejmpaĝo por ĉiu teamo, kaj tiel per pasante en ĉi URL la TTT-vido povas montri tion por mi, kaj mi povas foliumi ĉirkaŭe, kaj simulilo estas en uzo por tiu. Nun tio venis de mia plist. Se mi klaku ĉi tiu ankaŭ venis de mia plist, kaj ĉi deslizante estis manipulita per difinanta tiuj segues. Mi klaku ĉi kaj unu pli, kaj nun jen mia UIWebView, do ĝuste kiel ke jen la retejo por la URL kiun mi ĵus enigita, kaj mi ne devis manipuli ion frenezan. Tiel estas kiel por montri retpaĝo. Aĵoj kiel ĉi reen butono tie estas ankaŭ donita al mi tute senpage ĉar mi difinis tiujn rilatojn uzante segues. Demandojn? Yeah. [Studenta] Do kiam vi uzas alloc, vi neniam devos libera ion? Ĝuste, kiam vi nomas alloc kaj init vi ne devas liberigi ĝin. IOS tuj manipuli ĉiuj, ke por vi. Estas mirinda, kaj vi ne rompi ajna reguloj. Yeah. [Studenta] Se vi estus por inkludi pli teamoj kiuj povus persvadi sur la ekrano, ĉu aŭtomate havi skribrulajxon eblo, aŭ estas, ke io, kion vi bezonas aldoni? Ĝuste, se mi havis pli teamoj, ekzemple, estus aŭtomate manipuli la movo por mi, kaj la tuta agado zorgojn kun la grandega tablo estas ankaŭ manipulitaj tute por mi. Aliaj demandoj? Ĉio ĉi kodo tuj estos eldonitaj. Ni speco de glosó super iom el la pli malgrandaj detaloj, sed aĵoj kiel opcio iuj propraĵoj de la TTT-vido estas nur tion, kion vi povas akiri per foliumantaj Apple dokumentado, kiu estas vere, vere bele metitaj. Ili havas multe de specimeno apps kaj ekzemplo uzoj de malsamaj API, do certe peruse tiuj se vi povas. Nur kelkaj helpemaj ligiloj vi eble volas rigardi. Ĉi tiuj estas iuj oportuna dokumentado gvidas. La URL estas amasaj, do ili estas mallongigitaj. Tiu unua estas la tuta biblioteko de dokumentaro. Estas iom serĉo trinkejoj, do se vi komencas tajpi butono ĝi komencos donas al vi la tutan informon pri cxio, vi povas fari kun butono. Mi ankaŭ inkludis la Tablo Montri Programado Guide. Ĝi manipulas tablo vidpunktoj en multe pli detale, kiel fari tion kiel dinamike aldoni ĉeloj aŭ redakti ĉeloj aŭ forigi ilin. Ekzistas multaj specimeno apps de Apple kiu montros al vi kiel fari tion, kaj fine, ĉi lasta estas la Homaj Interfaco Gvidlinioj, kaj ĉi tiu estas esence iu diskuto pri UI komponantoj, aĵoj kiel ne fari butono kiu estas 4 rastrumeroj per 4 rastrumeroj. Tio estas malbona ideo, kaj aliaj aĵoj ke Apple volas vi fari instigi bonan dezajnon. Ajna lasta demandojn antaŭ ol ni finos kolektis? Bone, certe bonvolu-we're tuj havas specialajn etiketojn sur diskuti. Ni havas iOS unu, do certe bonvolu uzi tion. Se vi volas labori per viaj kompanoj en projektoj aŭ helpi elŝeligi iu hazarda iOS stuff bonvolu retpoŝti al mi, kaj certe peruse tuta kodo linio ĉar nur en la intereso de tempo ni ia glosó super la pli pli fajna akno detalojn de aferoj. Sed se ne, tiam bona sorto en via iOS projektoj, kaj mi esperas ke ni havos grandan enfluo de apps en la App Store. [CS50.TV]