[Powered by Google Translate] [Seminar] [iOS: Kirjutamine apps nagu Boss]
[Tommy MacWilliam] [Harvardi Ülikool]
[See on CS50.] [CS50.TV]
>> Olgu, inimesed, tere tulemast iOS: Kirjutamine apps nagu Boss.
See seminar toimub keskenduda kirjalikult apps iPhone
ja omakorda kirjalikult apps iPad, ja nii me põhiliselt läheb jalutada läbi
paar erinevat näidet, kuidas teha app, lihtne mäng nagu Tic Tac Toe,
või kui sa oled rohkem huvitatud muutes app nagu mingi uudistelugeja
või midagi, mis suhtleb Interneti räägin, et hästi.
Siin on meie lühike kava.
>> IOS apps on kirjutatud keeles nimetatakse Objective-C,
ja nii see on natuke sarnane C, kuid tegelikult ei üldse
nii me vesteldes natuke keel ise
ja siis kuidas ehitada iPhone apps kasutades seda app programm Xcode,
mis siis, kui te pole alla laadinud seda veel julgelt alustada allalaadimist nüüd.
See on mitu gigabaiti.
See peaks olema tasuta App Store, nii et sa pead olema Mac
ideaalis töötab uusima versiooni OS X.
Kui sa ei ole, pole probleemi.
Meil on Macid teaduskeskus Teie käsutuses
koos XCode paigaldatud, ja nii et võid vabalt kasutada neid arenguks.
Kui sa tahad teha app, kuid ei ole Mac, ärge muretsege.
Seal on palju ülikooli ressursse selle eest.
Ja nii siis me kavatseme katta 2 suuremat näiteid eri rakendusi, mida saab teha.
Objective-C on tehniliselt mida nimetatakse super komplekt C.
See tähendab, et iga C kood kehtib ka Objective-C koodi.
See tähendab, et me mingi toru teibitud kohta mõningaid täiendavaid funktsioone C.
Mõned neist sisaldavad millel ei ole kunagi kirjutada malloc jälle, jumal tänatud,
ei pea muretsema nende loll viiteid ja vabastades neid ja kõik see kraam
sa vihkad umbes C, ja see on selline läinud Objective-C.
>> Nüüd, Objective-C on ka palju suurem standard raamatukogu,
nii seal on palju rohkem funktsioone saate tasuta sees Objective-C.
Mäletad, kui me olime kirjalikult PHP märkasime, et me läksime
see väikseim keele hiiglaslik raamatukogu kõik need hullud asjad, mida saate teha.
Sama asi juhtub iOS.
Seal on objekte asjad budistlik kalender, ja tõesti midagi
saab võimaluse mõelda ilmselt olemas juba Objective-C täitmisel.
Eesmärk osa Objective-C on viited midagi
nimetatakse objektorienteeritud programmeerimise.
See on selline uus mõiste, kuid me oleme tegelikult enamasti õppinud
palju neid mõisteid juba.
Idee objektorienteeritud programmeerimise on see, et sa lähed struktureerida
palju oma koodi ümber neid asju nimetatakse klassid,
ja need klassid on tõesti ülistatud structs.
Toas struct me põhimõtteliselt ütles siin on asi,
ja see asi võib olla kohal.
Näiteks sõlme seotud nimekirja võiks olla muud asjad
nagu väärtus, kursor järgmisele sõlmele nimekirja,
ja koos, et osuti ja et väärtus koosneb see üks näiteks struct.
Klassid on väga sarnased välja
klassid saavad ka võrgu sees neist.
Kui me kuulutasime struct, võiksime öelda ainult int n või sõlme * kõrval.
>> Nüüd Objective-C saame tegelikult suunatud funktsioone
sees nendest asjadest.
Teine asi, mis klassides saab teha, on nad saaksid pärida andmeid teistesse klassidesse.
Näiteks me vaatleme kamp sisseehitatud Objective-C klassid.
Üks neist võiks olla klass, mis tähistab vaade ekraanil
ja nii öelda, ma tahan rakendada oma seisukohta
me põhiliselt öelda keegi üle Apple, ilmselt tõesti toredaid inimesi,
Kirjutasin selle klassi minu jaoks, ja see tegeleb asjad väljapanek nupud
või muudab ekraani ja me oleks tõesti kurvastas
rakendada kõiki selle funktsionaalsus ise, ja nii lihtsalt
pärib andmeid saame öelda kõik, mis sa tegid selle klassi
Tahan ka sees minu klassi, ja siis ma teen mõned muud asjad,
nimelt rakendada app.
Just selle sõna pärandi tähendab. Me näeme rohkem konkreetse näite.
>> Ja lõpuks, võti koos objektorienteeritud programmeerimise, et
see viib andmete kapseldus.
Mõnes meie probleem seab oleksime võinud need suured, globaalsed muutujad
kui globaalseid kõikjal, ja see, kuidas me tahaks jälgida riik.
Mis klassides saame alustada kapseldamist info sees objekt.
Kui meil on üks ekraan meie app, me tõesti ei vaja mingit andmeid
teisel ekraanil meie app sees, et
ja nii kapseldamist asjad liikides see tegelikult viib
palju parem kood disain, ja see on võimalik mõned lisafunktsioone
Objective-C.
Forewarning, süntaks Objective-C on banaanid.
See on nagu midagi me oleme näinud,
nii et see on natuke õppimiskõver harjuda
mida kuradit see siis tähendab?
Aga kui sa varem, et esialgne õppimiskõver see on tõesti väga sile
alustada kirjalikult apps.
>> Tunnistada klassi öelda, siin on minu klassis, see on olemas,
ja äkki siin on mõned asjad, et ma lähen määratleda hiljem
Ma lähen ütlen @ liides.
Ma lähen ütlen @ liides. Ma annan oma klassi nimi.
Ja siis hiljem kusagil mujal ma ütlen @ eesmärgil
ja kõik sellises vahel @ liides ja @ lõpuni
saab olema minu klassis.
See saab olema, mis seal sees meie. H faile.
Just nagu C meie. H failid põhimõtteliselt ütles siin on mõned asjad, mis olemas.
Ma ei pruugi ütlen teile, mida nad teha veel,
kuid kompilaator peab teadma, et nad on olemas.
Hiljem sees meie. M faile-sest m Objective-C
on, kuhu me tegelikult läheb määratleda, mida need tunnid teha.
Palju nagu meie. C faili, andsime rakendamise funktsioone.
Toas meie. M faili läheme öelda siin on, mida kõik funktsioonid
sees minu klassi-mida nad kõik teha.
Ja lõpuks, sees struct võiksime öelda, sees need looksulg
int n või sõlme * kõrval,
ja Objective-C me ei kavatse kasutada märksõna @ vara,
ja see, mida läheb määratleda omadused,
või mitte-funktsioone, mis on osa minu klassi.
>> Üleskutse funktsioonid Objective-C on ka banaanid.
Kui me deklareeritud funktsioone C ütlesime midagi int foo
ja avatud paren ja siis andis ta argumentide loetelu.
See on see, mida kuulutatakse meetodeid või funktsioonid välja näeb Objective-C.
Kui ma tahan kuulutada funktsioon või meetod
kus ma väidan meetod on tõesti ainult funktsioon, mis on liige klassi,
nii kena vahetatavad, kuid tegelikult mitte,
nii sees minu meetod Tahan luua uus meetod.
See läheb tagasi midagi, nii et see saab olema tüübiga tühine.
See on tagasipöördumine tüüpi minu ülesanne.
Nüüd on meil Sulgudes siin, sest-ma ei tea.
Järgmine saab olema nimi minu funktsioon,
ja siis lõpuks on meil semikooloniga nagu meil oli C.
Mida uut siin see kutt siin.
See sidekriips on tegelikult vaja, ja mida see ütleb on, et
selle meetodi siit tuleb kutsus astme klassis.
>> Pärast me kuulutasime meie structs me ilmselt ütles midagi
struct tipp n, ja et tegelikult loodud
või instantiated üks neist structs nii et ma oleks tegelikult võinud alustada tööd
mida on sees, nii et see kriips tähendab, et me peame
instantiate klassi nagu me instantiated et struct
enne kui saame helistada selle meetodi peal.
Kui ma tahan alustada lisades argumente minu meetodid
see läheb veel rohkem banaane.
Siin on minu meetodi nimi.
Siis ma lähen on koolon, ja pärast seda koolon öeldakse siin toimub mõned argumendid.
See meetod võtab üks argument.
Tüüpi tema argument on keskmine, ja nime, et väide
või muutuja, et ma lähen alustada kasutades sees meetodit nimetatakse i.
Jällegi, see on meetod. See võtab üks argument.
>> Kui te soovite alustada lisada rohkem argumente, mis ta saab rohkem banaanid
aastal, et me oleme see koolon, mis ütleb, siit tuleb mu argumentide loetelus.
See esimene argument on täisarv.
Nüüd on see teine ​​argument on huvitav.
Muutuja, et ma lähen tuleb kasutada sees minu funktsioon
nimetatakse f, nii sees minu funktsioon Võiksin öelda
F + = 1 või midagi.
See asi siin on põhimõtteliselt võti selle argumendi või parameeter.
Täpselt nagu meil oli põhiväärtus paari ja midagi JSON või assotsiatiivse massiivi
Objective-C otsuse teinud öelda, eks, just nii, et see on tõesti selge
kui helistate meetod, mida kõik need parameetrid on
Ma olen tegelikult läheb nimetada neid kõiki.
Kui helistate meetod, saate tegelikult öelda andFloat,
ja siis saate andke seda sisse
>> Huvitav, see ei ole nimetatud, kuid kõik muud parameetrid on,
nii et kui meil oli 3. argument ma võiks öelda, andFloat
ja teine ​​ujuk ja nii edasi.
Kui ma nimetan neid meetodeid on muidugi banaanid,
nii et kui mul on eesmärk, ja ma määratletud meetodit nimetatakse foo,
ja ma tahan seda kutsuda, mitte öelda suva lahti / kinni Sulgudes
Ma lähen avama sulg.
Siin on nimi minu meetod.
Ma lähen sulgeda sulg, ja see on objekt Ma helistan sisse.
Pea meeles, et kõik need meetodid eksisteerivad klassid
sest klassidel võivad olla määratletud meetodeid sees neist.
>> Siin ma olen meelevaldselt loodud objekti mõne klassi,
ja see on süntaks seda teha saab.
Seal on 2 sammud objekti.
Esimene samm on, et ma tahan eraldada ruumi.
See on samaväärne malloc. Me ei pea ütlema malloc enam.
Meil langes m, tegi alloc, ja asendada. C juures. M.
Pärast me alloc midagi, mida me siis peame selle vormindamiseks.
Põhimõtteliselt, kui loote objektide võiksite mõned loogika
mis täidab kui nad loonud, siis võite läbida mõned vaikeväärtused
või midagi sellist, ja nii see init meetodi, mis tegelikult loob objekti.
Me kõigepealt eraldada ruumi, nagu me tegime C,
ja siis me initsialiseerida see, mis võib olla või mitte teha palju.
Siis me jälle see asi sisse objekt o.
Seal on täht siin, sest see on tehniliselt pointer,
kuid ärge muretsege, viiteid ei ole nii suur asi Objective-C enam.
>> Nüüd oleme instantiated Selle klassi nimetatakse NSObject,
ja see on lihtsalt juhuslik klassi, et Apple on.
Oleme instantiated seda, ja nüüd on mul näiteks selle klassi
Selles objekti O, nii et see tähendab, et kui ma määratletud
Nende meetodite võin helistada neile meeldib see.
Samamoodi, kui ma tahtsin helistada meetod ühe argumendi,
nii et see on baar meetod, mis võtab üks argument,
ja siin on Baz: qux meetod, nii et see võtab 2 argumendid.
See on helistaja üks funktsioon selle objekti o.
Mõtet?
Süntaks peaks mõtet, kuid sa selline harju sellega.
>> Okei, räägime mõned asjad, mis on ehitatud Objective-C
mis ei olnud tingimata ehitatud C.
C me pidime tegelema stringe kui need tobedad iseloomu massiivid
ja ta sai tõesti tüütu.
Objective-C on need kõik ehitati meie jaoks, ja see on ehitatud
kasutades selle klassi nimetatakse NSString.
Kui ma tahan luua NSString meil rohkem keerulisse süntaks.
Selle asemel, et öelda "cs50" ütleme @ "cs50"
ja see on lihtsalt süntaks tunnistamise stringid Objective-C.
See on väga lihtne unustada, et mitte.
Nüüd, kui mul on see, see on string, kuid teade
see on tõesti lihtsalt ese.
Ma ütlesin NSString, mis tähendab, et ma instantiated klass
nimetatakse NSString, mis keegi kirjutas mulle,
ja nad olid väga kena about it, ja nii nüüd
Võin alustada kutsudes meetodid peal.
Kui ma kõne meetod pikkus selle objekti s
see läheb tagasi minu stringi pikkusena.
See on nagu strlen in C.
See oleks tagasi 4.
>> Sarnaselt on teine ​​meetod Ma võiksite hoolivad on see characterAtIndex.
See on meetod, mis ütleb selle stringi s
Ma tahan, et sa saad 0. iseloomu,
ja nii see tagasi minu iseloomu c,
ja seal on terve hunnik veel need meetodid, mida saab Google tõesti lihtsalt.
Apple'i dokumendid on suur, ja me võtame pilk, et natuke.
Need on stringid.
Meil on ka erineva suurusega massiivid ehitatud sisse
Pea meeles, C, kui me tunnistada massiivi
meil oli öelda sul on 5 elementi, lõpuks lugu.
Kui saime JavaScript ja PHP võime hakata
asju nagu lisades elemente või liikuvaid elemente.
Me võime teha sama Objective-C.
Selle asemel, et luua massiivi tavalisel C viis
meil on jälle teise klassi nimetatakse NSMutableArray.
Seal on ka NSArray,
ja see läheb põhiliselt kapseldada mõned massiivi.
See ütleb esimene asi, mida ma tahan teha, on ma tahan eraldada
ruumi uue massiivi, ja pärast ma jaotada see
Siis tuleb initsialiseerida ta.
Jällegi, lihtsalt kutsudes neid 2 meetodid.
Nüüd tähendab see, et sees selle objekti
Ma olen tühi massiiv istub seal.
Kui ma tahan lisada midagi sellele massiivi, võin helistada addObject meetod.
Tahan lisada objekti array, ja ma tahan lisada string CS50.
Kui ma tahtsin vastupidi eemaldada, et võin öelda ma tahan
Eemaldage ese on esimesel kohal massiiv või vastuväiteid.
>> Mõtet?
Okei, sa selline harju sellega nurksulg asi.
Muide, sees palju Apple'i raamatukogud näete seda NS.
NS tegelikult seisab järgmine samm, mis oli üks Steve Jobs esimesi ettevõtteid,
ja seal ta tõesti hakkas kirjutama palju koodi
nagu mingi alus Mac OS X ja kõik muud kraami,
ja nii see NS on selline see kena pärand Hüüab ühe varasema ettevõtted
tagasi, kui Apple oli esimene alustamist.
See on igal pool.
Võtame pilk terviklikum Objective-C näide.
Siin ma olen sees Xcode.
Et saada siia, ma esimest korda allalaetud XCode App Store,
avas ta üles ja siis ma läksin siin faili
üle siin uus, ja siis projekti.
Pärast ma, et mul on kõik need valikud, mida ma tahan luua,
ja nii me vaatleme neid võimalusi hiljem
aga lihtsalt see näide, sest me tegelikult ei kavatse on app veel,
Ma tulin siia, ja ma ütlesin käsureatööriist,
ja see on app, et ma võiks joosta käsureal
nagu me oleme käinud alates C.
See, kuidas ma lõin selle projekti ja nüüd ma siin olen,
niiet esimene pilk seda pilti, ja see peaks välja nägema üsna tuttav.
Mul on int nimi. Seal on mu sõber argc, mu teine ​​sõber argv.
Ja nii me näeme, et see on lähtepunkt mu esimene Objective-C taotluse.
Siin me ei saa eirata seda nüüd.
See on põhiliselt mõned mälu haldamine kraami, mida tegelikult ei
kunagi ei pea muretsema.
>> Vaatame selle esimese ploki siin.
See esimene rida, kui ma ütlen Student * Alice = [[Student alloc] init] mis see teeb?
See esimene õpilane siin, see on ilmselt klassi.
See ei ole klassi, et Apple kirjutas, aga see on klass, mis ma kirjutasin.
Esimene asi, mida ma tahan teha, on ma tahan eraldada ruumi uuele õpilasele,
ja siis ma tahan initsialiseerida see, et see annab mulle tagasi
see uus õpilane objekt ja ma ladustamiseks seda muutuja nimega Alice.
Kust selle klassi tulevad?
Noh, siin vasakul pool on need kõik erinevad failid sees minu projekt.
Me näeme siin mul Student.h ja Student.m.
. H fail, mäletan, kus ma kuulutada kõik asjad
mis eksisteerivad klassi.
>> Võtame pilk seda.
Olgu, siin on meil see @ liides, ja see ütleb, et siin tuleb
deklaratsioonide kõike, mis eksisteerivad minu klassis.
Siis on mul jämesooles. Siis mul on see NSObject asi.
See koolon tähendab, et pärimise natuke me arutasime natuke varem.
See ütleb kõik NSObject saab teha
kus NSObject on selles klassis kirjutatud kellegi teise,
kõik see NSObject saa ma tahan olla võimeline seda tegema.
Öeldes: NSObject see tähendab, et ma põhimõtteliselt
päritud kõik funktsioonid teise klassi.
See tõesti andis mulle terve hunnik erinevaid meetodeid ja omadusi, et ma saan kasutada.
Alla siin ma loon 2 kinnistut.
See tähendab, et minu õpilane, kui see oli struct, need oleks 2 asja
sees minu struct, nii et iga õpilane on nimi
et on string, ja üliõpilane on ka hinne,
mis on int.
>> Lõpuks, siin ma lähen luua meetod minu õpilane.
Ma helistasin oma meetod, initWithName, ja see võtab ühe argumendina,
ja see argument on string, ja ma kutsusin seda nimetada.
Nüüd vaatame, kuidas me tegelikult rakendatud selles klassis.
Siin nüüd olen sees minu. M faili
m rakendamiseks, ma arvan.
Mul on rakendamise, minu otsas ja siin on koht, kus ma tegelikult defineerime
mida initWithName teeb.
Mul on initWithName, nimi minu parameeter, ja siis see
on koht, kus ma tegelikult luua õpilane,
ja nii see on natuke segasena, kuid see on selline stereotüüp
, mida soovite lisada oma ehitajatel.
See initsialiseerimise funktsioon siin, initWithName, on teatud tüüpi ehitaja.
Sa põhimõtteliselt ehitada uus õpilane objekti
ja võibolla saadan mõned andmed sees on.
Esimene asi, mida ma tahan teha, on Ma tahan helistada init selle super asi.
>> Pea meeles, et kui ma ütlesin, tagasi siin. H fail
et kõik NSObject on üliõpilane on ka.
See tähendab, et kui ma loon üliõpilane mida ma ka vaja teha, on
veenduge, et NSObject et ma pärib kõik, et andmeid
Samuti käivitub korralikult.
Mida ma pean ütlema, on see super tegelikult toimub viidata vanema klassi
et ma emalt päritud, nii et ma tahan veenduda, ma initsialiseerida
kõike, mida ma olenevalt enne kui ma hakkan üritan seda kasutada.
Siis kui see käivitub õigesti see on sama hea kui õelda, kui malloc
ei tagastanud null siis võin alustada, millega mõned omadused.
>> JavaScript ja PHP olime selle märksõna nimetatakse seda,
ja see nimetatud praegune astme klassis.
Objective-C me nimetame seda ise.
Kui ma ütlen self.name, mis tähendab, et objekti
Ma lihtsalt loodud, kui ma ütlesin õpilane alloc init,
et läheb mulle tagasi objektile.
See tähendab, et ma tahan anda nime, et objekti
mis iganes ma lihtsalt möödas sisse
Täpselt nagu C, me juurdepääs kohal selle punkti,
nii self.name ütleb nime üliõpilane objekti
nüüd saab olema, mida sa lihtsalt möödas sisse
Ja nii lõpuks saan tagasi see, et ma tegelikult saan midagi tagasi.
>> Küsimused?
Okei, nii et see ise = super init,
kui sa ei saa täielikult aru pärimise värk ärge muretsege.
Lihtsalt tean, et kui sa kunagi tahad teha oma init meetodi lihtsalt
seda teha, ja sa pead olema hea minna.
Jah. >> [Student] Mis siis, kui ise keskmine?
See tähendab, kui me malloc me alati kontrollida, kas see oli võrdne null,
ja kui ta oli null, siis me lahkus.
See on sama asi, sest kui see naaseb null, siis me ilmselt läheb SEG süü
kui hakkame üritab manipuleerida seda.
See on meie õpilaste klassi.
See tähendab, et saame initsialiseerida meie õpilased kahel viisil.
Kui ma ütlen õpilane alloc init ma ei kasuta seda meetodit, et ma lihtsalt kirjutasin,
ja selle asemel võin lihtsalt öelda alice.name,
ja nüüd ma lähen seatud, et vara nimetus.
>> Samamoodi, kui ma tahan kasutada, et initWithName meetod
Võin lihtsalt öelda alloc ja seejärel mitte öelda init
Ma kutsun seda meetodit, et ma lihtsalt loodud, ja ma lähen läbima Bob.
Sel hetkel, see objekt Bob on nimi võrdne Bob.
Okei, siin ma kasutan, et NSMutableArray et me vaatasime varem.
Ma eraldades space.Then Ma initsialiseerimisel uue massiivi.
Ma lähen lisada 2 asja ta.
See massiiv nüüd omab üliõpilane objektide kohta.
Pange tähele, et kuhugi ma pean ütlema, see on massiiv õpilased.
Ma ütlesin, et see on massiiv, periood.
Siis ma ei pane mis iganes sees see, mida ma tahan.
Siin on mul 2 objekti.
>> Lõpuks, mul on teine ​​objekt siin, see TF.
Üle siin TF.h põhimõtteliselt sama asi.
Olen emalt päritud NSObject, ja muide,
Kui loote klasside see kõik on tehtud teie jaoks,
selline liides trafaretset.
See on vara õpilased.
Mul on paar meetodeid siin, et ei ole tõesti palju,
ja nii see tähendab, kui ma luua selle TF objekti
Võin selle meetodi klassist see niimoodi.
Iga küsimustele Objective-C süntaks enne kui hakkame liigub veel
huvitav apps areng kraami?
>> Okei, niiet tegelikult teha iPhone app.
Tuum klassid, mis teid kasutades sees oma iPhone app on kutsutud eesmärgiga kontrollerid
ja et töötleja põhimõtteliselt kujutab endast ekraanile mahtuda
sees oma app, nii et kui ma olen muusika app, näiteks
üks vaade kontroller võiks olla vaade, kus ma saan vaadata kõik laulud minu iPhone.
Teine vaade kontroller võiks olla kui ma vajutan laulu ja mängima hakata seda
või kui ma puurimine ette võtta kunstnikud.
Kõik need erinevad ekraanide võiks olla esindatud teistsugusel seisukohal kontroller,
ja et kontroller on tõesti ainult klassi, mis ütleb, kuidas see ekraan toimib.
Asjad sees, et kontroller, me lähed on omadused,
nii asjad nagu nupule saab olema vara meie arvates kontroller.
>> Töötame ka läheb on meetodeid, ja need on põhiliselt sündmuseohjurite.
See meetod ütleb, kui vajutate seda nuppu
Ma tahan teha midagi ja lõpuks jällegi
me ei kavatse olla kasutades seda ise märksõna juurdepääsu praeguse näiteks.
Et ehitada liidesed iOS on tegelikult tõesti väga lihtne.
Neil on see kena lohistada liides nimega Interface Builder,
ja 2 tuum mõisted, traat oma Objective-C on Interface Builder
on IBOutlet ja IBAction.
IBOutlet lihtsalt ütleb, et kui sa tunnistada vara, mis on nupp,
ja soovite konksu ta kuni midagi oma tegeliku UI,
sa lähed öelda, et see lahti.
Samamoodi, kui soovite esindama sündmus
siis sa lähed öelda, et see tegevus.
>> Et tegelikult juhtmetega ühendada see graafiliselt
ja oma koodi see on tõesti väga lihtne.
Kui sa tahad lisada IBOutlet, kõik mida sa pead tegema, on teil kontrollida kliki,
ja me näeme näiteks on tõesti kiire.
Sa kontrolli nuppu, kus ta ütleb View Controller.
Sa lähed Kaasa tõmmata liides, või vastupidi,
kui sa tahad konks sündmus sa lähed lohistada liides
teises suunas.
Võtame pilk väga lihtne iOS näiteks.
>> Loome uue projekti.
Ma lähen, et tulla siia, et taotlus,
ja ma lähen klõpsa Single Vaata kohaldamine.
Ma lähen nuppu Edasi. Mina annan oma projekti nimi.
Ma nimetan seda Tere.
Huvitav, Apple ei kanna loote toode
nii et saate müüa ja nad saavad raha.
Alla siin ma ütlen, et see on iPhone app.
Saate luua iPad app, või kui soovite luua üks neist apps
mis toetab nii seadmeid, mida saate teha, et liiga.
Need on, mida sa tahad oma checkmarks nägema.
>> Te soovite kasutada käsikirjade, mida me näeme hiljem,
ja te kindlasti soovite kasutada automaatset viide arvestamist,
mis on tore funktsioon, mis takistab teil oleks öelda malloc ja tasuta.
Kui soovite helistada malloc ja tasuta, ma jätaks selle kontrollitud.
Ma Klõpsake nuppu Edasi ja lõpuks, see saab minult küsida, kus ma tahan seda salvestada.
Ma löön luua, ja siin me läheme.
Olen loonud uue projekti.
Üle siin vasakul on kõik failid, mis on sees minu projekt,
ja teate, et ma sain terve hunnik, ja ma isegi ei tee midagi.
IOS on suur.
>> Näiteks siin ViewController.h,
see läheb esindama minu esimene vaade kontroller,
nii esimese ekraani sees minu app.
Nüüd me teame, mida see ütleb.
Me öeldes ma helistan selle klassi ViewController,
ja ViewController teeb kõike, et UIViewController teeb,
ja see omakorda on mõned klassi, et Apple kirjutas, et teeb palju käepärane kraam meile
meeldib kuvada ekraanile.
Siin on koht, kus ma ei saa tegelikult alustada määratlema, mida minu arvates kontroller teeb,
ja tuleb välja, et ma tõesti ei vaja seda.
See on stereotüüp kood, et Apple annab mulle tasuta.
Mul on vaja, et esimene rida, või mul ei ole klassi,
nii saame lahti sellest ja vabaneda sellest.
Okei, nii et see on minu tühi ekraan.
>> Nüüd vaatame, siis see MainStoryboard.storyboard,
ja see on koht, kus ta hakkab saama huvitav.
See on esimene ekraan minu app.
Kui ma tahan lisada nupp, HTML pidin luua nupu sildi.
Android tuleb luua nuppu tag,
kuid iOS kui ma siia tulema alt paremale
ja kui ma vajutan seda 3. üks siin, kus ta ütleb Objektid,
ja ma ei keri, või võin hakata otsima nuppu.
Ja vaata, nupp, nii et kui ma tegelikult lohistada seda seal,
Ma olen lihtsalt lisada nuppu see ekraan minu app.
Kui ma tahan muuta teksti, ma ei tee sellel topeltklõps,
midagi öelda köitev nagu "Vajuta mind."
Okei, nüüd, kui ma saan seda app, nii et me kompileerida,
nii kestab see mul kliki play nuppu üleval vasakul, ja seal on minu app.
Ma ei teinud midagi, ja ma sain magus otsin iPhone app.
Kui ma tahan seda peatada, võite klõpsata nuppu Stop
sest see on lõbusam.
>> Ütleme, et ma tegelikult tahan midagi juhtuks kui ma vajutan seda nuppu.
Selleks et mida ma pean tegema, on mul vaja luua
uus sündmus või tegevus.
See tähendab, et mul on vaja luua mingit meetodit, mida tahan nimetada
kui ma vajutan nuppu, niiet luua uus meetod.
Ma olen sees ViewController.h.
Ma pean ütlema, et meetod on olemas.
Vajan sidekriips sest esiteks ma olla kutsudes seda silmas kontroller.
Mul on vaja anda seda tüüpi.
Tüüpi see saab olema, et IBAction asi, mida me nägime.
See on sündmus, nii see läheb tagasi IBAction,
ja see on vihje XCode öelda, et
see on midagi, mida ma tahan kaabliga midagi.
Võin anda talle nimi, nagu buttonPressed, semikoolon.
>> Nüüd ma olen kuulutanud uue meetodi sees minu klassi.
Ma olen öelnud seda meetodit on olemas.
Nüüd aga tulevad ViewController.m,
ja oletame, et see, mida selle meetodi abil võimalik teha.
Kui ma hakkan kirjutama, näiteks (void) buttonPressed
teade Xcode on tõesti kena ja autocompletes minu jaoks.
See on väga tore.
Teade siin, et sees. M faili Võin ka öelda tühine,
ja seda sellepärast, et IBAction ei ole tegelikult tüüp.
See on tegelikult hashtag määratletud kuskil olla tühine,
ja jällegi, see on lihtsalt vihje XCode mis ütleb
Ma tahan, et see oleks sündmus, ja me näeme, miks just sekund.
Kui seda nuppu vajutatakse ma teen midagi tüütu
nagu ekraanil hüpikaken.
>> Selleks, et saan luua uue Näiteks selle klassi nimetatakse UIAlertView,
ja see on klass, mis Apple kirjutas, et läheb näidata tüütu hüpikaknad.
Me kutsume seda hüpikakna märguanne, ja mul on 2 sammu, pidage meeles, et luua seda objekti.
Esimene asi, mida ma pean tegema, on eraldada ruumi.
Ma tahan UIAlertView.
Ma tahan eraldada ruumi. See on minu esimene meetod.
Minu järgmine meetod on Ma tahan initsialiseerida see,
ja nii mul on see suur, pikk meetodit nimetatakse initWithTitle.
See on põhimõtteliselt kavatse kontrollida, mida see hüpikaken ütleb.
Pealkiri minu hüpikaken saab tere.
Sõnum see hüpikaken saab "See on iOS."
Delegaat asi, ma ei tea mis see on.
Oletame, et see pole midagi.
Nüüd nupule, et läheb ilmuma saab öelda midagi "See kindlasti on,"
ja ma tõesti ei taha mingeid muid nuppe, niiet kustutada ja sulgeda sulg.
>> Okei, ma loodud ekstra üks. Nii juba läheb.
See on, kuidas ma saan luua uue hüpikaken.
Kui ma tahan tegelikult näidata hüpikaken ma tahan helistada Näita meetod.
Selleks, et võin öelda, tähelepanelik ja näitavad,
ja jälle, automaatteksti oli super tore.
Kui ma unustasin, mis see oli, kui ma lihtsalt kirjutada s,
Võin kerida siin aru saada, mis see oli,
ja see filtreerib kenasti.
Nüüd olen loonud uue hüpikaken.
Me tuleme tagasi, mida delegaat tähendab hiljem
ja nüüd ma tahan öelda, et ma tahan seda meetodit lastakse
kui ma vajutan nuppu, nii et ma lähen tagasi tulla mu süžeeskeemil
ja ma tahan nüüd lisada see IBAction.
Esimene asi, mida tahame teha, on klõpsa nuppu.
Kui ma vajutan seda nuppu, ma tahan midagi juhtuks.
Ma ei hoia kontrolli.
Ma lähen klõpsake ja lohistage nupp
et siin, kus ta ütleb View Controller.
Me näeme, et see ilusti süttib.
>> Kui ma lasen minna minu hiir mul on nüüd see hüpikaken siia, kus ma olen mõned võimalused.
Üks neist on sündmuste, et ma ei registreeri.
Need on kõik need meetodid Ma deklareeritud mu h faili IBActions.
See, kuidas XCode teab, mis peaks ilmuma see väike nimekiri,
nii et on lihtsalt vihje.
Kui ma vajutan nuppu all, ma olen nüüd registreeritud sündmus.
JavaScript meil öelda oli mul mingi kood, mis on registreeritud sündmus.
Objective-C oli see tõesti nii lihtne.
Kui ma saan seda uuesti
nüüd kui ma vajutan nuppu minu sündmus toimub tulekahju,
ja ma lähen, et saada see hüpikaken.
Super, super lihtne seal.
>> Kui sa kunagi tahad, et näha kõiki sündmusi, mis on registreeritud
kohta osa, kui ma vajutan seda nuppu
ja ma tulen siia paremale küljele
1. näete siin ma suudan asjad tüüpi nupp,
nii et kui soovite ühte neist ma-või kontaktisiku lisamise nuppu
või mis iganes.
Kui ma tahan näha kõiki sündmusi, mis on sellel nupul
kui ma kogu tee siia paremale küljele
näeme siin sündmuste Mul on kõik need erinevad sündmused.
Ma ei vajuta nuppu, kui ma lase nupp, kui ma topeltpuudutuse või mis iganes,
ja ma lihtsalt registreeritud on see üritus nimega Touch Up Inside,
ja see ütleb, et niipea, kui mu sõrme ära tuleb nuppu
Sellisel juhul läheb tulekahju, ja see on täpselt, mis juhtus.
See on selline vaikimisi nupu vajutamisel korral.
>> Kõik küsimused siiani?
Okei, see on, kuidas saame alustada juhe üles asjad meie kood
võtta asju sees meie liides.
Pea meeles, esimene asi, mida pidi tegema, oli leida koodi,
ja siis me wired up liidese koodi,
ja seal on meie esimene app.
Okei, see oli väga lahe, ja me loodud see nupp.
Mis siis, kui me ei taha olla looma kamp omadused
esindavad neid nuppe?
Näiteks Tic Tac Toe Mul on 9 nuppu,
ja see oleks super, super tüütu on lohistada 9 korda
või kui ma pidin tegema Tic Tac Toe on 81 asemel 9
ja ma pidin lohistada 81 korda, ja see on lame.
Mida me saame teha selle asemel on palju nagu HTML
kui meil oli asju nagu sümbolid ja nimed ja saame otsida asju
oma ID, seal on sarnane mõiste on iOS nimega sildid.
>> Silt on lihtsalt unikaalne numbriline tunnus komponent.
Kui ma ütlen seda on silt 0, näiteks
kui ma luua nupu ja anda see silt on 0, ja me näeme, kuidas seda teha mõne sekundi pärast,
kui ma tahan saada seda nuppu võin lihtsalt öelda, et ma tahan helistada
viewWithTag meetod objektil üle siin,
self.view, mis moodustab praeguse ekraani, näiteks.
Kui ma kutsun et viewWithTag meetod, ma lähen tõmmake nupp märksõnaga 0.
Võtame pilk selle poolt hoone Tic Tac Toe.
Esiteks, see on minu storyboard.
Olen loonud need 10 UI nupud.
Teade nad kõik sama suurusega.
Kui ma vajutan üks neist ja ma tulen tagasi siia selle paremal küljel
näete ma kohandatud font siin, seega tegin font natuke suurem,
aga mida ma ka tegin, oli seadsin selle sildi.
Ma ütlesin, et see on sildi 1, ja see on ülemises vasakus.
>> Nüüd, kui ma vajutan teine ​​nupp, nagu see teine ​​siin,
nüüd te näete, et minu tag on 2.
Kõik need nupud lihtsalt on unikaalne märgend,
ja nii see hiljem, kuidas ma lähen alustada suheldes
minu app.
See on kõik sees üks vaade kontroller,
kuid siin on see, mida meil on.
Meil on 3 kinnistut siin.
Esimene ja viimane ei kavatse esindab riiki oma pardal.
Põhimõtteliselt on see esimene on massiiv esindavad kus XS ja OS on.
See teine ​​siin ütleb meile, kelle kord on.
Märkad, et mul on ka need asjad siin.
Enne kui me deklareeritud omadused andsime neile nime ja tüüpi.
Saame ka anda neile mõned lisainfot siit.
See esimene ütleb nonatomic, ja mida see ütleb
on põhimõtteliselt ainult üks asi kunagi üritada pääseda sellele muutujat korraga.
Sa võiksid teha rohkem keeruliste taotlustega, mis on mitme keermestatud,
ja nii tagasi Scratch meil oli erinev niidid,
ja erinevaid haldjaid võiks teha erinevaid asju samal ajal.
>> Kui see nii ei ole, mida ta ei ole midagi, et me vaatleme,
kui me ütleme nonatomic see on tegelikult kavatseb teha asju natuke kiiremini.
Meil on ka see asi, mida nimetatakse määranud, tugev või nõrk.
See määrata lihtsalt ütleb, et see on standard tüüp.
See ei ole eesmärk või pointer, kuna see on lihtsalt bool,
nii bool on ehitatud Objective-C.
See ütleb ei püüa midagi teha väljamõeldud koos osuti siin.
See on tavaline vana mastaabimuundur.
Tugevad ja nõrgad, see nõrk ütleb, et tegelikult
Ma tahan seda olla suunatud millegi arvates kontroller.
Ma ei kavatse tegelikult eraldama või init seda ise.
Liides ehitaja, kui ma saan app, saab hakkama kõik, et ettekanne.
Kui ma ütlen nõrk, mis ütleb, et keegi teine ​​saab olema luua seda.
Kui ma ütlen tugev, see ütleb, et ma lähen olema üks
et inimest luues selle foorumi eesmärk,
ja siin ma saaksin veel meetodeid siin,
näiteks hagi, kui uus mäng nuppu,
hagi kui mõne nuppude vajutamisel,
ja jne.
>> Me ei hakka liiga palju loogikat Tic Tac Toe,
kuigi see on väga põnev, kuid võtame pilk
mõned asjad, mis me teha saame sees iOS.
See uus mäng meetod läheb vallandati
kui ma vajutan uus mäng nuppu.
Konks, et kuni ma lihtsalt tulevad üle minu storyboard.
Napsautin uus mäng.
Kui ma tulen siia paremale ma näen, et
Parandage Toas on traadiga Newgame meetod.
Sellepärast see läheb lahti lastakse.
Newgame meetod kavatseb teha mõned loodud.
See saab öelda tahan teil selge riigi pardal.
See on tore meetod Muutuv massiivid.
See saab öelda, et see nüüd X omakorda
ja nüüd ma lähen ära seda viewWithTag asi.
>> Ma tean, et mu nupud on sildid 1-9,
ja see on midagi, mida ma meelevaldselt valitud.
Kui ma tahan määrata teksti iga nuppu, et on tühi
sest ma just alustanud uue mängu ja ma ei taha
Xs või OS jääb üle ma suudan seda.
Võin öelda tahan vaatamise tag, 1, 2, 3, 4 jne.
See tõmbab erinevad nuppu iga kord.
Siin ma lähen koo see UIButton.
Just nagu me oleks seadnud ints kuni ujukite ja vastupidi
see ütleb, et ma tahan heita seda, et UIButton.
See tähendab tüüpi see on UIButton *
sest suunanäitajaks, kuid ärge muretsege, nad ei ole jube enam.
>> Kui mul seda nuppu ma lähen helistada meetod peal.
Seda meetodit nimetatakse setTitle forState, ja nii see ütleb
Ma tahan, et seada teksti nupp olla tühi string,
ja ma tahan, et see oleks tühi string, kui see ei ole vajutatud.
Kui ma kasutan seda meetodit, võin muuta teksti nuppu
niipea kui keegi lööb, aga me tahame öelda, kui nupp on lihtsalt istub seal
Ma tahan tekst olema tühi.
Lõpuks, me initsialiseerida mu laud,
ja ma lähen ütlen, et kõik on praegu 0,
nii see juhatuse liikmed püsiv on Muutuv massiiv,
mis tähendab, ma saan helistada addObject meetod ja lihtsalt 0 sees on.
Nii juhtub, kui ma uue mängu.
>> Võtame pilk teisele.
See meetod on siin IBAction et läheb vaja vajutada
iga kord üks neist ruutudest vajutamist.
Nüüd on meil mõned Tic Tac Toe loogika siin.
Me nuputada, kelle kord on,
ja selle põhjal me kas seatud X või O,
aga märkame, et me taaskasutades sama sündmus
Iga üksiku ühe nupu.
See tähendab, et mul ei ole meetod top vasakut nuppu,
erinev meetod all paremal nuppu, kuigi ma seda teinud.
See poleks tõesti hea disain.
Mida ma siin teen on ma tegelikult läheb kindlaks
mida tag nuppu, mis oli surutud on.
Te märkate, et see näidend meetod võtab üks argument.
Seda nimetatakse saatja ja mida saatja on saatja läheb
kujutavad täpselt seda, mida oli võtnud meetmeid pärast.
Kui ma vajutan nuppu, see saatja saab olema, et UIButton
et ma tegelikult pressitud, nii et tähendab, et UIButton
on silt, sest olen loonud sildi.
>> Kui ma tahan saada on silt võin lihtsalt öelda
Ma tahan tag saatja,
ja uuesti, ma olen lihtsalt valatud see UIButton.
Ma tean küll, et saatja on UIButton.
See ei pea alati olema UIButton.
Võiksin näiteks registreerid sama sündmus
jaoks üks nupp, üks liugur.
Sel juhul ma tean, et nad kõik nupud, nii et ma lähen öelda
Ma tahan seda olla nupp, ja siis ma saan tag,
ja tag Nüüd ma tean, kus ma olen sees pardal.
Siis ma saan lihtsalt määrata, kas X või O, võib flip omakorda
kontrollida, kes on võitnud, jne.
>> Kõik küsimused selle nii kaugele?
Okei, kõik koodi me Internetti-me ei taha sattuda liiga palju
Euroopa Tic Tac Toe loogika, kuid nüüd te näete, et tegelikult
kõik me teeme, on me silmuspõletamise üle selle massiivi
nii et meil on paar kohta silmuseid siin, ja me lihtsalt võrrelda, et näha,
Kas meil on mängu kõik read, mängu veerg või midagi sellist.
Et tegelikult teha selle app, kui ma kraani ühel neist nuppudest
et mängida meetod vallandati, nii et tähendab, ma lihtsalt seada
nuppu, et olla X, nii et nüüd see nupp on O, ja nii edasi,
ja nii see on, kuidas me alustame suhelda see ühel leheküljel app.
>> Saadame koodi, nii julgelt tutvuma, et
kuid olgem nüüd rääkida mõned apps, mis on rohkem kui lihtsalt üks lehekülg.
Sama põnev kui Tic Tac Toe oli palju apps sees iOS
on omamoodi nende puuri alla asju mitme ekraane.
Esimene idee, et me peame rääkima ka protokolle,
ja protokoll on lihtsalt kogum meetodeid
et sa ei saa lubada määratleda.
Kui ma luua selle uue protokolli 2 meetodit, see esimene,
kui tagasivoolu tüüp on tühine, ma kutsusin seda suva.
See ei võta argumente. Mul on teine ​​meetod.
Ta naaseb int. Ma helistasin talle baar, ja see võtab ühe argumendina.
Kõik see protokoll on see, et kutsutakse SomeProtocol siin,
see on kogum asju, mida keegi saab rakendada.
Ma ei ole sees käesoleva protokolli ütles mida foo teeb.
Selle asemel, ma lihtsalt ütlen mida võiks määratleda suva, kui soovite.
Kui ma loon, et vastutav töötleja või luua klass
Võin sees selle klassi lubadus rakendada
mõned neist meetoditest, nii et näiteks kui öelda
see nüüd ütleb, et ma olen tegemise lubadus teile, et sees
Selle seisukoha töötleja klassi mul määratlused nii suva ja baar.
>> Miks on see kasulik?
Palju komponente sees iOS seda ära
disain muster kutsus delegatsioon, ja mida delegatsioon ütleb
on see, et näiteks kui mul on tekstikasti
ja seal on mõned sündmused, mis saab registreerida sees minu tekstiväljale
selle asemel et luua eraldi üritusi, mida ma teha saan, on võin öelda
delegaat seda tekstivälja on mingi objekti.
Kui ma ütlen, et see on delegaadi nüüd, mis tähendab, et
kui mõne sündmuse oleks vallandatud tekstikasti
selle asemel, et registreerida see või midagi sellist
see lihtsalt läheb helistada meetod delegaat.
Näiteks sees minu tekstiväljale Mul on meetod, kui ma vajutage
et teha nupp all paremal,
ja nii mitte registreerida sündmus, mida ma saan öelda on
tekstikasti, siin on objekt, mida ma tahan helistada meetod
iga kord, kui keegi vajutab nupule Done,
ja see tähendab, et objekt on rakendada mõningaid protokoll
mis ütleb, et ma luban, et määratleda, et teha nupp hagi,
sest kui see ei määratle seda meetodit ja teil vajutage Done
siis see saab olla segadusttekitav.
>> Võtame pilk näiteks.
Siin ma lihtsalt üks tekstiväli,
ja üks omadusi tekstiväljale siia selle paremal pool on delegaat.
See on vara klassi.
Mida ma tegin siin on minu kontrolli all klõpsatud, ja ma tirisid selle koha üle siin
seisukohale kontroller, ja mis ütleb nüüd delegaat seda tekstivälja
saab olema seisukohal, kontroller.
See tähendab, et kui mõned tegevused juhtuda, mitte registreerida
eraldi sündmuseohjurite Ma tahan, et sa saata neid delegaat.
Nüüd võtame pilk minu arvates kontroller.
Toas on. H fail Olen lubaduse.
Olen lubanud rakendada mõningaid meetodeid sees käesoleva protokolli
nimetatakse UITextFieldDelegate ja jälle,
see on lihtsalt mingi nimekiri mõned asjad, et ma ei soovi korral rakendada.
>> Kui ma tulen siia minu. M faili, mul on rakendatud üks selline meetod.
Ma helistasin ta textFieldShouldReturn
sest see on, mida ta kutsuti sees protokolli.
Ja nüüd kui ma vajutan nupule Done sees, et tekstiväli
need ongi hakka kutsutud, nii et ma ei registreerinud sündmus.
Ma ühendatud delegaat, ja kui see üritus on vallandati
See on meetod, mis saab nimetada, nii et kui ma tulen siia oma storyboard ja käivitage see-
Kuigi see on laadimise saame näha, mida see teeb.
Minu ekraanil Mul on 2 asja.
Mul on see tekstiväljale ja mul on see silt.
Ma lihtsalt ütlen ma tahan teksti see silt
võrdne olenemata kasutaja sisestatud sees tekstivälja.
See järgmisele reale siin on lihtsalt meetod, et ma helistan
teksti väli, mis ütleb, et ma tahan, et sa peida klaviatuuri.
See on lihtsalt suvaline meetod, et Apple valis.
>> Jällegi, enne tegin midagi oli mul juhe kõigest üles, nii et ma esimest korda siia tulin.
Alates arvates kontroller ma lohistage üle tekstikasti.
Lasen minna, ja ma näen siin, et ma saan teha seda tekstiväljale kinnisvara
kuna siin on seisukohal, kontroller Olen määratletud kinnisvara
mis on IBOutlet tekstivälja.
See ütleb, et võin traat see kinnisvara üles
kuni tekstiväli minu UI.
Nüüd kui ma vajutan seda ma ei hakka kirjutama.
Nüüd, kui ma vajutan nupule Done see saab tulekahju
Kui ma nüüd vastata.
Ei ole sündmusi käitlejad.
See, kuidas ma lihtsalt vastanud, et teha nuppu.
Mõtet?
>> See ei ole disain muster, mis-sa ei pruugi kunagi leida iseennast
luua oma protokolli, kuid lihtsalt tean, et mõned
erinevate iOS komponendid registreeru sündmusi erinevalt.
Nööbid, näiteks kasutada neid IBActions.
Tekstiväljad, teiselt poolt, ei kavatse kasutada delegaati.
Me näeme ja saad vaadata kõiki selle sees üles dokumentatsiooni.
Muide, seal on tegelikult ton UI kraami ehitatud iOS teile,
Nii näiteks, kuidas ma, et öelda teha allosas paremal
on mul valitud teksti alal.
Ma tulin siia.
Ma kerida alla natuke tagasi võti,
ja ma ei saa tegelikult teha seda terve hunnik asju, nagu siis, kui ma tahan, et öelda
hädaabinumbril asemel ma teha saan, et mis on täiesti juhuslik,
ja ma ei tea, miks seal on sisseehitatud hädaabikõne nuppu,
kuid seal, ta ütleb et helistada hädaabinumbrile tõesti väikeste tähtedega.
Seal sa lähed.
>> Kindlasti uurida kõiki neid erinevaid võimalusi iOS.
Iga küsimustele delegaadid?
Jällegi, lihtsalt huvitav disain muster, et te peaksite olema teadlikud.
Okei, järgmisel heita pilk tabelisse seisukohti.
Lauas on põhimõtteliselt, et loendit, mis on üle kogu koht iOS.
Kui olete flipping kaudu kõik oma kontaktid, te vaatate
milles leht, ja et selline nimekiri asjadest, nimetatakse tabelit vaadata.
Rakendamine Tabeli iOS on üsna lihtne.
Selle asemel, et klass, mis põlvneb et UIViewController
nagu me oleme teinud enne, kui me lihtsalt vaja öelda, selle asemel
kõik UIViewController ei ma tahan teha,
Ma ütlen kõike UITableViewController ei ma tahan teha,
nii et lihtsalt lisab mõningaid täiendavaid asju, mis on täiesti meie jaoks teinud.
Me peame tegema väga vähe põhimõtteliselt täita lüngad sees tabelis.
>> Selleks, et kuvada tabel mul on vaja vastata mõnele küsimusele.
Esimene küsimus, mis mul vaja vastata, kui palju lõigud on tabelis?
Kui olete flipping kaudu oma kontaktid rakenduse märkad, et see on selline
korraldatud Nagu, siis on BS, ja sul on see väike sub päises.
Kõik need on nn lõik.
Sul võib olla või ei vaja neid.
Esimene asi, mida pead tegema, on rakendada meetodit
nimetatakse Tableview: numberOfSectionsInTableView.
See lihtsalt tagastab mitu lõigud teil on,
nii et see võiks öelda tagastab ühe kui teil on üks suur tabel vaade.
Järgmine küsimus, mis iOS peab teadma, mitu rida sul on?
Näiteks, sa flipping kaudu tabelivaates.
Sul on kindel arv laulud vaatate või fikseeritud kontaktide arv.
Kui sa oled mulle muidugi ei ole, et paljud,
ja nii see on, kuidas iOS teab, kui palju rakke kuvada.
>> Jällegi, see võiks öelda midagi sellist tagasipöördumist 3.
Minu Lauas on 3 rida.
Lõpuks iOS peab teadma, mida iga rakk välja näeb,
nii et mida see tegelikult kavatsete teha, on kutsuda seda meetodit siin all,
Selle Tableview: cellForRowAtIndexPath.
See saab nimetame seda meetodit iga üksiku raku sees oma laua.
Kuidas see tea, mitu korda seda kutsuda?
Noh, sa ütlesid seda sees ridade arvu jagu.
Me läheme nimetame seda igale meie rakke,
ja sees on see, kus saab tegelikult teha asju nagu
määrata teksti või öelda, mida see väike sinine nupp paremal pool teeb.
Mustri saada need rakud, me ei kavatse kasutada seda meetodit
nimetatakse dequeueReusableCellWithIdentifier.
>> Objective-C on tegelikult väga tuntud naeruväärne pikkusele meetod nimed,
ja see on tõesti kena näide näide.
Mis see meetod on see lihtsalt ütleb, et ma tahan, et sa annad mulle raku.
Lihtsalt iOS asi.
Kui teil on midagi 100000 laule iPodi
Mis iOS ei taha teha, on eraldada 100000 rakku,
sest kui sa oled tipus oma nimekirja, sa tõesti vaja eraldada mälu
jaoks lahter, mis on 99000 rida alla?
Ei, sest kui sa kerides saad mingi eraldada lähete mööda.
Seda tehakse teile.
Sa ei pea muretsema kõik see loll tulemuslikkuse kraami.
Kõik, mida öelda, on te nimetate seda meetodit dequeueReusableCellWithIdentifier,
ja see ütleb, okei, kui teil on vaja Ma lähen luua uue raku teile.
>> Aga kui sa oled allosas laud ja olete juba eraldatud mõned rakud
ülaosas tabel, et sa tõesti ei kavatse vaja igal ajal kiiresti
Ma annan teile üks neist tagasi asemel eraldades uus,
ja nii on see kena tulemuslikkuse probleem.
Sa ei pea eraldama rakud ise.
See läheb teile tagasi raku.
See läheb tagasi teie raku objekti.
Kui olete lahtri objekti, mida saate teha asju ta.
Saate määrata tekst lahtri selle vara kutsus tekstipealdise.
Võite lisada, et nool paremale või mõni muu juhuslik kraam
Selle muu vara kutsus accessoryType, ja nii edasi ja nii edasi.
>> Võtame pilk tegelikult rakendatakse tabeli arvates nüüd.
Kui ma loodud selle projekti
mitte öelda ühe eesmärgiga taotluse Ma tegelikult tuli siia
master-detail taotluse, ja nii et põhimõtteliselt vastab see post app
iPad koos Lauas olles vasakul ja siis sisu paremal.
IPod või iPhone, et see saab vastama üks tabel vaade.
See, kus ma sain oma starter kood.
>> Vaatame kõigepealt heita pilk storyboard.
Kõik see oli minu heaks teinud, põhiliselt loodud.
See navigeerimisribal näitas mulle, mida näiteks raku võiks välja näha,
ja ma ei topeltklõps see, muudavad nime.
Igasugune muu UI muresid saan hakkama seal.
Päisefail tundub tõesti lihtne.
Selle asemel, et öelda, see on UIViewController me nüüd öelda, et see on
TableViewController, nii et me teame, mida me tahame helistada kõik need tabeli meetodeid.
Järgmine Ma tahan luua vara, mis läheb esindama
asjad sees minu lauale.
See tabel saab meelevaldselt kuvada
nimekirja puuvilju ja nii mul on vaja luua mõned massiivi
kus ma saan sisestada puu.
Toas minu rakendamise faili esimene asi, mida ma tahan teha
on ma tahan veenduda, ma initsialiseerida see massiiv.
>> Ma ütlesin alloc init, loonud oma puu massiiv,
ja ma olen lisades 4 asju see, millest üks on palju vastuolulisem kui teiste 3.
Ja nüüd on mul massiivi suurus 4.
Me loksutades üles CS50.
Mul on nüüd massiiv suurus 4.
Nüüd ma lähen alustada Neile küsimustele vastamiseks ja tegelikult,
kui ma lõi selle app see kõik oli seda juba teinud minu jaoks.
Ma ei pea sisestama välja osakondade arv tabelis arvates.
See oli juba seal, ja ma olen täites lüngad.
Mitu lõigud mul on?
Üks. Kõik tehtud.
Kui palju ridu mul on?
Noh, mul on üks rida iga puu, nii et see arv
on igasugune vara massiiv, mis ütleb, kui suur see on?
See on mitu rida mul on.
Lõpetuseks tuleb öelda, mida see iga rakk välja näeb?
Ma lähen ütlen dequeueReusableCellWithIdentifier.
>> Jällegi, see on juba kirjutatud, minu jaoks.
Ma ei pea seda tegema ise, ja ma tahan saada tagasi
See lahter on seotud selle asukoha.
Pea meeles, et me nõuame seda sama meetodiga, iga rakk,
ja see argument siin, see indexPath argument,
ütleb, mida järjest olen sees
Kui ma ütlen indexPath.row siia
see on 0, siis on 1, siis on see 2 ja see on nii et ma tean
mida raku Ma olen praegu väljapanek.
Ma tahan et tekst rakkude kasutades seda Tekstipealdis kinnisvara
minna sees minu puu massiivi ja saada
objekti, mis vastab iga rida.
Kui see on string, ma nüüd milles
Teksti vara näol.
Ma võin teha veel üks asi.
Võin ka registreerida sündmus iga rakku,
nii et kui ma puudutada iga nende rakkude
Selle didSelectRowAtIndexPath, see läheb kutsus mind,
nii lihtsalt määratledes selle saan nüüd hakkama mis juhtub
kui sa puudutage raku, ja jälle me möödaminnes, kus rakk oli ära
nii et me saame uuesti sama sündmus kõigile meie rakud.
>> Jällegi, see on midagi iOS teeb minu jaoks.
Olgem näidata teisele tüütu popup
et lihtsalt ütleb, et sa hakkasid midagi, kui et midagi
saab olema rida objekti.
Kui ma kasutan seda, ma lähen on see tore tabel vaade
üks rida iga puu, ja kui ma puuduta ühte
ta ütleb mulle, mis juhtus.
Mõtet?
Rajame natuke keerulisem on app,
nii palju kui klõpsate valisid tomat on.
Kena asi storyboarding
on see mitte ainult aita meid disain ekraanid eraldi,
see on ka aita meid lips koos kogu meie app,
nii lõplik app saadame hoone on see kena spordiuudiste lugeja,
ja nii see läheb mitu ekraanid, ja et ma saaks tegelikult esindavad
kõik need mitu ekraanid süžeeskeemil
ja võin suumida ja vaata minu app kõrgel tasemel.
>> Selleks, et luua uus element sees minu storyboard
see on tõesti lihtne sees Interface Builder.
Kui ma tahan lisada veel ekraanil see näiteks
Ma esimest suumimiseks koos näputäis zoom, et Apple armastab nii palju,
ja siia alla, enne kui ma otsida nuppu
ja ma lohistada nuppu
kui ma tahan luua uue ekraani ma ei saa tegelikult lihtsalt lohistada
kogu vaade kontroller, nii et kui ma valin selle, tõmba see siin,
Hei, seal on teine ​​ekraan ja nüüd kasutavad seda sama storyboard fail
Võin olla kõik ekraanid sees minu app, ja ma ei suumimiseks
ja näha, kuidas nad suhelda.
Need ei suhelda veel.
Kuidas need 2 ekraanilt suhelda on teil määratleda suhteid.
Võite põhimõtteliselt öelda seda ekraani, kui vajutad seda nuppu,
Ma tahan, et sa libisema üle selle uue ekraani.
See tähendab, et seal on selline seos
Esimene ekraan ja teine ​​ekraan.
Sul on põhimõtteliselt nool sellest nuppu teine ​​ekraan
öeldes, et kui vajutate seda nuppu, see on kui ma tahan minna.
Just nagu me kontrolli klõpsatud ja tirisid määratleda neid müügikohti
me teeme sama asja määratleda need segues.
>> Me näeme näiteks, et, ja enne kui me tegelikult üleminek
ühest ekraani teise iOS on kena piisavalt nimetame seda meetodit
nimetatakse prepareForSegue, ja see on koht, kus saame alustada
Andmete saatmisel ühest app teise.
Näites me parasjagu vaatate siis põhimõtteliselt võimaldab meil
filtreerida pesapalli meeskonnad poolt liigad ja vaheseinad.
Kui ma valida liiga, näiteks, ma tahan üleminek
minu kõrval ekraani, kus ma saan kuvada kõik vaheseinad
selles liigas või kõik erinevad meeskonnad.
Ma pean saatma, et ekraani mis meeskonnad siis peaks kuvama.
Selleks, et ma lähen ära selle meetodi siit.
>> Lõpuks lihtsalt juhuslik punkt iOS.
Kui soovite salvestada andmeid seal on see asi, mida nimetatakse põhiandmed,
mis on tegelikult omamoodi keeruline töötada.
Võite kasutada SQL andmete salvestamiseks,
mis jällegi on kena, kuid sellist kohta keerulisem pool tööd,
kuid iOS toetab ka neid lahedaid asju nimetatakse kinnisvara nimekirjad,
ja vara nimekiri on lihtsalt fail, mis esindab põhiväärtus paari.
Saate määrata Võtmete loendi ja ütled, et see võti saab olema massiiv.
See võti saab olema string, ja põhimõtteliselt midagi, mida saate teha
JSON saate teha sees vara nimekirja,
ja nii see tõesti kenasti annab meile võimaluse töötada koos mõned andmed.
Näiteks, mul on see Teams.plist, et olen loonud.
Olen loonud uue plist fail ja ma ei süvitsi.
See on sõnaraamat, see on sõnastik, need on stringid,
ja nii see on kena graafiline esitus JSON dokument
või lihtsalt kogum põhiväärtus paari,
ja nii on see info, et ma töötan koos sees minu app.
>> Vaatame kõigepealt tule siia. Meil on palju rohkem faile nüüd.
Aga las esimene tule siia süžeeskeemile.
Storyboard siin-kui ma saan zoom out-
näeme nüüd, et see on voolu minu app.
Ma olen esimene hakkan sellel ekraanil.
Ma lähen süvitsi sellele ekraanile,
ja ma lähen süvitsi sellele ekraanile, ja näeme siin, et kui ma mingi
liikuda üks neist umbes oleme need nooled lähevad siit siiani,
ja kuidas ma kindlaks, et nool oli, kui ma suumida natuke,
ja kui ma tulen sinna sellele et kontroller,
ja siin on rakk, ma tahan öelda, et kui sa puudutage raku
Ma tahan, et sa libiseda üle teisele ekraanile.
Võin lihtsalt hoidke kontrolli,
leidke üle natuke, hoidke kontrolli, lohista see rakk üle ja lase lahti.
>> Ja siin me ütleme, mis on ülemineku, mida soovite kasutada?
Kas soovite kasutada seda slaidi asi, mis kutsus push?
Kas soovite slaidi alt?
Seda nimetatakse modaal.
Ja kui ma vajutan üks neist, see saab juhtida see nool minu jaoks,
ja see tähendab, et ma olen tegelikult käideldakse mis juhtub, kui ma vajutan seda nuppu graafiliselt.
Ma ei kirjuta ühtegi koodi tegelikult libiseb ühest ekraani kõrval üks.
Ma määratletud see visuaalselt sees Interface Builder.
Kui ma vajutan seda noolt, siis näeme, et andsin selle asja nimi.
Ma helistasin talle showDivisions, ja see on, et ma saaksin teada,
mida üleminek on umbes tekkida, ja me näeme, miks just sek.
See, kuidas ma olen wired up erinevad ekraanide minu app.
Kui see nupp, näiteks, selle asemel laua arvates
Ma võiks kontrollida vajutage nupule, lohistage üle järgmisele ekraanile,
ja see on, kuidas ma saan teha navigation nii.
>> Tõesti kiiresti, kui me tuleme MasterViewController,
uuesti, me lihtsalt läheb määratleda nimekiri asjadest
mis kuvatakse tabelis arvates.
Siin ma väidan ma tahan sind võtta, et plist faili
ja ma tahan, et sa seda laadida üles võetud sõnastik
ja kui sul on see sõnastik, ma lähen vastata samad küsimused uuesti.
Siin on osakondade arv.
Üks on üks rida iga meistritiitli ning teksti iga rakk
peaks olema kas esimene, esimene liigas teine ​​liiga, ja nii edasi.
Lõpuks ma lähen kasutada seda meetodit, et me just nägime nimetatakse prepareForSegue,
ja see on meetod, mis saab olema vallandati, kui ma klikin
üks neist ridu ja seetõttu aktiveerides et üleminek
et ma loodud nooled.
See ütleb, et ma võib olla mitu
suhted ühest ekraani teise.
Kui mul on 2 nuppu ja iga nupp viib teid erinevat ekraani
Ma lähen on 2 segues, 1 iga nuppu.
Aga see prepareForSegue on taas hakatakse uuesti
iga erinevat suhet, nii et see tähendab, et mul on vaja nii
kindlaks, kui vajutate esimest nuppu või vajutad teist nuppu.
>> Mäletad, kui ma andsin, et segue nimi, see showDivisions,
et kuidas ma nüüd tean, et see on segue et avanes.
Kõik, mida ma tahan teha, on Ma tahan öelda
Ma tahan aru saada, mida ma lihtsalt tabanud,
ja nii saada, et võin öelda ma tahan indexPath valitud rida,
Jäta indexPath lihtsalt ütleb, kus ma lihtsalt klõpsatud,
ja siis ma tahan öelda, et ma tahan aru saada, kus ma lähen.
See destinationViewController, et on vara segue.
See on ekraani ma lähen,
nii et ma tean, et ekraan ma lähen nimetatakse DivisionsViewController
sest ma lõin selle klassi
ja nii nüüd kui ma ütlen d.divisions
Ma nüüd milles vara seisukohal kontroller ma olen umbes minna.
See, kuidas ma saadan andmeid ühest ekraani teisele ekraanile.
>> Lihtsalt vaatab seda DivisionsViewController
näete siin, et. h fail
seal on see, et vara jagunemise, ja see on, mida ma põhimõtteliselt populating,
nii et kuidas ma tean, et ma väljapanek vaheseinad vastab
Liiga et ma klõpsatud ja jälle,
tegelik tabel arvates näeb välja üsna sama, lihtsalt vastata neile
3 lihtsat küsimust samuti kindlaks
Mis juhtub, kui sa liikuda edasi järgmisele ekraanile.
Lihtsalt paar muud asjad siin.
Märkate ülaosas siin, et mitte öelda # include
Ma nüüd öelda # importida.
See on vaid Objective-C asi.
Import on põhimõtteliselt kenamaks versioon sisaldavad
ja näiteks, me peame teadma, mida see klass on,
nii et ma ei saa lihtsalt öelda DivisionsViewController.
Kui me ei hashtag standardio.c sees meie. C faili
kompilaator polnud aimugi, mida printf oli.
Samamoodi, kui ma ei impordi DivisionsViewController
kompilaator tõesti ei tea, mis DivisionsViewController on.
Lihtsalt veenduge, et sees oma erinevad. M faile veenduge importida
vastav. h faile nii, et kompilaator teab, mis toimub.
>> Lõpuks, mida Apple lõpuks ei ei näidataks teatavaid andmeid kasutades web arvates
ja nii veebi vaade on objekt, mida saab kinnistada
vähe veebibrauseri sees oma app.
Kõik, mida pead tegema, on pakkuda URL oma veebibrauseri
nii et ma tahan minna mlb.mlb.com,
ja see, kuidas ma saan kasutada kodulehekülg iga meeskond,
ja nii sooritades see URL
Web View kuvada seda minu jaoks, ja ma võin sirvida ringi,
ja simulaator on kasutusel, et üks.
Nüüd on see tuli minu plist.
Kui ma vajutan seda see ka tuli minu plist, ja seda libistades tegelesid
määratledes need segues.
Ma vajutan seda ja veel üks,
ja nüüd siin on minu UIWebView, nii nagu see
siin on kodulehel link, et ma lihtsalt varjatud,
ja ma ei pea hakkama midagi hull.
See on kuidas kuvada veebilehel.
Asjad nagu see back-nupule siin on toodud ka mulle
täiesti tasuta, sest ma olen määratletud nende suhete kasutades segues.
>> Kas on küsimusi? Jah.
[Student] Nii et kui te kasutate alloc, sa ei pea kunagi tasuta midagi?
Täpselt, kui helistate alloc ja init teil ei ole vaba ta.
IOS läheb hakkama kõik, et teie jaoks.
See on suurepärane, ja sa ei ole purustamine tahes reeglid. Jah.
[Student] Kui sa olid sisaldavad rohkem võistkondi, mis võiks mahtuda ekraanile
oleks see automaatselt leidke valik, või on see midagi, mida vaja lisada?
Täpselt, kui mul oleks rohkem võistkondi, näiteks, oleks automaatselt käidelda
kerimine minu jaoks, ja kõik jõudluse probleeme
tohutu tabeli käideldakse ka täiesti minu jaoks.
>> Muud küsimused?
Kõik see kood saab olema postitatud.
Me mingi ilustatud natuke rohkem pisidetailidest,
aga asjad, millega mõned omadused veebi vaade
on lihtsalt asju, mida saad sirvides Apple'i dokumentatsioon,
mis on tõesti väga kenasti sätestatud.
Neil on palju proovi rakendused ja näiteks tavasid
erinevate rakendusliideste, et kindlasti tutvuma need, kui saad.
Lihtsalt mõned kasulikud lingid võiksite heita pilgu.
Need on mõned käepärased dokumentatsioon giidid.
Aadressid on tohutu, nii et nad lühendada.
See esimene on kogu raamatukogu dokumentatsiooni.
Seal on vähe otsing baarid, nii et kui te alustate tippimist nuppu
see hakkab andes sulle kogu infot kõik asjad, mida saate teha koos ühe nupuvajutusega.
Olen ka tabel Vaata saatekava.
Ta tegeleb tabeli vaatamist palju detailsemalt,
kuidas teha asju nagu dünaamiliselt lisada rakke või redigeerida rakkude või eemaldada.
>> Seal on palju proovi apps Apple, mis näitab teile, kuidas seda teha,
ja lõpuks, see viimane on Human Interface Suunised,
ja see on põhimõtteliselt mingi arutelu kasutajaliidese komponendid,
asjad ei tee nupp, mis on 4 pikslit 4 pikslit.
See on halb idee, ja muid asju, et Apple tahab, et sa
julgustada hea.
>> Iga viimane küsimus enne kui me lopeteltiin?
Olgu, kindlasti julgelt-Me on eriline etiketid arutada.
Me peame iOS üks, nii kindlasti vabalt kasutada, et.
Kui te soovite töötada oma klassikaaslastega projektide
või aitavad aru saada mõne juhusliku iOS värk
emaili mulle, ja kindlasti tutvuma kõik koodi internetis sest
lihtsalt huvides kord, kui me sellist ilustatud rohkem
Peenema tekstuuriga üksikasjad asju.
Aga kui mitte, siis hea õnne oma iOS projektid, ja ma loodan, et oleme
suur sissevool apps App Store.
[CS50.TV]