Page 1


Jack Nutting, David Mark, Jeff LaMarche

Cocoa Průvodce programováním pro Mac

Computer Press, a. s. Brno 2011

K1775.indd 1

14.9.2011 12:21:20


Cocoa Průvodce programováním pro Mac Jack Nutting, David Mark, Jeff LaMarche Computer Press, a. s., 2011. Vydání první. Překlad: Jakub Mužík Odborná korektura: Tomáš Kolář Jazyková korektura: Marie Schreinerová Sazba: Petr Klíma Rejstřík: Daniel Štreit Obálka: Martin Sodomka

Komentář na zadní straně obálky: Martin Herodek Technická spolupráce: Jiří Matoušek, Zuzana Šindlerová, Dagmar Hajdajová Odpovědný redaktor: Martin Herodek Technický redaktor: Jiří Matoušek Produkce: Petr Baláš

Original edition copyright © 2010 by Jack Nutting, David Mark and Jeff LaMarche. All rights reserved. Czech edition copyright 2011 by Computer Press. All rights reserved. Autorizovaný překlad z originálního anglického vydání Learn Cocoa on the Mac, First Edition. Originální copyright: © Jack Nutting, David Mark, Jeff LaMarche, 2010. Překlad: © Computer Press, a.s., 2011. Computer Press, a. s., Holandská 3, 639 00 Brno Objednávky knih: http://knihy.cpress.cz distribuce@cpress.cz tel.: 800 555 513 ISBN 978-80-251-2883-1 Prodejní kód: K1775 Vydalo nakladatelství Computer Press, a. s., jako svou 4088. publikaci. © Computer Press, a. s. Všechna práva vyhrazena. Žádná část této publikace nesmí být kopírována a rozmnožována za účelem rozšiřování v jakékoli formě či jakýmkoli způsobem bez písemného souhlasu vydavatele.

K1775.indd 2

14.9.2011 12:21:31


Obsah Předmluva ....................................................................... 11 O autorech....................................................................... 13 O odborném korektorovi ............................................... 14 Poděkování ..................................................................... 15 Úvod ................................................................................ 17 KAPITOLA 1 Kakao má každý rád ....................................................... 19 Opatřete si počítač Macintosh a stáhněte si potřebné vývojové nástroje .....20 Kde najít pomoc...................................................................................................................21 Co musíte vědět předtím, než začnete........................................................................22 Jste připravení? ....................................................................................................................22

KAPITOLA 2 Ahoj světe ....................................................................... 25 Projekt Hello World .............................................................................................................25 Průzkum nib souboru ........................................................................................................29 Knihovna .................................................................................................................................30 Přetažení popisku ................................................................................................................32 Používání modrých pomocných čar .............................................................................33 Okno inspektoru ..................................................................................................................34 Inspektor atributů ...............................................................................................................35 Změna barvy a písma textu popisku ...........................................................................37 Editor nabídek ......................................................................................................................39 Vytvoření ikony aplikace ...................................................................................................41 Přidání ikony do projektu .................................................................................................42 Seznamy vlastností .............................................................................................................44 Spuštění aplikace.................................................................................................................45 Sdílení radosti z vašeho výtvoru s okolním světem ...............................................46 Na shledanou Ahoj světe ..................................................................................................48

K1775.indd 3

14.9.2011 12:21:31


4

Obsah

KAPITOLA 3 Světla, Kamera, Akce! (a také outlety) .......................... 49 Aplikace, která je tématem této kapitoly....................................................................50 Frameworky, frameworky, všude samé frameworky ..............................................51 Framework Foundation ....................................................................................................................... 52 Framework AppKit ................................................................................................................................. 52

Model-vzhled-řízení ............................................................................................................52 Outlety, akce a řídicí objekty ...........................................................................................53 Deklarace outletů................................................................................................................................... 54 Deklarace akcí ......................................................................................................................................... 55

Outlety a akce v akci...........................................................................................................56 Zapnutí automatické správy paměti............................................................................................... 56 Naprogramování řídicí třídy ............................................................................................................... 58 Deklarace outletu a akce ..................................................................................................................... 59 A nyní zpět do nástroje Interface Builder ..................................................................................... 60 Konfigurace okna aplikace ................................................................................................................. 64 Návrh uživatelského rozhraní okna ................................................................................................. 66 Zapojení outletu ..................................................................................................................................... 69 Propojení tlačítka s akcí ....................................................................................................................... 71

Implementace metody akce............................................................................................72 Delegát aplikace ..................................................................................................................73 Ukončení aplikace při zavření jejího okna .................................................................................... 74

Prohlížeč dokumentace.....................................................................................................75 Shrnutí .....................................................................................................................................76

KAPITOLA 4 Komponenty grafického uživatelského rozhraní ........ 77 Aplikace VillainTracker .......................................................................................................79 Vytvoření třídy VillainTrackerAppDelegate................................................................................... 80 Naplánování grafického uživatelského rozhraní ........................................................................ 82

Vybudování rozhraní ..........................................................................................................84 Přetažení textových polí ...................................................................................................................... 85 Umožnění výběru kalendářních dat ............................................................................................... 87 Rozbalovací seznam .............................................................................................................................. 88 Hodnocení ................................................................................................................................................ 89 Matice přepínačů ................................................................................................................................... 90 Přidání rámce obrázku ......................................................................................................................... 92 Přidání zaškrtnutelných políček do matice .................................................................................. 93 Konfigurace tlačítka nabídky ............................................................................................................. 95 Vložení textového rámce .................................................................................................................... 95 Logické seskupení.................................................................................................................................. 95 Změna rozměrů ...................................................................................................................................... 98 Řídicí objekt ...........................................................................................................................................100 Propojování ............................................................................................................................................101

K1775.indd 4

14.9.2011 12:21:31


5

Obsah Základy psaní zdrojového kódu aplikace ................................................................ 102 Standardizace názvů klíčů ................................................................................................................103 Vytvoření výchozího padoucha ......................................................................................................103 Cit pro detaily ........................................................................................................................................104 Nastavení jednoduchých hodnot ..................................................................................................105 Hodnoty komplexních ovládacích prvků ....................................................................................106 Reakce na zadávání vstupu ..............................................................................................................110

Závěr...................................................................................................................................... 113

KAPITOLA 5 Tabulky .......................................................................... 115 Příprava třídy VillainTrackerAppDelegate na více padouchů ........................... 116 Uvolnění místa pro rámec tabulky ............................................................................. 117 Vyladění automatické změny rozměrů..................................................................... 120 Nová propojení.................................................................................................................. 123 Zdrojový kód obsluhující rámec tabulky ................................................................. 123 Rámec tabulky potřebuje vaši pomoc ...................................................................... 124 Přidávání a mazání padouchů ..................................................................................... 127 Závěr...................................................................................................................................... 129

KAPITOLA 6 Technologie Cocoa Bindings ....................................... 131 Vazba jednoduchých ovládacích prvků ................................................................... 132 Vytvoření projektu DungeonThing ...............................................................................................132 Vytvoření okna předvoleb ................................................................................................................133 Vazba s třídou NSUserDefaultsController ...................................................................................138 Vytvoření hlavního okna aplikace..................................................................................................141 Konfigurace třídy DungeonThingAppDelegate........................................................................143 Definice konstant .................................................................................................................................143 Specifikace výchozích hodnot předvoleb...................................................................................144 Implementace metod akcí ................................................................................................................145

Vazba rámce tabulky ....................................................................................................... 148 Příprava zdrojového kódu na použití vazeb ..............................................................................149 Zobrazování historie v tabulkách...................................................................................................152 Vytvoření a konfigurace řídicího objektu pole .........................................................................155 Vazba tabulky prostřednictvím řídicího objektu pole............................................................157 Vazbatextového pole prostřednictvím výběru provedeného řídicím objektem ............. 157 Kontrola funkčnosti .............................................................................................................................157 Napěnit, opláchnout a znovu ..........................................................................................................158

Dobře, ale jak to vlastně funguje? .............................................................................. 158 Pojmenované atributy objektů .......................................................................................................158 Sledování změn objektů....................................................................................................................160 Jak technologie Cocoa Bindings funguje....................................................................................160

Závěr...................................................................................................................................... 161

K1775.indd 5

14.9.2011 12:21:31


6

Obsah

KAPITOLA 7 Úvod do technologie Core Data .................................. 163 Nedostatky předchozích aplikací ............................................................................... 164 Aplikace MythBase ........................................................................................................... 165 Definování modelu..............................................................................................................................166 Automaticky vygenerované grafické uživatelské rozhraní ...................................................173 Doladění uživatelského rozhraní....................................................................................................175

Průzkum zdrojového kódu šablony ........................................................................... 182 Rozhraní delegátu aplikace ..............................................................................................................182 Implementace delegátu aplikace ..................................................................................................183

Přidání aplikační logiky .................................................................................................. 191 Validace jednotlivých atributů ........................................................................................................192 Validace více atributů najednou.....................................................................................................193 Vytvoření vlastního atributu ............................................................................................................195

Závěr...................................................................................................................................... 197

KAPITOLA 8 Koncepce vztahů v technologii Core Data ................. 199 Modelování nových entit a vztahů ............................................................................ 200 Verzování modelu a migrace ...........................................................................................................201 Příprava na různé verze datového modelu ................................................................................201 Přidání nových entit ............................................................................................................................202 Přidání vztahů........................................................................................................................................202 Vytvoření jednoduché migrace ......................................................................................................205 Otestování aplikace .............................................................................................................................206

Aktualizace grafického uživatelského rozhraní ..................................................... 208 Vytvoření okna pro data entit MythicalBand.............................................................................208 Přidělení užitečných názvů řídicím objektům polí ..................................................................209 Přidávání postav do kapel ................................................................................................................210 Zobrazování členů skupin.................................................................................................................212 Vytvoření okna pro data entit MythicalVenue ..........................................................................214 Přidání seznamu koncertních síní do okna skupin..................................................................215

Shrnutí .................................................................................................................................. 217

KAPITOLA 9 Vyhledávání a vracení dat uchovávaných prostřednictvím technologie Core Data na základě kritérií......................................................... 219 Aplikace QuoteMonger .................................................................................................. 220 Vytvoření projektu a jeho datového modelu ............................................................................221 Okno pro zadávání dat.......................................................................................................................221 Okno pro vyhledávání citací ............................................................................................................224

K1775.indd 6

14.9.2011 12:21:31


7

Obsah Omezování výsledků vyhledávání prostřednictvím třídy NSPredicate (predikátů)................................................... 226 Vytváření predikátů .............................................................................................................................226 Specifikace predikátu pro třídu NSArrayController v nástroji Interface Builder ...........228

Predikáty definované uživatelem ............................................................................... 228 Přidání predikátu do delegátu aplikace ......................................................................................229 Přidání editoru predikátů do vyhledávacího okna ..................................................................230 Konfigurace editoru predikátů........................................................................................................230

Uložení predikátu ............................................................................................................. 233 Závěr...................................................................................................................................... 234

KAPITOLA 10 Okna, nabídky a lístky ................................................. 235 Třídy NSWindow a NSPanel .......................................................................................... 236 Standardní systémové panely .........................................................................................................240 Řídicí objekt s vlastním nib souborem .........................................................................................245 Modální okna.........................................................................................................................................248

Systémové nabídky.......................................................................................................... 251 Standardní položky nabídek aplikace ..........................................................................................252 Vaše vlastní nabídky............................................................................................................................252

Lístky ..................................................................................................................................... 259 Shrnutí .................................................................................................................................. 261

KAPITOLA 11 Aplikace pro zpracování dokumentů ......................... 263 Vytvoření aplikace ColorMix......................................................................................... 265 Průzkum výchozích nib souborů....................................................................................................265 Definování modelu..............................................................................................................................266

Nastavení dvou barev ..................................................................................................... 266 Nejjednodušší grafické uživatelské rozhraní na světě............................................................267 Vytvoření výchozí sady barev ..........................................................................................................268

Výběr formátu souborů .................................................................................................. 270 Přidání barvy ...................................................................................................................... 270 Třída ColorBlendView .........................................................................................................................271 Přidání smísených barev do grafického uživatelského rozhraní ........................................273 Přidání pozlátka na pozadí ...............................................................................................................278

Několik slov o Undo a Redo operacích..................................................................... 279 Undo zásobník ......................................................................................................................................280

Závěr...................................................................................................................................... 281

K1775.indd 7

14.9.2011 12:21:31


8

Obsah

KAPITOLA 12 Výjimky, signály, chyby a ladění ................................. 283 Ošetřování výjimek .......................................................................................................... 284 Zpracování výjimek .............................................................................................................................284 Omezená role výjimek v prostředí Cocoa ...................................................................................285 Testovací aplikace ................................................................................................................................286 Výjimka NSInvalidArgumentException ........................................................................................292 Výjimka NSRangeException .............................................................................................................294 Další druhy výjimek .............................................................................................................................296

Horší než výjimky: smrt způsobená signálem ....................................................... 297 Třída NSError ...................................................................................................................... 299 Domény a kódy chyb ..........................................................................................................................300 Detekce výskytu chyby ......................................................................................................................301 Prezentace chyby .................................................................................................................................305

Závěr...................................................................................................................................... 306

KAPITOLA 13 Kreslení v Cocoa............................................................ 307 Základy ................................................................................................................................. 308 Systém souřadnic rámce vzhledu ..................................................................................................308 Obdélníky frame a bounds ...............................................................................................................309 Obdélníky, body a rozměry ..............................................................................................................309 Základy koncepce křivek ...................................................................................................................310

Vytvoření podtřídy třídy NSView ................................................................................ 310 Struktury jazyka C ................................................................................................................................311 Základní kreslicí metoda: drawRect: .............................................................................................311 Grafické stavy ........................................................................................................................................311 Pomocné objekty pro vytváření křivek ........................................................................................312 Barvy a grafický kontext ....................................................................................................................313 A kromě barvy .......................................................................................................................................313 Manuální konstrukce křivky .............................................................................................................314 Posunutí hranic .....................................................................................................................................315

Aplikace LOLmaker .......................................................................................................... 317 První kroky k Lolu.................................................................................................................................318 Třída LOLView ........................................................................................................................................320

Základy obsluhy tisku ..................................................................................................... 326 Shrnutí .................................................................................................................................. 327

KAPITOLA 14 Pokročilé kreslení ......................................................... 329 Úprava křivky ..................................................................................................................... 329 Přípravy ....................................................................................................................................................330 Infrastruktura aplikace .......................................................................................................................332

K1775.indd 8

14.9.2011 12:21:32


9

Obsah Vykreslení křivky ...................................................................................................................................333 Sledování myši ......................................................................................................................................335

Několik vylepšení.............................................................................................................. 337 Úvod do technologie Core Animation...................................................................... 338 Základy animací ................................................................................................................ 339 Implicitní animace ...............................................................................................................................339 Explicitní animace ................................................................................................................................340 Seskupování animací ..........................................................................................................................345

Shrnutí .................................................................................................................................. 353

KAPITOLA 15 Práce se soubory........................................................... 355 Implicitní přístup k souborům ..................................................................................... 355 Vysokoúrovňové operace se soubory ....................................................................... 357 Zdrojový kód aplikace What About That File............................................................................358 Uživatelské rozhraní aplikace What About That File ...............................................................363

Shrnutí .................................................................................................................................. 367

KAPITOLA 16 Souběžnost ................................................................... 369 Aplikace SlowWorker ...................................................................................................... 370 Základy provádění zdrojového kódu v různých vláknech ................................ 372 Jednotky práce......................................................................................................................................373 Operační fronty .....................................................................................................................................374

Oživení aplikace SlowWorker ....................................................................................... 374 Rozšíření třídy NSObject....................................................................................................................377 Vyžádání hlavního vlákna .................................................................................................................378

GCD: Řazení do nízkoúrovňových front ................................................................... 383 Bloky .........................................................................................................................................................384 Druhý způsob oživení aplikace SlowWorker..............................................................................385 Další možnost: třída NSBlockOperation.......................................................................................388

Závěr...................................................................................................................................... 389

KAPITOLA 17 Pohled do budoucnosti ................................................ 391 Další techniky charakteristické pro Cocoa ............................................................. 392 Notifikace ................................................................................................................................................392 Bloky .........................................................................................................................................................394

Prostředí Cocoa a jiné jazyky........................................................................................ 396 PyObjC .....................................................................................................................................................397 MacRuby ..................................................................................................................................................397 Nu...............................................................................................................................................................398 JavaScript ................................................................................................................................................399

K1775.indd 9

14.9.2011 12:21:32


10

Obsah F-Script .....................................................................................................................................................400

Portované prostředí Cocoa ........................................................................................... 401 Cocoa Touch ...........................................................................................................................................401 GNUstep a Cocotron ...........................................................................................................................402 Cappuccino/Objective-J ....................................................................................................................403

Konec naší společné cesty ............................................................................................ 403

Rejstřík .......................................................................... 404

K1775.indd 10

14.9.2011 12:21:32


Předmluva Dávejte si pozor na nové nápady Dava Marka. Davovo jméno jste už asi na obálkách knih nakladatelství Apress o počítačích Macintosh nebo platformě iPhone viděli. Jeho jméno je vlastně i na obálce této knihy. Dave je redaktor série knih o počítačích Macintosh a platformě iPhone, umí dodělat, co si předsevzal, a rád bych měl alespoň půlku jeho energie. Když jste jeho kamarád, hned vás zapojí do práce. Mě také zapojuje do práce (nad rámec mého běžného povolání), a to už po celá léta. „Hej Marku, mám takový nápad, že bychom mohli napsat úvod do programování v Objective-C. Co kdybyste ho se Scottem Knasterem napsali?“ Připadalo mi, že by to mohla být zábava, a taky že byla. Ještě pořád se občas směji vtipům o programování, které jsme si při tom vyprávěli. „Hej Marku, máme s Jeffem LaMarchem takový nápad, že bychom mohli napsat knihu o iPhone SDK, chtěl bys udělat její odbornou korekturu?“ Připadalo mi, že by to mohla být zábava, a taky že byla. Poté udělali další knihu, na které jsem se podílel jako odborný korektor. A najednou jsem si uvědomil, že provádění odborných korektur je opravdu zábavné. Představte si to. Musíte přečíst odbornou knihu předtím, než vyjde. Musíte se při tom naučit všechny ty skvělé novinky. A nejlepší na tom je, že při tom hledáte chyby v textu a ve zdrojovém kódu, kibicujete a obecně vzato navrhujete různé změny. A poté to vše také musíte opravit! A dokonce za to ještě dostáváte zaplaceno! Moje drahá polovička mi nechá všechny peníze, které vydělám na knihách, takže je můžu použít pro svoje účely. Tátův foťák potřebuje nový objektiv. A najednou mi zavolá Dave a říká: „Hej Marku, mám takový nápad, že bychom mohli napsat knihu o Cocoa, chtěl bys udělat její odbornou korekturu?“ Připadalo mi, že by to mohla být zábava. A navíc táta potřebuje nový objektiv 85mm f/1.8. Takže se po „e-mailu“ seznámím s tímhle Jackem Nuttingem. Hledám na Googlu jako blázen, kdo to vlastně je. Chvíli chatujeme. Začnu dostávat kapitoly, které mám opravovat. Jsou zajímavé. Jsou informativní. Učím se nové věci (aha, takže takhle fungují vazby pro třídu NSPopupMenu). A navíc jsou i zábavné. U počítače se zřídkakdy opravdu zasměju, ale při provádění korektury této knihy jsem se párkrát opravdu málem udusil kafem.

K1775.indd 11

14.9.2011 12:21:32


12

Předmluva

Ze začátku jsem měl jisté pochybnosti. Cocoa je široké téma. Typická desktop aplikace pro systém Mac OS X vyžaduje mnohem víc práce a využívá mnohem více technologií a tříd prostředí Cocoa než typická aplikace pro iPhone. Některé části Cocoa jsou navíc zastaralé a  zbytečně složité, protože jsou dvacet let staré. Některé části Cocoa jsou naopak zbrusu nové. Ale ať už píšete jakoukoliv Cocoa aplikaci, musíte toho vědět opravdu hodně, abyste mohli vůbec začít. Jack vybral ty aktuálně nejlepší techniky programování aplikací v systému Mac OS X 10.5 a 10.6 (a novějších verzích). Kniha má dostatečný záběr, abyste se dozvěděli to, co potřebujete, dostatečnou hloubku na to, abyste mohli nabyté vědomosti používat v praxi, a rozebírá dostatek témat, kterým se můžete dále věnovat sami. Doufám, že si tuhle knihu užijete, její korektura mě opravdu bavila. Mark Dalrymple

K1775.indd 12

14.9.2011 12:21:32


O autorech Jack Nutting pracoval s prostředím Cocoa již za starých časů, dávno předtím, než se vůbec začalo jmenovat Cocoa. V prostředí Cocoa a jeho předchůdcích vyvinul širokou škálu nejrůznějšího softwaru pro nejrůznější obory, včetně herního průmyslu, grafického designu, digitální online distribuce, telekomunikací, finančnictví, publishingu a cestovního ruchu. Když zrovna nepracuje na softwarových projektech pro počítače Macintosh a pro platformu iPhon, nebo na vývoji webových aplikací v prostředí Ruby on Rails, tráví obvykle svůj volný čas s rodinou. Jack je vášnivý propagátor jazyka Objective-C a frameworků prostředí Cocoa. Na požádání udělá podrobnou přednášku o výhodách dynamického posílání zpráv a manipulací se třídami za běhu programu komukoliv, kdo je ochotný poslouchat (a dokonce i těm, kteří poslouchat nechtějí). Čas od času také zveřejňuje články na svém blogu, který najdete na adrese www.nuthole.com. Jeff LaMarche je dlouholetý vývojář programů pro Macintosh a  pro iPhone s  více než dvaceti lety zkušeností s programováním. Píše o Cocoa a o programovacím jazyce Objective-C do časopisu MacTech Magazine a články pro webovou stránku Apple’s Developer Technical Services. Má zkušenosti s vývojem komerčního softwaru, které získal při práci ve firmě PeopleSoft, jejímž zaměstnancem byl od počátku devadesátých let, a s prací nezávislého konzultanta, kterým se stal později. V současné době se zaměřuje pouze na programování aplikací pro počítače Macintosh a pro platformu iPhone. Dave Mark je dlouholetý vývojář programů pro Macintosh a autor mnoha knih o vývoji programů pro tento počítač, včetně knih Learn C on the Mac, The Macintosh Programming Primer series a Ultimate Mac Programming. Jeho blog najdete na adrese http:// www.davemark.com.

K1775.indd 13

14.9.2011 12:21:32


O odborném korektorovi Mark Dalrymple je dlouholetý vývojář programů pro počítače Macintosh a Unix, který pracuje na multiplatformních sadách nástrojů, nástrojích pro Internet publishing, vysoce výkonných webových serverech a aplikacích pro koncové uživatele. Je také hlavním autorem knih Advanced Mac OS X Programming (Big Nerd Ranch, 2005) a Learn Objective-C on the Mac (Apress, 2009). Ve volném čase hraje na trombon a na fagot a vyrábí zvířátka z nafukovacích balónků.

K1775.indd 14

14.9.2011 12:21:32


Poděkování Tato kniha by nikdy nevznikla bez práce mnoha různých lidí. Zkušené vedení a vhled do procesu vydávání knih Claye Andrese mi nespočetněkrát pomohly pokračovat správným směrem. Reakce a konkrétní rady Dava Marka týkající se tvorby textu byly zcela zásadní; věřte mi, že byste nechtěli vidět první verzi první kapitoly, kterou jsem napsal předtím, než mi Dave začal radit. Práce Jeffa LaMarche na prvních kapitolách a jeho původní náčrt zbytku knihy mi poskytly solidní základy, na kterých jsem mohl dále stavět. Mark Dalrymple odvedl skvělou práci při pročesávání technických detailů knihy, čímž zachoval moji vážnost a současně mi vylepšil fazonu. Brian MacDonald díky své pozici velkého odborníka, který však nemá žádnou konkrétní zkušenost s Cocoa, pomohl objevit kousíčky a kousky knihy, které bylo nutné rozšířit anebo naopak zkrátit. Mary Tobinová pak se mnou jako s autorem-nováčkem měla v průběhu několika uplynulých měsíců velkou trpělivost a velmi mi pomohla sledováním stavu práce na jednotlivých kapitolách a organizací celého procesu. A pomocný redaktor Tracy Brown Collins pečlivě a efektivně opravil záplavu kapitol odevzdaných dávno po oficiálním termínu. Mimo zmíněných spolupracovníků se na vzniku knihy podílelo množství lidí zodpovědných za její grafickou podobu a další aspekty jejího vydání, které sice vůbec neznám, ale kteří byli naprosto nepostradatelným článkem její produkce. Díky vám všem! Kromě lidí spojených s nakladatelstvím Apress mi při psaní knihy nejrůznějším způsobem a v nejrůznějších ohledech pomohlo množství přátel, kteří dobrovolně obětovali svůj volný čas anebo alespoň vyhověli mým žádostem o radu. Saurabh Sharan mi poskytl cennou zpětnou vazbu na téměř všechny kapitoly knihy a pomohl mi nalézt sekce, které potřebovaly podrobnější výklad. Joar Wingfors mi dodal detailní komentář několika kapitol a šikovný veřejný zdrojový kód, který jsme použili v 11. kapitole. Tim Burks poskytl důležitou zpětnou vazbu na poslední kapitolu. Můj velký dík patří Tomu Gellererovi, který mě spojil s nakladatelstvím Apress; bez Toma, který mě dal s nakladatelstvím dohromady, bych zde stále ještě seděl a přemýšlel, jestli někdy vůbec napíšu „opravdovou“ knihu. A nakonec bych rád poděkoval své manželce Weronice Meijer a našim dcerám Henriettě a Dorotee, které snášely mé ponocování a „promarněné“ víkendy, které jsem strávil prací na této knize, a byly trpělivější, než bych si kdy mohl vůbec přát; tuto knihu věnuji jim.

K1775.indd 15

14.9.2011 12:21:32


K1775.indd 16

14.9.2011 12:21:32


Úvod S prostředím Cocoa jsem se poprvé setkal v roce 1989 jako student vysoké školy. Bylo to samozřejmě dávno předtím, než společnost Apple vyrobila iPhone a systém Mac OS X, a prostředí Cocoa se tenkrát dokonce ani nejmenovalo Cocoa. Zárodek dnešního Cocoa byl tenkrát součástí platformy NeXTStep, operačního systému počítačů vyráběných společností NeXT. Systém NeXTStep předběhl svou dobu o celé roky a zatímco laboratoř plnou počítačů společnosti NeXT nikdo nepoužíval, já jsem s nimi v rámci své studentské brigády jako jejich správce pracoval denně. Jako uživatel jsem byl zcela unešený. Nebudu se zde rozepisovat o jejich kladných vlastnostech z pohledu uživatele, ale pouze zmíním, že mnohé z nejlepších vlastností systému Mac OS X nepochází ani tak ze starých počítačů Macintosh, jako spíše ze systému NeXTStep. V té době neexistoval žádný Internet, komunita vývojářů aplikací pro systém NeXTStep nebyla zrovna velká a kromě nesrozumitelných tlustopisů, které společnost NeXT dodávala spolu se svými prvními počítači, neexistovalo ani mnoho knih o jejich vývojovém prostředí. Čas od času jsem se pokoušel přijít na kloub jazyku Objective-C a knihovně AppKit, ale bez pomoci odborníků a spousty vzorového zdrojového kódu (nemluvě o mých studijních povinnostech, které odpoutávaly moji pozornost od zábavných projektů) jsem v tomto směru v podstatě zakrněl. Avšak po dokončení vysoké školy se stalo něco zcela nečekaného – kamarád mě upozornil na konzultační firmu, která vyvíjela zakázkové aplikace určené pro systém NeXTStep pro velmi důležité klienty, a já měl to štěstí, že mě přijala do zaměstnání. Najednou jsem okolo sebe měl skupinu kolegů, kteří nejenže měli zkušenosti s vývojem aplikací pro systém NeXTStep, ale někteří z nich dokonce pro firmu NeXT dříve pracovali! Stačilo, aby mi trochu poradili, a věci, které mi po léta připadaly jako záhada, najednou začaly dávat smysl. Během několika týdnů jsem se toho naučil tolik, že jsme mohl začít sám učit jiné vývojáře. Pointa tohoto příběhu nespočívá v tom, že jsem geniální nebo že se rychle učím, ale v tom, že sada technologií, které nyní společně nazýváme Cocoa, je velmi výkonná a lze se ji snadno naučit používat – je však potřeba, aby vám s tím někdo pomohl. Doufám, že vás tato kniha postrčí správným směrem, že vám pomůže porozumět podstatě Cocoa programování a že až ji dočtete, budete vědět o Cocoa dost na to, abyste se sami dále vyvíjeli a psali své vysněné aplikace. Jednoduše řečeno, že se jedná o knihu, kterou bych býval potřeboval před oněmi dvaceti lety. Jack Nutting

K1775.indd 17

14.9.2011 12:21:32


K1775.indd 18

14.9.2011 12:21:33


KAPITOLA 1 Kakao má každý rád Vítejte! Tyto řádky čtete jistě proto, že chcete psát programy pro počítače Macintosh, a v takovém případě jste si pořídili tu správnou knihu. Až ji dočtete, budete vědět vše, co je třeba pro vývoj rychlých, výkonných a dobře vypadajících aplikací pro systém Mac OS X. Klíčem k  vývoji moderních aplikací pro počítače Macintosh je prostředí Cocoa. Podle společnosti Apple je Cocoa sadou objektově orientovaných frameworků, které zajišťují běhové prostředí pro aplikace určené pro systém Mac OS X. Jak se budete postupně touto knihou prokousávat dál a dál, dozvíte se o frameworcích tvořících prostředí Cocoa vše potřebné. Prozatím si ho můžete představovat jako asistenta vývojáře, který se stará o většinu domácích prací spojených s vývojem aplikací pro počítače Macintosh. Téměř jakýkoliv běžný úkon aplikace pro Macintosh, kreslením oken počínaje a blikáním kurzoru v textovém poli konče, obsluhuje prostředí Cocoa za vás, takže se můžete plně soustředit na zdrojový kód, který činí vaši aplikaci jedinečnou. Prostředí Cocoa obsahuje třídy, které jistě splní téměř všechny vaše vývojové nároky. Jeho součástí jsou třídy reprezentující veškeré komponenty uživatelského rozhraní systému Mac OS X, okny a nabídkami počínaje, přes posuvníky a tlačítka a obrázky a ikonami konče. Představíte-li si jakýkoliv prvek uživatelského rozhraní, který byste chtěli přidat do své aplikace, existuje velmi dobrá šance, že je již implementovaný v podobě jedné ze tříd prostředí.

K1775.indd 19

14.9.2011 12:21:33

Profile for Flexibooks

Cocoa_Mark_Nutting_LaMarche  

Cocoa_Mark_Nutting_LaMarche