Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Software
Nastal čas na kakao...
Obsah seriálu:
Xcode 4: akční schémata
Minule jsme si vysvětlili, čemu se v Xcode říká "schéma", co je jeho obsahem a jak se to používá. Dnes povídání o schématech dokončíme.
Xcode 4: základy schémat
Další z věcí, o nichž jsme se dříve zmínili jen zběžně, a na které je potřeba se – než dokončíme blok, věnovaný vývojovému prostředí Xcode – podívat trochu podrobněji, jsou tzv. schémata.
Xcode 4: co je to Workspace?
Než opustíme sérii článků o práci v prostředí Xcode a pustíme se opět do programování, zbývá dokončit několik drobností, o nichž jsme se dříve sice zmínili, ale nezabývali jsme se jimi podrobněji. Dnes se podíváme na "Workspaces".
Xcode 4: okno Organizer, část druhá
Dnes dokončíme popis obsahu a služeb okna Organizer v Xcode.
Xcode 4: okno Organizer
Ta část našeho seriálu o programování v prostředí Cocoa, v níž se podrobně zabýváme prací ve vývojovém prostředí Xcode, se pomalu chýlí ke konci; zbývá nám uzavřít jen několik samostatných drobností, z nichž jednou je okno Organizer.
Xcode 4: levý sloupec
V našem seriálu, který se v součanosti zabývá prací ve vývojovém prostředí Xcode, se dnes podíváme blíže na levý sloupec, jenž poněkud neorganicky sdružuje řadu nepříliš souvisících služeb.
Paletky Xcode pro XIBy
Po inspektorech v editoru XIBů se dnes blíže podíváme na jeho palety.
Vazby mezi objekty v kódu
V minulém dílu našeho programátorského seriálu jsme si ukázali, jak v Xcode sestavovat vazby mezi objekty; dnes se podíváme podrobněji na odpovídající implementaci v kódu.
Vazby mezi objekty v XIBech
Minule jsme si ukázali podrobněji všechny inspektory, jež Xcode v režimu editace XIBů nabízí. Slíbili jsme si také, že dnes se podíváme na práci s vazbami mezi objekty.
Inspektory pro XIBy
Inspektory jsou jedním z nejdůležitějších prvků editoru XIBů: právě jejich prostřednictvím nastavujeme nejrůznější atributy objektů, jež síť tvoří – to, co bychom jinak museli dělat programově pomocí odpovídajících služeb API.
Editor XIBů
V poslední době se v našem seriálu zabýváme NIBy a XIBy – jak už víme, jde jen o dvě různá jména téže věci. Vysvětlili jsme si velmi podrobně, oč vlastně jde; nyní se začneme zabývat podporou v Xcode pro práci s těmito soubory.
Více o XIBech
V předchozím dílu našeho seriálu o programování počítačů s operačními systémy Mac OS X a iOS ve vývojovém prostředí Xcode jsme se začali zabývat "XIBy", sloužícími převážně (ale ne výhradně) k tvorbě grafického uživatelského rozhraní. Dnes si toho o nich řekneme více.
XIBy chyby
V dnešním pokračování seriálu o práci ve vývojovém prostředí Xcode se začneme zabývat editací "XIBů" – objektových sítí, sloužících především (ale zdaleka ne výhradně) pro pohodlné sestavení grafického uživatelského rozhraní aplikace.
Xcode4: automatické doplňování v editoru
Minule jsme přešli od nastavení projektů a cílů k editoru zdrojových textů: ukázali jsme si asistenta a vysvětlili, jak se s ním v pracuje a v čem se liší od podpory práce s více zdrojovými soubory v jediném okně v Xcode 3. Dnes se podíváme přímo do vlastního editoru.
Xcode4: taje editoru
Dnes se v našem seriálu pustíme do novinek, jež přináší editor zdrojového kódu v Xcode 4; začneme poněkud zmatenou podporou práce s více dokumenty najednou.
Xcode 4: Co jsou to Build Rules?
Dnes dokončíme přehled nastavení cílů a projektu základními informacemi o "Build Rules".
Xcode4: Build Phases podruhé
V současnosti se v našem seriálu o programování v prostředích Cocoa a iOS zabýváme novinkami vývojového prostředí Xcode 4. Minule jsme se seznámili s "Build Phases"; dnes si toho o nich řekneme trochu více.
Xcode 4: Build Phases
V nastavení "Build Settings" se již vyznáme; nastavení cíle ale ještě neopustíme a podíváme se dnes blíže na vlastní popis toho, jak se přesně cíl sestavuje – "Build Phases".
Xcode 4: Build Settings
Dnes se podíváme trochu blíže na snad nejsložitější část atributů projektu – na "Build Settings".
Xcode 4: práce s cíli
V minulém dílu našeho seriálu jsme si podrobně vysvětlili, co je to projekt a cíl; naučili jsme se pracovat s odkazy na soubory, jež projekt obsahuje, i s atributy vlastního projektu. Dnes se soustředíme na cíle.
Xcode 4: projekt a cíle
Dnes si v rámci naší túry prostředím Xcode 4 doplníme informace o službách, jež najdeme v horní liště okna, a pak se budeme podrobně věnovat pojmům "projekt" a "cíl", vysvětlíme si jejich smysl a obsah, a začneme si ukazovat kde – a jak – s nimi v novém SDK pracovat.
Programování pro iOS - 45. Práce v Xcode 4
Jak jsme si slíbili v minulém dílu, dnes konečně otevřeme v Xcode 4 projekt a pustíme se do práce; soustředíme se samozřejmě především na služby a (ne)možnosti IDE.
Programování pro iOS - 44. Předvolby Xcode 4
Xcode 4 má bohatou sadu předvoleb, ačkoli zdaleka ne tak bohatou, jako tomu bylo v "trojce". To je dobře, protože jsou přehlednější; zároveň je to ale špatně, protože mnohdy nelze nastavit požadované chování. Pojďme se na ně dnes podívat podrobně.
Programujeme v iTunes Xcode 4
Dnes a v několika následujících článcích se podíváme blíže na nové vývojové prostředí Apple – Xcode 4. Začneme novinkami, jež nabízí aktuální verse překladače Objective C (jde jen o jednu drobnost, ale příjemnou), a pak se již soustředíme na SDK a jeho (ne)možnosti.
Programování pro iOS - 42. UISplitViewController
Dříve, než se pustíme do podrobného výkladu služeb, možností, výhod a také nedostatků a nedomyšleností nového vývojového prostředí Xcode 4, dokočíme naši současnou sekci věnovanou řídicím objektům rámců. Moc nám toho zde již nezbývá.
Programování pro iOS - 41. Zbývající služby UIPopoverControlleru
V součastnosti se zabýváme službami třídy UIPopoverController, jež slouží na iPadu pro zobrazování "okének", plovoucích nad hlavním grafickým rámcem. Dnes toto téma dokončíme.
Programování pro iOS - 40. Další triky UIPopoverControlleru
V předcházejícím dílu jsme se seznámili s třídou UIPopoverController a ukázali jsme si prvý z drobných podrazů, jež na nás její programátoři upletli. Dnes si ukážeme několik dalších.
Programování pro iOS - 39. UIPopoverController
V minulém dílu našeho seriálu jsme dokončili popis základních služeb řídicího objektu pro "tab bar" a také jsme si sestavili jednoduchou testovací aplikaci. Dnes kód této aplikace rozšíříme o použití třídy UIPopoverController.
Programování pro iOS - 38. Dokončení UITabBarControlleru
Dnešním dílem našeho seriálu o programování v iOSu dokončíme to, co si chceme říci o UITabBarControlleru. Vytvoříme také novou ukázkovou aplikaci, v níž si budeme některé z postupů ilustrovat.
Programování pro iOS - 37. Více o UITabBarControlleru
Více o UITabBarControlleru: dnes si ukážeme ukládání pořadí "tabů".
Programování pro iOS - 36. Po navigátoru taby
V minulém pokračování našeho seriálu, věnovaného programování aplikací v iOSu, jsme dokončili povídání o třídě UINavigationController; dnes budeme pokračovat další obecnou třídou, UITabBarControllerem.
Programování pro iOS - 35. Ještě jednou UINavigationController
Posledních pár dílů našeho seriálu se zabýváme možnostmi a službami třídy UINavigationController, která usnadňuje sestavování aplikací, jež pracují s hierarchicky strukturovanými daty. Dnes si ukážeme několik posledních zajímavostí, s nimiž můžeme při jejím používání často přijít do styku.
Programování pro iOS - 33. Více o UINavigationControlleru
Minule jsme si ukázali základy práce se standardním řídicím objektem pro hierarchické zobrazení – tedy s třídou UINavigationController. Dnes se seznámíme s některými jejími dalšími možnostmi.
Programování pro iOS - 33. Řídicí objekt pro strom
V představování specifických řídicích objektů rámců se dnes podíváme na další – na třídu UINavigationController.
Programování pro iOS - 32. Řídicí objekt pro tabulky
V současnosti se náš seriál soustředí na řídicí objekty rámců. V minulých dílech jsme se seznámili s obecnými službami, jež nám nabízí sama třída UIViewController (a tedy také všechny její podtřídy); dnes se začneme věnovat některým speciálním řídicím objektům, jež iOS nabízí.
Programování pro iOS - 31. Správa paměti v rámcích
Zařízení s operačním systémem iOS mají obvykle nouzi o operační paměť. Třída UIViewController – a díky dědičnosti také všechny její podtřídy – tento požadavek pomáhá plnit zajímavým a docela efektivním způsobem, který si dnes vysvětlíme podrobněji.
Programování pro iOS - 30. Rotace zařízení
Dnes se soustředíme na služby podporující změny zobrazení při rotaci: jak každý uživatel ví, u zařízení s operačním systémem iOS je poměrně běžné, že bez ohledu na to, jak zařízení natočíme, zůstává grafické uživatelské rozhraní "hlavou nahoru".
Programování pro iOS - 29. Práce s rámci
Od minula konečně umíme řídicí objekty rámců používat – tedy zobrazovat rámce spravované některým z nich. Dnes si ukážeme služby, které při zobrazování (a skrývání) rámců můžeme v řídicím objektu využít.
Programování pro iOS - 28. Základní služby
Už umíme vytvářet řídicí objekty rámců a jimi spravované rámce. Dnes se podíváme na základní služby, jež nám tyto objekty nabízejí. Začneme vzájmeným překrýváním obrazovek.
Programování pro iOS - 27. Kde vzít rámce
Kde a jak se vezmou rámce, jež spravuje řídicí objekt (instance třídy UIViewController nebo některé z jejích podtříd)? O tom podrobně pojednává dnešní díl.
Programování pro iOS - 26. Jak se dělá UIViewController
Jaké je postavení řídicích objektů rámců, k čemu slouží a proč se bez nich jen těžko můžeme obejít už víme. Dnes se pustíme do jejich konkrétního programátorského rozhraní. A začneme samozřejmě tím základním – jejich výrobou.
Programování pro iOS - 25. Řídicí objekty rámců
Jak jsme si slíbili ještě před vsunutím několika dílů, popisujících taje a zákoutí "multitaskingu", budeme se v našem seriálu teď nějakou chvilku věnovat řídicím objektům rámců (tedy práci s třídou UIViewController a jejími dědici).
Programování pro iOS - 24. Zbývající drobnosti
Možnosti a omezení tzv. multitaskingu v iOS 4 zbývá doplnit o ukázku deklarace aplikace jako "více multitaskové, než ostatní". Připomeneme také několik potenciálních podrazů, na něž při využívání těchto služeb můžeme narazit.
Programování pro iOS - 23. Jak se aktivovat, jsme-li v pozadí
Známe už základy hry, kterou s námi iOS hraje a víme, jak si vyžádat trochu více času ve chvíli, kdy je aplikace odsunuta z obrazovky. Co ale v případě, kdy bychom ji potřebovali aktivovat o něco později?
Programování pro iOS - 22. Nulla est honesta avaritia nisi temporis
Senecův známý citát si patrně programátoři Apple vzali až příliš k srdci; časem (procesoru) totiž iOS skrblí přímo ukrutně a přidělit jej aplikaci, jež zrovna není v popředí, se zdráhá. Dnes si – jak jsme si slíbili minule – ukážeme, jak si vyžádat času alespoň malinko více, než kolik jej běžně máme k dispozici.
Programování pro iOS - 21. "Multitasking"
Dříve, než se pustíme do slíbeného detailního rozboru práce s řídicími objekty rámců (UIViewController), podíváme se ještě trochu blíže na "multitasking". Ukážeme si konkrétní API, jež máme pro jeho řízení k dispozici, a také si řekneme, na co a jak si dát pozor.
Programování pro iOS - 20. Co nového v iOSu
Už dávno jsme se v redakci domluvili, že jakmile bude iOS 4 veřejně k dispozici pro celou řadu zařízení Apple, podíváme se na jeho novinky z pohledu programátora.
Programování pro iOS - 19. Další standardní recognizery
Minule jsme se seznámili s trojicí standardních tříd UITapGestureRecognizer, UILongPressGestureRecognizer a UIPanGestureRecognizer umožňující implementovat rozpoznávání běžných gest. Dnes jsou na řadě zbývající standardní recognizery.
Programování pro iOS - 18. Recognizery v iOS
Další díl našeho seriálu o programování zařízení s iOS se zabývá konkrétními recognizery, které v systému naleznete. Zde jsou prvé z nich.
Programování pro iOS - 17. Podpora standardních gest
Problémy s detekcí gest si naštěstí uvědomil samotný Apple. Od verze iOS 3.2 zahrnul do systému novou třídu UIGestureRecognizer: umožňující pohodlnou implementaci detekce gest nezávisle na rámci. Systém navíc standardně nabízí hotové rekognizery pro všechna standardní gesta.
Programování pro iOS - 16. Více prstů, více zábavy
Sérii článků o interpretaci běžných gest s využitím standardního API prostředí iOS, založeného na zprávách touches...withEvent:, dnes ukončíme tím nejsložitějším. Ukážeme si základy práce s víceprstými gesty.
Programování pro iOS - 15. Další gesta
Minule jsme se začali zabývat tím, jak pomocí standardních metod touches... withEvent: pro správu událostí dotekového ovládání implementovat jednoduchý a vícenásobný dotek. Dnes se podíváme na tažení a s tisknutí.
Programování pro iOS - 14. Udělejme gesto
Jak přidat do kreslícího prográmku z minula podporu gest? Toť obsahem čtrnácté lekce našeho kurzu programování.
Programování pro iOS - 13. Kreslíme na iPhone
Chcete-li napsat aplikaci umožňující kreslení jednoduchých obrázků na displeji iPhonu, je třináctý díl našeho seriálu stvořený právě pro vás.
Programování pro iOS - 12. Touching!
Systém iOS podporuje různé eventy. V praxi je ale nejpodstatnější správa dotykové obrazovky, na kterou se podíváme dnes a v několika dalších pokračováních.
Programování pro iOS - 11. Jak dostat aplikaci do libovolného iPhone
Už minule jsme viděli, že distribuce aplikace na zařízení betatesterů není nic jednoduchého. To ale není pořád nic proti tomu, čím se budeme muset prokousat dnes, kdy si budeme povídat o instalaci aplikací na AppStore.
Programování pro iOS - 10. Instalace aplikace do cizího iPhone
Pokud je vyvíjená aplikace jen trochu složitější, vyplatí se ji nechat otestovat skupinou betatesterů. Jak ji nahrát na jejich iPhony a jak umožnit používání aplikace klientovi, který chtěl privátní aplikaci na míru, se dozvíte v dnešním pokračování seriálu.
Programování pro iOS - 9. Jak dostat aplikaci do iPhone
Prvá verze bouřkoměru je hotová. Před odesláním aplikace do AppStore je ale samozřejmě zapotřebí ji vyzkoušet na skutečném hardwaru. V našem případě v iPhone.
Programování pro iOS - 8. Dokončení aplikace
Aplikace pro měření vzdálenosti bouřky nám hezky vyrostla pod rukama. Zbývá dokončit pár posledních detailů a verzi 1.0 prohlásit za hotovou.
Programování pro iOS - 7. Správa paměti a starý restík
Základní funkcionalitu naší bouřkové aplikace máme hotovou. Ještě však pořád zbývá doplnit několik věcí. Minule jsme se naučili ukládat a načítat data. Dnes si ukážeme další standardní paměťovou techniku iOSu. A doplníme také jeden malý restík.
Programování pro iOS - 6. Ukládání dat
Je čas začít doplňovat další služby, které funkci aplikace dále zdokonalí. Začneme ukládáním dat.
Programování pro iOS - 5. Rámce a jejich řídicí objekty
Vylepšujíce postupně naši aplikaci pro zjištění vzdálenosti bouře, dostáváme se ke zobrazení záznamů z historie. Využijeme k tomu překryvného rámce; zčásti proto, že je to celkem rozumné, a hlavně proto, abychom se s těmito rámci naučili pracovat.
Programování pro iOS - 4. Varovná hlášení
Začneme aplikaci trochu vylepšovat. Přitom si ukážeme řadu standardních technik, jež se používají při programování aplikací v iOS. Dnes to bude práce s varovnými hlášeními - alerty.
Programování pro iOS - 3. základní ovladače a propojení GUI s kódem
Projekt pro sestavení jednoduché aplikace na iPhone máme hotový a od minule víme, k čemu slouží jednotlivé části projektu a jaké jsou jejich vzájemné vztahy. Na řadě je Interface Builder a úprava aplikace k našemu obrazu.
Programování pro iOS - 2. Začínáme programovat
Rozdíly mezi Mac OS X a jeho omezenou, uzavřenou verzí iOS máme za sebou. Dnes se pustíme do samotného programování pro iOS.
Programování pro iOS 1. díl - Rozdíly mezi "i" a "Mac"
Začneme od základů. Seznámíme se s nejpodstatnějšími rozdíly mezi vývojovým prostředím Mac OS X a iOS. Příště se pustíme do sestavování jednoduché aplikace ilustrující jednotlivé postupy.
Systémové prvky GUI
Dnes se již ponoříme do "opravdických" novinek samotné objektové knihovny AppKit, a začneme novou možností specifikovat požadované nastavení systémových prvků GUI.
A máme tady i...OS!
Se správou MujMacu jsme se domluvili, že v našem seriálu "Nastal čas" už nejen na Kakao, ale také na iPhone OS. Nebudeme se zabývat nejzákladnějšími základy sestavování aplikací; budeme se ale věnovat zajímavým oblastem API.
Zabíjení!
Ne, nezměnili jsme žánr – nová služba Irbise (pro ty, kdo nemají rádi přeložená jména, systému Snow Leopard), na kterou se dnes podíváme, se v běžném jazyce označuje „fast killing“ (v politicky korektním newspeaku oficiálního API ovšem „sudden termination“).
Další podpora NSURL
Dnes si ukážeme několik z nejpodstatnějších doplňků a rozšíření ostatních tříd, jež nyní práci s odkazy na soubory prostřednictvím instancí třídy NSURL nabízejí.
Soubor, jméno, URL, jak se to rýmuje...
V Mac OS X 10.6 se programátoři Apple rozhodli zavést nový, plně konsistentní systém odkazů na objekty na disku. Ačkoli by v zásadě bylo možné na to navrhnout novou třídu nebo služby připojit k třídě NSString, obě řešení by nesla poměrně podstatné nevýhody; proto byly nové služby "naroubovány" na třídu NSURL.
Kde jsou má data? V NSCache!
Na dnešek jsme si pak nechali nový kontejner, určený právě pro ukládání dočasných objektů, jež podporují protokol NSDiscardableContent – třídu NSCache.
Kde jsou má data?
Používání cache – dočasné paměti – je samozřejmě prastarý programátorský trik. Programujeme tak všichni už léta a léta; Irbis to ale usnadňuje pomocí nových tříd a služeb; na ty se podíváme právě dnes.
Irbis a Foundation Kit
Nyní postoupíme o kousek dál a ukážeme si, co je nového v knihovně základních tříd, ve Foundation Kitu.
Bloky jsou i v AppKitu
Předminule jsme si vysvětlili, co to bloky jsou a jak se používají; minule jsme si ukázali nejdůležitější z nových „blokových“ služeb, s nimiž se setkáme ve Foundation Kitu, a dnes sérii zakončíme tím, že si ukážeme nové „blokové“ služby v aplikačních knihovnách.
Blok sem, blok tam, nám už je to všechno jasné...
Dnes se podíváme blíže na řadu dalších služeb, jež bloky v Mac OS X 10.6 usnadnily.
Irbis: že prý žádné novinky?
Více než po roce se opět vracíme se seriálem o programování v Kakau – je zde nová kočka s novými možnostmi, a na ty se v následující sérii článků podíváme blíže.
Ubicumque dulce est, ibi et acidum invenies...
Objective C 2.0 je krásná věc a přináší – zvláště pro ty, kdo si mohou dovolit se omezit na čtyřiašedesátibitové prostředí – řadu nezanedbatelných výhod, z nichž asi nejvýraznější je naprosté odstranění problémů s "fragile class". Jenže bohužel, přináší také nové problémy....
64 je dvakrát 32
Jednou z nejvýznamnějších novinek Leoparda pro nás, programátory v prostředí Cocoa, je to, že nyní máme plně k dispozici všechny možnosti a výhody čtyřiašedesátibitového prostředí.
Druhé Objective C: atributy a accesory
V posledním dílu našeho seriálu, věnovaném rozšíření jazyka Objective C 2.0 – následující díly, zabývající se čtyřiašedesátibitovým prostředím a službami Foundation Kitu, budou samozřejmě s jazykem úzce souviset, ale přece jen jde již o něco jiného – ukážeme si pohodlnou tečkovou notaci pro přístup k atributům objektu prostřednictvím accesorů.
Druhé Objective C: atributy a accesory
V tomto dílu našeho seriálu, věnovaném rozšíření jazyka Objective C 2.0, si ukážeme nové služby pro deklaraci atributů objektů a generování accesorů.
Druhé Objective C: nový příkaz cyklu
Příjemnou novinkou Objective C 2.0 je také speciální příkaz cyklu, umožňující přímo procházet objekty uložené v libovolném typu kontejneru.
Druhé Objective C: kategorie a protokoly
Doplňky a rozšíření jazyka Objective C ve verzi 2.0 se nevyhnuly ani kategoriím a (formálním) protokolům. Zatímco nová služba kategorií – možnost specifikovat tzv. rozšíření třídy ("extension") – je poměrně kosmetická a přináší v podstatě jen o trochu lepší překladovou kontrolu, novinka protokolů je zcela zásadní: teprve zavedením nepovinných metod se protokoly staly v praxi skutečně použitelnými.
Druhé Objective C: různé drobnosti
Dnes si popíšeme řadu drobností, z nichž žádná si nezaslouží samostatný článek: ne, že by byly nepodstatné (kupříkladu definitivní odstranění syndromu "fragile class" je snad vůbec nejvýznamnějším přínosem Objective C 2.0), ale proto, že jejich přímý dopad na jazyk jako takový je poměrně malý.
Druhé Objective C
Jak jsme si slíbili v minulém článku, v popisu novinek Leoparda začneme tím, co je nového v jazyce Objective C. Po velice dlouhé době, kdy – vyjma doplnění výjimek a synchronizace – nebylo nového nic, se toho tentokrát "urodilo" poměrně dost.
Kakao v Leopardu
Po pauze se opět vracíme s dalšími díly seriálu, který se věnuje programování v prostředí Cocoa operačního systému Mac OS X: Leopard je mezi námi, takže je na čase se podívat na to, co nového přinesl programátorům.
Služby WebKitu
V předcházejícím dílu našeho seriálu o programování ve vývojovém prostředí Cocoa jsme se prvně seznámili se třídou WebView, jež je součástí frameworku WebKit. Minule jsme se vlastnímu WebKitu moc nevěnovali: sestavili jsme jednoduchý webový browser s využitím těch nejstandardnějších služeb. Dnes si však o frameworku a jeho možnostech řekneme trochu více.
Safari za minutu
Minule a předminule jsme si ukázali programové načítání obsahu daného URL; dnes se začneme zabývat možnostmi samostatné knihovny služeb, frameworku WebKit.
NSURLConnection
V jen trošku náročnějších aplikacích však není pro toto třída NSURL nejvhodnější, neboť nenabízí dostatečně flexibilní služby; daleko lepší je pro přístup k datům na internetu využít služeb třídy NSURLConnection – a na tu se právě podíváme dnes.
Jak na sítě...
V několika dalších dílech se podíváme na to, jak se v prostředí Cocoa pracuje se sítí a se zdroji na Internetu.
Kterak táhnout něco, co neexistuje?
V poslední z kapitol věnovaných implementaci služby "drag&drop" ve vývojovém prostředí Cocoa si ukážeme speciální podporu pro možnost tažení neexistujícího souboru.
Speciální případy tahání či házení
Dnes se seznámíme s některými speciálními případy, v nichž by bylo z různých důvodů buď nemožné, nebo přinejmenším nepraktické používat nízkoúrovňovou podporu, s níž jsme pracovali dosud.
Drobnosti a chybičky
V minulém dílu našeho seriálu o programování ve vývojovém prostředí Cocoa jsme víceméně dokončili podporu drag&drop v naší aplikaci, na níž se učíme implementovat naše vlastní objekty view. Řekli jsme si ale, že v současné podobě aplikace obsahuje několik chyb a nedodělků, a slíbili jsme si, že se na ně dnes podíváme blíž.
Zvolme si, jak vhodit
Předminule jsme se naučili základy toho, jak implementovat view jež může sloužit jako zdroj tažení; minule jsme si ukázali elementární implementaci view, jež dokáže fungovat při tažení jako cíl pro vhazování. Dnes se podíváme na nejběžnější z možných vylepšení: ukážeme si, jak modifikovat akci, již tažení provede, pomocí klávesových přepínačů.
Byli jsme na tahu; nyní padneme.
Minule jsme si ukázali základní implementaci view, jež dokáže fungovat jako zdroj tažení. Dnes se naopak podíváme na to, kterak zpracovat tažení objektů, jež inicioval někdo jiný: umožníme našemu view, aby bylo cílem vhození.
Táhni a padni
Na žádost v diskusi pod minulým článkem v našem seriálu o programování ve vývojovém prostředí Cocoa se dnes a v několika následujících dílech podíváme na to, jak vypadá standardní podpora technologie drag & drop.
Další události
Náš "kurs programování objektů view", jímž se právě zabýváme v našem programátorském seriálu, se zvolna chýlí k závěru. Pro dnešek však u views ještě zůstaneme, a nejprve si ukážeme zpracování některých poněkud netypických událostí.
Příkazy a schránka
Minule jsme se naučili využít vyšší vrstvy input managementu pro pohodlné zpracování událostí a rozlišení běžných kláves a příkazů typu moveLeft: či deleteBackward:. Řekli jsme si ale také, že "ryze příkazové" kombinace kláves s přepínačem Command se zpracovávají jinou cestou – a dnes si právě ukážeme, jak na ně.
Input Management
V minulém dílu našeho seriálu, věnovaného programování ve vývojovém prostředí Cocoa, jsme si ukázali, kterak užívat základních služeb třídy NSView (přesněji řečeno, její nadtřídy NSResponder; vzhledem k tomu však, že nyní se učíme sestavovat vlastní views, není zapotřebí to rozlišovat) pro zpracování událostí, přišedších od klávesnice.
Události klávesnice
V současné době se v našem seriálu o programování ve vývojovém prostředí Cocoa učíme sestavovat vlastní views. Dnes se podíváme na to, jak zpracovávat události vytvářené druhým nejdůležitějším vstupním zařízením, klávesnicí.
Lepší práce s myší
Minule jsme se začali zabývat schopností views – podtříd třídy NSView – reagovat na nejrůznější události, generované pomocí vstupních zařízení. Sestavili jsme si také velmi jednoduchou kreslicí aplikaci, jež právě tohoto mechanismu využívá; dnes ji trochu vylepšíme a ukážeme si, kterak v Cocoa zpracovat některé další události, spojené s myší.
Události a myš
V předcházejících pokračováních jsme se naučili implementovat metodu drawRect:, jejímž prostřednictvím definujeme to, jak view vypadá. Nyní se zaměříme na druhou stránku views – na jejich schopnost reagovat na nejrůznější události, generované prostřednictvím vstupních zařízení. Začneme tím nejjednodušším, myší.
Obrázky a písmenka...
Minule jsme si ukázali, jak používat služby třídy NSBezierPath pro kreslení obecných obrázků: pro většinu běžných případů tyto příkazy bohatě stačí. Nestačí ovšem tehdy, když chceme v rámci vlastního "view" kreslit text, nebo hotové obrázky: a právě to se naučíme v dnešním dílu našeho seriálu.
Další služby pro kreslení
Seznámili jsme se již s těmi naprostými nejzákladnějšími základy – s nastavováním barev a se službou NSRectFill, jež aktivní barvou vyplní zadaný obdélník. To by nám ovšem pro velké kreslení nestačilo; dnes si proto řekneme malinko více.
Kterak nakreslit modrý obdélník...
V minulém dílu našeho volného seriálu o programování ve vývojovém prostředí Cocoa jsme se pustili do implementace vlastních podtříd NSView; popsali jsme si základní strukturu a principy, a slíbili jsme si, že se dnes trochu blíže podíváme na hlavní a primární vlastnost "views" – totiž vykreslení jejich obsahu.
Programování v Cocoa - Základy kreslení
Všechno ještě zdaleka nevíme: co v případě, kdy nevystačíme se standardní sadou grafických objektů, a potřebovali bychom implementovat vlastní – nějakou "tabulku jež se nechová tak úplně jako tabulka" a podobně? V takovém případě je zapotřebí implementovat a vhodně využít vlastní podtřídu NSView – a to je právě to, co se naučíme teď.
Programování v Cocoa - Pár tipů a triků
Na rozloučenou s kontroléry si ukážeme několik šikovných triků a fint, jež umožňují obejít některé problémy a nedomyšlenosti v designu či implementaci kontrolérů.
NSTreeController
Dnes se ještě na chvilku vrátíme k našemu poslednímu tématu, k controllerům: až dosud jsme probrali většinu základních služeb, ukázali jsme se vše možné – vyjma nejsložitějšího kontroléru, třídy NSTreeController. Jak už samotné jméno napovídá, tento kontrolér slouží pro representaci hierarchických modelů: hodil by se třeba pro systém složek a souborů, nebo zcela obecně pro jakýkoli model, jehož datové objekty se skládají do stromové struktury.
Objective C 2.0 - novinky z Leoparda
Vzhledem k tomu, že se začínají objevovat informace o novinkách, jež najdou programátoři příští rok v operačním systému Mac OS X 10.5 Leopard, je možná vhodná chvíle podívat se na ně trochu blíže i zde. V dnešním článku se podíváme na jednu z "nejžhavějších" novinek – rozšíření a doplňky programovacího jazyka Objective C.
Mírná vylepšení v mezích zákona
Dnes se ještě k projektu vrátíme s trochou různých vylepšení, na nichž si ukážeme další možnosti, jež nám systém vazeb Cocoa nabízí.
Převodníky, přepínače, placeholdery
Slíbili jsme si, že si konečně vysvětlíme všechny ty podivné atributy a přepínače vazeb, jež máme k dispozici v inspektoru vazeb pod ovladači "Bind to" / "Controller Key" / "Model Key Path": o některých z nich jsme si sice už něco málo řekli (už například rozumíme přepínači "Continuously updates value"), ale většina z nich zůstává poněkud záhadou.
Základní vazby NSArrayControlleru
Dnes připravíme několik nových vazeb, jež jsou možné jen s NSArrayControllerem, a ukážeme si konečně, jak tedy takový kontrolér doopravdy funguje a co umí.
Práce s polem objektů
Daleko více zábavy si můžeme užít s kontrolérem polí, jenž je representován objektem třídy NSArrayController; dnes a v několika dalších dílech se mu proto podíváme důkladně na zoubek.
Validace a chyby, a jedna hezká vazba...
V předcházejícím dílu našeho seriálku o programování v Cocoa jsme si ukázali základy validování atributů modelu při jejich vazbě na editory v grafickém uživatelském rozhraní. Slíbili jsme si ale pro dnešek, že se ještě naučíme při validaci rozpoznat (a ohlásit) chybu, již nelze napravit automaticky.
Validace hodnot
Dnes si ukážeme další velmi důležitou techniku, jež sice v zásadě patří do KVC, ale prakticky použitelná a významná se stává právě až ve chvíli, kdy modelové objekty podporující KVC začneme používat prostřednictvím vazeb spolu se standardními objekty grafického uživatelského rozhraní Cocoa – proto jsme se o ní ostatně nezmínili dříve. Jedná se o systém automatických validací hodnot atributů.
Implementace a použití převodu hodnot
Systém vazeb Cocoa nabízí elegantní řešení s automatickým převodem hodnot prostřednictvím tzv. "Value Transformeru", jejž můžeme pro každou konkrétní vazbu určit v Interface Builderu. My už jsme se s touto možností setkali; tehdy však jsme použili jeden ze standardních systémových převodníků, kdežto dnes se naučíme si psát převodníky vlastní.
Další vazby s jednoduchým kontrolérem
Dnes si trochu "spravíme chuť" od minula – v minulém dílu jsme hodně povídali s takřka žádným výsledkem; dnes naopak využijeme systém vazeb k tomu, že bez dlouhých řečí grafické uživatelské rozhraní aplikace dost zásadně obohatíme.
Vázání vazeb
Minule jsme si vysvětlili, k čemu a proč jsou v systému Cocoa kontroléry; dnes si ukážeme, jak se s nimi pracuje.
Kontroléry a vazby
V několika předcházejících dílech našeho seriálu jsme si ukázali, jak fungují základy mechanismu vazeb – bindings –, jejž vývojové prostředí Cocoa využívá pro dynamické sestavování řídící vrstvy aplikací, totiž KVC a KVO. Nyní je načase, abychom se pustili do praktického programování – ukážeme si tedy pár projektů, jenž budou vazby využívat.
Sledování změn objektů: přímý přístup
Co dělat v případě, kdy z jakýchkoli důvodů potřebujeme přímo měnit obsah některé z proměnných, tedy kdy nechceme nebo nemůžeme použít set-accessor? Ve složitějších případech, nebo tehdy, když potřebujeme dosáhnout co největší efektivity, můžeme také automatické posílání notifikací KVO zcela vypnout.
Sledování změn objektů: kód modelu
Dnes se soustředíme na to, co budeme jako aplikační programátoři rozhodně dělat nejčastěji (nebudeme-li užívat knihoven Core Data) – totiž psaní modelů: Co musíme udělat, aby objekt KVO podporoval?
Sledování změn objektů – zdrojový kód
Dnes přesně týž mechanismus, který jsme minule "namyšovali", naprogramujeme "ručně", abychom přesně viděli, jak jednotlivé zprávy v systému KVC/KVO fungují.
Sledování změn objektů – ukázka
Než si řekneme více o tom, jak lze ovládat a řídit systém KVO, s jehož základy jsme se seznámili minule, pojďme se podívat na to, jak funguje, na konkrétním příkladu.
Sledování změn objektů
Druhý mechanismus, na nějž se musíme podívat, je sledování změn objektů, Key/Value Observing, KVO. Jeho úkolem je právě rozesílat podle potřeby všem prvkům GUI (či jiným objektům), jež jsou navázány na týž atribut modelu, upozornění, že došlo ke změně tohoto atributu – takže objekty mohou na změnu ihned reagovat zobrazením nové hodnoty.
Pojmenované vlastnosti objektů: řazení jmen a agregační funkce
Dnes si "na rozloučenou" s pojmenovanými vlastnostmi ukážeme několik rozšiřujících a velmi praktických služeb, které systém KVC v prostředí Cocoa nabízí: půjde o řazení jmen (key paths) a o speciální agregační služby.
Pojmenované vlastnosti objektů: relace 1:N
Relace 1:N má vlastní, mírně odlišné API: je representována polem (pro relaci s daným pořadím) či množinou (pro nesetříděnou relaci) objektů. Relací 1:N by např. mohl být seznam knih daného autora – pak by [autor valueForKey:@"knihy"] vrátilo objekt třídy NSArray, jehož prvky by byly všechny knihy daného autora.
Pojmenované vlastnosti objektů: implementace
V minulém dílu našeho seriálu jsme si na poněkud umělém příkladu s datovým zdrojem pro tabulku ukázali základní principy přístupu k pojmenovaným vlastnostem objektu. Dnes si řekneme něco více o tom, jak správně implementovat objekty pro datový model, aby s přístupem k pojmenovaným vlastnostem optimálně spolupracovaly.
Pojmenované vlastnosti objektů
Nejprve se musíme blíže seznámit s několika zajímavými technologiemi, na nichž jsou vyšší aplikační služby Cocoa založeny. Některé z nich již známe z předcházejících dílů, věnovaných možnostem jazyka Objective-C a službám základní knihovny Foundation Kit; dalším se budeme věnovat nyní. Prvou z nich bude práce s pojmenovanými vlastnostmi objektů – key/value coding, zkráceně KVC.
Přehled tříd AppKitu 7: dokončení
Zbývá ještě několik tříd, o nichž se ve stručnosti zmíníme dnes: v podstatě jde o třídy pomocné nebo jen zřídkakdy užívané.
Přehled tříd AppKitu 6: dokumentový systém
V přehledném popisu tříd objektového frameworku AppKit se již blížíme ke konci – v podstatě se dá říci, že právě v dnešním dílu probereme poslední z opravdu důležitých a významných skupin tříd; pak již zbudou jen drobnosti a pomocné služební třídy, s nimiž se v praxi pracuje poměrně zřídkakdy.
Nastal čas na kakao - Přehled tříd AppKitu 5: hlavně grafika
Hlavním tématem dnešního článku ovšem je grafika. Samozřejmě, do jisté míry s grafikou souviselo již to, co jsme si na začátku řekli o struktuře "views" a o spolupráci tříd NSCell (a jejích podtříd) a NSView (a jejích podtříd); dnes se však podíváme trochu blíž na služby, jež "do views" skutečně kreslí.
Přehled tříd AppKitu 4: textový systém
Vzhledem k tomu, že minule jsme dokončili pomocné třídy grafického uživatelského rozhraní až po NSToolbarItem včetně, nyní je čas podívat se na služby textového subsystému.
Přehled tříd AppKitu 3: zbývající třídy GUI
Dnes dokončíme zběžný popis několika zbývajících tříd z bloku "User Interface".
Nastal čas na kakao - Přehled tříd AppKitu 2
V minulém dílu našeho seriálu o vývojovém prostředí Cocoa jsme se začali v přehledu seznamovat se všemi třídami – nebo aspoň s většinou nejdůležitějších tříd – objektové knihovny AppKit. Dnes budeme pokračovat.
Přehled tříd AppKitu
Po chvíli úvodních "tanečků" kolem paradigmatu MVC a ukázky programování s využitím systémů vysoké úrovně, jež Cocoa pro MVC nabízí – Core Data pro model, Interface Builder pro view a bindings pro kontrolér – se dnes konečně pustíme do vlastních tříd knihovny AppKit.
Jak MVC v Kakau vypadá doopravdy: dokončení
V předcházejícím dílu našeho seriálu jsme začali s jednoduchou ukázkovou aplikací, na níž zhruba vidíme, jak se s MVC – modely, view objekty a kontroléry – ve skutečnosti v Cocoa pracuje. Dnes aplikaci dokončíme: na řadě teď je tedy samozřejmě view a kontrolér.
Jak MVC v Kakau vypadá doopravdy?
V minulém dílu našeho seriálu o programování v Cocoa jsme si ukázali koncepci MVC – Model, View, Controller – jíž správně navržené objektové aplikace odpovídají, a jíž jsou také "na míru" šity služby standardních tříd AppKitu. Než se ale pustíme do popisu těchto konkrétních tříd, vyplatí se ukázat si ještě jeden příklad velmi jednoduché aplikace.
Začínáme s AppKitem
Dnešním dílem našeho seriálu, věnovaného vývojovému prostředí Cocoa, se začneme zabývat programováním plnohodnotných aplikací s využitím objektové knihovny AppKit.
Co nového v Xcode
Po rychlém odskoku k velmi aktuálnímu Intelu se ještě podíváme na další – mírně – aktuální záležitost: ukážeme si několik zajímavějších novinek vývojového prostředí Xcode 2.
Nastal čas na kakao – s Intelem, s Intelem, jedeme do...
... budoucnosti. A co to znamená pro programátory v Cocoa? Inu, vlastně nic, až na několik skutečných výjimek, na něž se podíváme blíže.
Nastal čas na kakao - Co nového ve Foundation Kitu
Dříve, než pokročíme od základů Foundation Kitu k aplikačním službám knihovny AppKit se podíváme na to, co Tiger pro Foundation Kit přinesl nového: třídy NSAffineTransform, NSCalendar, novinky tříd NSError a NS...Formatter, třídy NSIndexPath, NSLocale či NSMetadata, nové služby třídy NSString, a některá další rozšíření.
Nastal čas na kakao - NSUserDefaults
Ačkoli jsme minule už zběžně nahlédli do tygřích novinek, dnes se ještě naposledy budeme zabývat "obyčejným Foundation Kitem", tedy službami, jež jsou k dispozici v jakékoli versi Mac OS X. To proto, že nám ještě z celkového přehledu zbyla jedna dosud nepopsaná třída – NSUserDefaults.
Nastal čas na kakao - Notifikace: nepřímé předávání zpráv
Úkolem trojice tříd NSNotification... je zajistit korektní a plně funkční předávání zpráv i v případech, kdy objekt který zprávu odesílá vůbec neví, které objekty ji mají dostat. Můžeme to vyjádřit také jinak – zatímco v klasickém mechanismu předávání zpráv volí jak obsah zprávy, tak i jejího příjemce odesilatel, umožňuje notifikační systém API Cocoa také to, aby odesilatel zvolil pouze obsah zprávy, zatímco příjemce sám určí – podle obsahu – které všechny zprávy chce dostávat.
Nastal čas na kakao - Kakao v Tygrovi
Vzhledem k tomu, že se opona NDA konečně odhalila, můžeme si konečně říci více o tom, jaké novinky Mac OS X 10.4 – Tiger – přinesl programátorům. Vlastně se to docela dobře hodí: vzhledem k tomu, že jsme v našem seriálu, věnovaném programování ve vývojovém prostředí Cocoa, těsně před dokončením přehledu konkrétních tříd Foundation Kitu, můžeme snadno přímo vložit pár nových "tygřích" kapitol.
Nastal čas na kakao - NSInvocation a černá magie
Ačkoli v praxi využívaná poměrně zřídkakdy, stojí třída NSInvocation za samostatný článek, protože jejím prostřednictvím máme v API Cocoa k dispozici nesmírně silný nástroj – přesměrování zpráv. Možnosti, jež nám tato služba nabízí, si programátoři ve statických prostředích typu C++ obvykle vůbec nedokáží představit.
Nastal čas na kakao - Zpracování výjimek: NSException
Nejprve si slíbíme, že se ke třídám NSDate a NSCalendarDate (respektive hlavně k té první z nich) vrátíme později. Proč to? Inu... právě okolo práce s daty je řada poměrně významných změn v nové versi operačního systému, Mac OS X 10.4 Tiger, jež už bezmála klepe na dveře: nemá proto smysl si teď podrobně popisovat už vlastně zastaralé API, abychom za měsíc nebo dva popisovali nové – raději posečkáme a k datům se vrátíme hned, jak bude Tygr puštěn z klece NDA ☺.
Nastal čas na kakao - Málem bychom zapomněli: NSAutoreleasePool
Pokud bychom chtěli dodržet pořadí, v němž jsme se o třídách Foundation Kitu zmínili v úvodním přehledovém článku (a to bychom měli, aby bylo snadné se v nich orientovat), neměli jsme začínat kontejnerovými třídami NS(Mutable)Array, ale třídou NSAutoreleasePool, v níž (spolu s některými službami třídy NSObject) je skryto celé kouzlo poloautomatického garbage collectoru firmy NeXT – pardon, firmy Apple ☺.
Nastal čas na kakao - Trocha magie, aneb distribuované objekty
Dnes nám v přehledu konkrétních tříd Foundation Kitu vyšel čas na skutečnou lahůdku: přeskočíme-li totiž velmi zřídka užívané zámky NS...Lock, je na řadě třída NSConnection (a třídy, jež s ní spolupracují) – budeme se tedy zabývat distribuovanými objekty.
Nastal čas na kakao - Archivace objektů
Minule jsme se seznámili s objekty třídy NSData a řekli jsme si, že se velmi často užívají pro ukládání a representaci obsahu obecných souborů. To je pravda; existuje ale ještě druhý typ využití těchto objektů, který je – alespoň u složitějších aplikací – velmi častý, a to je archivace a dearchivace objektů.
Nastal čas na kakao - Čísla, binární data a další...
Dnes budeme pokračovat v podrobnějším přehledu tříd Foundation Kitu: po kontejnerech, jimiž jsme začali, a třídách NS(Mutable)String, kterým jsme se věnovali minule, jsou dnes na řadě – v pořadí, v němž jsme se s třídami zběžně seznámili v úvodním článku věnovaném Foundation Kitu – třídy NSValue a NSNumber, jež slouží pro representaci standardních typů "neobjektového" jazyka C v objektovém prostředí.
Nastal čas na kakao - Textové řetězce: NS(Mutable)String
Minule jsme si začali ukazovat, jak se pracuje s konkrétními objekty z knihovny Foundation Kit – seznámili jsme se především s beztypovými kontejnery NS(Mutable)Array, NS(Mutable/Counted)Set a NS(Mutable)Dictionary. Dnes se podíváme blíže na snad nejpoužívanější třídu vůbec – na třídu NS(Mutable)String.
Nastal čas na kakao - Třídy Foundation Kitu (2)
Minule jsme si ukázali přehled všech tříd Foundation Kitu a stručně jsme probrali účel a základní využití většiny z nich. Nyní se soustředíme jen na ty nejčastěji využívané; zato se na ně podíváme podrobněji a ukážeme si i zcela konkrétní příklady použití.
Nastal čas na kakao - Třídy Foundation Kitu
V minulém dílu našeho seriálu jsme dokončili praktický příklad programování v Cocoa tím, že jsme si ukázali ty nejjednodušší základy ladění. Mohu-li navázat na diskusi k článku: samozřejmě, že k ladění – stejně, jako k praktickým příkladům – se ještě vrátíme podrobněji; aby to však mělo rozumný smysl, je zapotřebí, abychom měli lepší představu o tom, jaké služby vlastně nabízejí knihovny standardních tříd Cocoa.
Nastal čas na kakao - Ladění
Ty nevíš táto to ti bylo k pláči, kos tuhle pral se s počítači a hledal chybu v programu... tedy, omlouvám se čtenářům i panu Halasovi; nechal jsem se unést nadpisem článku. Pravda ovšem je, že v minulém dílu našeho seriálu jsme si slíbili, že dříve, než se pustíme do přehledu služeb tříd objektové knihovny Foundation Kit, se blíž podíváme právě na ladění – tedy odhalování a opravy chyb.
Nastal čas na kakao - Drobná vylepšení a zdokonalení...
Minule jsme naši aplikaci dokončili, takže vše funguje; slíbili jsme si ale, že si ještě ukážeme několik fint a drobností, jež vylepší její uživatelský komfort.
Nastal čas na kakao - Druhý kontrolér a dokončení aplikace
Minule jsme se v hrubých rysech naučili v Interface Builderu používat kontrolery a vazby ("bindings") mezi objekty; jejich pomocí (a s využitím starého dobrého mechanismu akce/cíl pro dvojici tlačítek) jsme implementovali kompletní služby aplikace pro prvé textové pole, pro obě tlačítka i pro rozevírací nabídku.
Nastal čas na kakao - Interface Builder: atributy objektů
V předcházejících dílech jsme připravili datový model naší aplikace, minule jsme v Interface Builderu sestavili její uživatelské rozhraní – nyní už zbývá jen model a rozhraní spojit dohromady pomocí vhodného kontroleru, a aplikace bude hotova.
Nastal čas na kakao - Interface Builder: atributy objektů
V minulém dílu jsme se seznámili s aplikací Interface Builder, jež se v Cocoa používá pro tvorbu uživatelského rozhraní a kontrolerů, a také jsme si ukázali, jak v ní sestavit konkrétní objekty uživatelského rozhraní pro naši aplikaci.
Nastal čas na kakao - Interface Builder a uživatelské rozhraní
S aplikací Interface Builder jsme se zatím v našem seriálu nesetkali; než se pustíme do vlastního sestavování uživatelského rozhraní, řekneme si toho o ní aspoň malinko víc.
Nastal čas na kakao - Aplikace RSS: parsování XML
Předminule jsme probrali strukturu datového modelu naší aplikace a rozhraní třídy RSS; v minulém dílu jsme si ukázali její implementaci – inicializaci, standardní metodu dealloc, a accesory. Zbývá nám tedy ještě ukázat si, jak je implementováno parsování XML, a pak se už budeme moci pustit do tvorby grafického uživatelského rozhraní.
Nastal čas na kakao - Aplikace RSS: implementace datového modelu
Minule jsme si ukázali návrh a interface datového modelu pro naši vylepšenou aplikaci; dnes využijeme toho, co jsme se o programování v Cocoa naučili v minulých dílech (a také něčeho, co jsme zatím neprobírali, totiž znalosti standardních knihovních tříd Foundation) k odpovídající implementaci.
Nastal čas na kakao - Aplikace RSS2: datový model
V minulých dvou pokračováních jsme se seznámili s vývojovým prostředím XCode dostatečně k tomu, abychom se mohli pustit do práce na naší aplikaci. Projekt už máme připravený od předminule; není-li tomu tak, vytvoříme nový projekt typu "Application / Cocoa Application".
Nastal čas na kakao - Více o XCode: inspektory
Chystáme se připravit naši druhou aplikaci, v níž bychom využili většinu toho, co jsme se učili v minulých pokračováních našeho seriálu. Nejdříve si však musíme říci alespoň nejzákladnější věci o vývojovém prostředí firmy Apple, o XCode.
Nastal čas na kakao - Šedá je teorie, zelený je strom života...
Pojďme se tedy zase na chvilku vrátit od teorie k praxi. Vzpomínáte na triviální čtečku RSS na dvacet programových řádků z prvého dílu? Nyní si ukážeme plnohodnotnou aplikaci, jež dokáže zobrazit zároveň více RSS kanálů, jež ukazuje seznam titulků zpráv pro zvolený kanál v tabulce a po vybrání titulku ukáže vlastní zprávu, jež si naposledy vybraný kanál pamatuje pro příští spuštění a podobně.
Nastal čas na kakao - Accesory: přístup k proměnným instancí
Už v minulém dílu jsme narazili na to, že je z řady důvodů šikovné snažit se nepracovat s instančními proměnnými přímo: lepší je "zabalit" je do samostatného API, několika málo jednoduchých metod, jejichž prostřednictvím – a jenom jejich prostřednictvím – se s proměnnými zachází. Všechen ostatní kód pak využívá právě těchto metod; obvykle těmto metodám říkáme accesory.
Nastal čas na kakao - Inicializace: tipy a triky
Než pokročíme k dalšímu tématu (jímž bude správné psaní tzv. accesorů – zběžně je ostatně "naťukneme" již dnes), vyplatí se ještě si ukázat několik triků a správných vzorců při implementaci a užívání inicializátorů. Nakonec si také ukážeme jeden potenciální "podraz", na který si při implementaci inicializátorů musíme – aspoň v těch složitějších případech – trošku dávat pozor.
Nastal čas na kakao - Metody initWith... a designovaný inicializátor
V minulém dílu jsme se naučili psát metody init (a dealloc); na chvíli jsme ovšem pozapomněli na metody initWith... s argumenty.
Nastal čas na kakao - Inicializace a rušení objektů
Vytváření a rušení objektů jsme již probrali celkem podrobně – ovšem z hlediska kódu, který objekty používá. Nyní nastal čas podívat se na tuto problematiku znovu, pro změnu z hlediska třídy, jejíž implementace se vytvářejí a ruší – ukážeme si tedy jak správně vytvářet metody init... a další, s nimi spolupracující.
Nastal čas na kakao - Vkládání objektů a přesměrování zpráv
V předminulém dílu jsme si začali povídat o tom, jaké alternativní techniky se v Cocoa často využívají namísto dědičnosti: ukázali jsme si, jak funguje delegace a zběžně jsme se seznámili s mechanismem akce/cíl; minule jsme se seznámili s využitím kategorií pro přidání jednoduchého API k již existující třídě. Dnes toto téma dokončíme ukázkou "pokročilejšího triku" vkládání objektů.
Nastal čas na kakao - Využití kategorií namísto dědičnosti
V minulém dílu jsme si začali povídat o tom, jaké alternativní techniky se v Cocoa často využívají namísto dědičnosti: ukázali jsme si, jak funguje delegace a zběžně jsme se seznámili s mechanismem akce/cíl, jemuž se budeme daleko podrobněji věnovat začas, v rámci služeb souvisejících s grafickým uživatelským rozhraním. Dnes si ukážeme další trik, který bývá často vhodnější, než "dědění": využití kategorií pro rozšíření služeb některé ze standardních tříd o požadované API.
Nastal čas na kakao - Podtřídy, delegáti, vkládání, jak se to rýmuje?
Inu, třeba: na podtřídy bacha, delegát ten fachá, vkládání je řacha, tak se to rýmuje. Zatímco dědičnost se v Cocoa oproti jiným objektovým prostředím nepoužívá tak často, s výhodou se zde využívají alternativní techniky, mezi něž patří práce s delegáty či vkládání objektů.
Nastal čas na kakao - Jak správně importovat
Je zřejmé, že rozhraní třídy (@interface ... @end) je obvykle uloženo v hlavičkovém souboru, který vkládáme do zdrojových souborů, jež s třídou pracují, pomocí direktivy #import – obvykle to vypadá nějak takto...
Nastal čas na kakao - Jak správně psát v Objective C
V následujících několika dílech našeho seriálu se budeme věnovat tomu, jak v Objective C správně programovat: seznámíme se s řadou standardních konvencí a vzorců, jichž je vhodné používat: nejenže nám usnadní život, ale navíc zajišťují chování, jež ostatní programátoři od našich tříd a metod automaticky očekávají.
Nastal čas na kakao - Základní služby objektů
Ačkoli Objective C na rozdíl např. od Javy nevyžaduje striktně, aby každá třída, již vytváříme, měla nadtřídu, v praxi budeme téměř vždy své třídy odvozovat od standardní kořenové třídy NSObject – nebo od tříd, jež jsou samy jejími dědici. Vyplatí se proto se hned zpočátku podrobněji podívat na metody, jež od třídy NSObject prakticky všechny objekty dědí.
Nastal čas na kakao - Skryté podtřídy
Než se pustíme do popisu správného programátorského stylu pro Objective C/Cocoa a vhodných objektových vzorů, je zapotřebí se seznámit ještě s jednou koncepcí, již Cocoa často využívá, a jež významným způsobem zjednodušuje programátorské rozhraní, aniž by jakkoli omezovala flexibilitu. Jde o koncepci tzv. sdružených tříd (class clusters) a skrytých podtříd.
Nastal čas na kakao - Kopírování objektů
Na náš minulý rozbor toho, jak objekty vznikají a zanikají, je vhodné navázat popisem koncepce měnitelných a neměnných objektů. To proto, že kromě dosud popsaných postupů objekty mohou také vznikat jako kopie objektů dříve existujících – a způsob, jak jsou tyto kopie vytvářeny, je s koncepcí měnitelných a neměnných objektů úzce svázán.
Nastal čas na kakao - Vznik a zánik objektů
V minulém dílu našeho seriálu jsme dokončili popis vlastního jazyka Objective C. Dnes si řekneme více o základních vlastnostech všech objektů; stojí za to zdůraznit, že tyto služby jsou již hodně specifické právě pro Objective C v Mac OS X – pokud náhodou máte k dispozici nějakou jinou implementaci Objective C, mohou v ní pravidla pro vznik a zánik objektů být dost odlišná.
Co jsme si o Objective C ještě neřekli...
V minulém dílu jsme se seznámili se systémem objektů a ukázali jsme si všechny základní služby jazyka Objective C. Nyní se seznámíme se zbytkem konstrukcí, jež Objective C nabízí; ačkoli žádná z nich není pro programování bezpodmínečně nutná – jednoduché testovací prográmky jste si snadno mohli vyzkoušet už s využitím služeb, popsaných minule – dokáží programátorovi výrazně usnadnit život.
Objective C: to si vysvětlíme podrobněji
Ačkoli nadstavba Objective C nad standardním jazykem C je velmi jednoduchá, budeme se jí věnovat mnohem podrobněji. Důvod je zřejmý: zatímco C víceméně každý zná (pro ty, kdo v něm trochu tápou, byl určen stručný přehled jeho nejdůležitějších vlastností v minulém dílu), Objective C zdaleka tolik známé není.
Programovací jazyk C: velmi, velmi stručně
Tento článek je určen těm, kdo v jazyce C příliš neprogramují a chtějí si jej zběžně oživit; snad i těm, kdo jsou zběhlí v jiných jazycích a snadno se dokáží adaptovat na mírně odlišnou syntaxi a sémantiku jiného programovacího jazyka.
Tak nejdřív kakao ochutnáme...
Jak jsme si slíbili v minulém úvodu, dnes už začneme doopravdy programovat. Budeme používat standardní vývojové prostředí XCode od Apple; verse je poměrně nepodstatná. Budeme také předpokládat, že máte instalovaného Panthera: pokud ne, tu a tam něco bude vypadat trošku jinak...
Nastal čas na kakao...
S novým šéfredaktorem jsme se domluvili, že dozrál vhodný čas na podrobný programátorský seriál, věnovaný tvorbě aplikací v nativním, plně objektovém vývojovém prostředí systému Mac OS X — v prostředí Cocoa. Budeme se tedy nyní po nějakou dobu setkávat nad řadou článků, v nichž si ukážeme jak na to.
Tématické zařazení:
» Rubriky » Začínáme s
Diskuse k článku