Začínáme programovat v Cocoa aneb v čem je MacOS X opravdu lepší než Windows - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

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:

Soutěž

Sponzorem soutěže je:

IDIF

 

Jaký fotograf/ka získal/a cenu za nejpopulárnější příspěvek v Nikon Photo Contest?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Software

Začínáme programovat v Cocoa aneb v čem je MacOS X opravdu lepší než Windows

12. února 2002, 00.00 | Chcete napsat váš první program za 20 minut? Máte Mac OS X? Ukážeme vám, jak snadné to může být - nebojte se a klidně vstupte... Snadnější to totiž už být nemůže!

Nejdříve bych chtěl podotknout, že se nepovažuji za programátora. Bohužel, nemám na to čas. Je to jen výstraha pro ty, kteří si o sobě myslí, že programátoři jsou a že by určitě uměli napsat to, co vám tady ukážu, lépe. Odpovědí je, určitě ano. A prosba - napište do příspěvků pod článkem, jak na to, rád se něco přiučím.

Další věc, kterou bych chtěl hned na začátku podotknout, je to, že už jsem trochu otrávený z těch sporů, které se vedou mezi "mekisty" a těmi ostatními. Jedni říkají, že jsou počítače Apple lepší na grafiku, druzí zase nevidí dostatek utilitek, které by něco užitečného dělaly. Takže, pojďme udělat sázku. Vsaďme se, že programovat pro Maca je snazší, než pro Windows. Jako úvod, jen pro to, abych vás zatáhl do problematiky, si napíšeme takový jednodušší TextEdit. Už vidím ty zděšené obličeje rádoby programátorů pro Okna: "Cože, začneme s textovým editorem? To není zrovna nejjednodušší program..." Pokud použijeme Cocoa, uvidíte, že nemají pravdu.

Co budeme potřebovat?

Počítač s nainstalovaným OS X, nainstalované vývojářské nástroje a dvacet minut času... Já budu používat OS X 10.1.3 (5Q39), ProjectBuilder 1.1.1 a InterfaceBuilder 2.2. Takže, držte si klobouky, jedeme z kopce!


Vytvoříme novy projekt

Nastavení projektu

Nejdříve spustíme ProjectBuilder (PB). Vytvoříme nový projekt, ze seznamu vybereme "Cocoa Document-based Application". Projekt nazveme třeba "MujMac TextEdit" a stiskneme tlačítko "Finish".

Po chvíli se objeví okno, které sdružuje veškeré zdrojové soubory k našemu projektu. Jako první věc nastavíme všechny informace o projektu. Klikněte na záložku "Targets", vyberte v levé horní části okna náš projekt - "MujMac TextEdit" a opište nastavení tak, jak je vidět na obrázku.


Po kliknutí se zobrazí v novém okně plná velikost

Krátké vysvětlení k zadávaným položkám:

Identifier - by měl být ve formátu stát.developer.produkt, takže cz.mujmac.TextEdit. Později najdeme pod tímto označením v ~/Library/Preferences předvolby k našemu programu
Signature - kód vývojáře, měl by se registrovat u Apple
Document Type Extensions - mujmac, to bude přípona našich souborů
Document Type OS Type - starý MacOS Typ souboru
Document Type Role - Editor, tím říkáme, že umíme soubory s příponou .mujmac číst i zapisovat
Pokud si chcete prohlédnout i další nastavení, klidně to udělejte, ale my ostatní prozatím s nastavením projektu končíme.

První řádky kódu

Tak, co kdybychom konečně napsali nějaký ten kód? Nebojte, rozjezd bude opravdu krátký. Předpokládám, že máte otevřený náš projekt a vybranou záložku "Files". Najděte soubor MyDocument.h a upravte ho tak, jak vidíte v následujícím odstavci:

@interface MyDocument : NSDocument
{
    IBOutlet NSTextView	*textView;
    NSString		*obsah;
}
@end

A je to. Ta první řádka znamená, že v Interface Builderu (IB) vytvoříme objekt NSTextView, který budeme nadále nazývat jménem textView. A to, co je uvnitř, bude typu NSString a budeme tomu říkat obsah. Snadné, že?

Okno

Nyní je na řadě přidělat také nějaké grafické objekty. V projektu si najděte skupinu Resources a poklepejte na ikonku MyDocument.nib, měl by se vám otevřít program Interface Builder a okno, které má uprostřed napsán text. Ten můžete samozřejmě smazat. Teď se přepněte zpět do PB, chytněte ikonku souboru MyDocument.h a přetáhněte ji do okna IB.

Z paletky s objekty vytáhněte TextView a hoďte ho do našeho okna. Pak upravte velikost tak, aby bylo TextView od kraje do kraje na všech stranách. Předpokládám, že vidíte také paletku "Inspector", ve které z menu vyberte položku "Size" a nastavte ji tak, jak vidíte na obrázku.

Když teď zmáčknete Apple+R, dostanete se do náhledového zobrazení, takže si můžete vyzkoušet, jak se textView chová. Pokud jste nastavili vše tak, jako já, můžete zvětšovat okno a textView se zvětšuje s ním. Následující kroky jsou velmi důležité. Jsme stále v IB, vyberte v dolním okně, které se jmenuje MyDocument.nib záložku "Instances". Teď zmáčkněte klávesu Ctrl, najeďte myší na ikonku "File's Owner" a táhněte myší k našemu oknu.

Ve chvíli, kdy přejedete nad naše textView, celé se orámuje. Paletka "Inspector" se změní na položku "Connections". V seznamu "Outlets" (přípojky) by měla být vybraná položka textView. Nyní stiskněte tlačítko "Connect" a vedle textView se udělá tečka. Nyní můžete MyDocument.nib uložit a přepnout se zpět do PB.

Zkusíme, jak nám to funguje

V PB, v menu "Build" vybereme "Build and Run". Poprvé trvá kompilace delší dobu, protože se zároveň celý projekt indexuje. Pokud jste neudělali žádnou chybu, proběhne vše bez problémů a za chvilku se spustí program MujMac TextEdit. Vyzkoušejte si všechna menu, jak se program chová. Uvědomte si, že jste zatím napsali jen 2 řádky. Zkuste několikrát zmáčknout Apple+N a něco napsat do našeho textView. Třeba česky...

Další kód

Při testování jste jistě zjistili, že náš program má několik nedostatků. Ten hlavní a nejdůležitější je ten, že neumí ukládat ani číst soubory, které sám vyrobí. A to teď doděláme. Najděte si soubor MyDocument.m. V něm proveďte tyto úpravy:

- (NSData *)dataRepresentationOfType:(NSString *)aType
{
    // Insert code here to write your document from the given data. 
You can also choose to override -fileWrapperRepresentationOfType:
or -writeToFile:ofType: instead.
    return [[textView string] dataUsingEncoding:NSUnicodeStringEncoding];
}
řádka, začínající // je komentář, takže ta nás nezajímá. Říká se v ní, že touto funkcí máme ukázat data, která se budou ukládat.
[textView string] = řetězec znaků napsaných v textView
dataUsingEncoding:NSUnicodeStringEncoding = používáme Unicode
celá fuknce tedy z ní: vracíme řetězec znaků napsaných v textView s Unicode kódováním
O samotný proces uložení souboru se systém postará sám.
- (BOOL)loadDataRepresentation:(NSData *)data ofType:(NSString *)aType
{
    // Insert code here to read your document from the given data. 
You can also choose to override -loadFileWrapperRepresentation:ofType:
or -readFromFile:ofType: instead.
    obsah = [[NSString alloc] initWithData:data
                                  encoding:NSUnicodeStringEncoding];
    return (nil!=obsah);
}

Tato funkce se používá, když načítáme náš soubor.
nejdříve vytvoříme proměnnou obsah, načteme do ní data a upozorníme systém, že jsme použili při ukládání Unicode. Ta poslední řádka znamená, že pokud se nám úspěšně podařilo vytvořit proměnnou obsah, je výsledek funkce 1, v opačném případě 0.

Další build

Tak, zkusme opět, jak nám program funguje. V menu "Build" vybereme "Build and Run", nyní by vše mělo proběhnout podstatně rychleji.Počkejte, až se program pustí a napište do textView libovolný text. Nyní vyberte z menu "File" položku "Save". Všimněte si, že dialogové okno funguje přesně tak, jak má - když ho zvětšíte do plné velikosti, objevíte vlevo dole přepínač "Hide extension". I to by mělo fungovat správně. Uložte soubor. Nyní ho zkuste otevřít. Nic se nestalo? Respektive otevřelo se okno a nic v něm není? Zkuste soubor hodit na ten originální TextEdit, který dodává Apple. Aha, je v pořádku.
Problém je v tom, že jsme programu neřekli, aby nám obsah vložil do textView. Hned to napravíme.

- (void)windowControllerDidLoadNib:(NSWindowController *) aController
{
    [super windowControllerDidLoadNib:aController];
    // Add any code here that need to be executed once the
windowController has loaded the document's window.
    if (obsah)
    {
        [textView setString:obsah];
        [obsah release];
    }
        
}
if (obsah) znamená, pokud máme v proměnné obsah něco, pokračuj dál
[textView setString:obsah] vlož obsah do textView
[obsah release] protože textView vyrobí kopii našeho souboru, můžeme originální proměnou obsah uvolnit, abychom šetřili paměť.

Tak, a jsme hotovi. Schválně kolik jsme napsali řádků? Deset!

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Začínáme s  

 » Rubriky  » Software  

Poslat článek

Nyní máte možnost poslat odkaz článku svým přátelům:

Váš e-mail:

(Není povinný)

E-mail adresáta:

Odkaz článku:

Vzkaz:

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: