Programování na Macu - Aplikace pro kontrolu nové pošty (2) - 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

 

Kde se narodil známý fotograf František Drtikol?

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

Seriály

Více seriálů



Software

Programování na Macu - Aplikace pro kontrolu nové pošty (2)

7. prosince 2007, 09.00 | V minulém díle jsme založili nový projekt v Xcode a nakonfigurovali jej tak,

abychom mohli použít pro část kódu Javu. V tomto díle nejprve vyzkoušíme, jak

použití tříd napsaných v Javě funguje, a potom se vrátíme k uživatelskému

rozhraní a přidáme do lišty v pravém horním rohu svou ikonku a k ní menu.

Volání kódu v Javě

Zatím máme jen jednu prázdnou třídu v souboru Test.java. Otevřete tento soubor a přidejte do něj zvýrazněné řádky z následujícího výpisu:

public class Test {

    public void write(String msg) {
        System.out.println(msg);
    }

}

Přidaná metoda dostane jeden parametr typu String a vypíše jej na standardní výstup (v našem případě na konzolu Xcode).
Aby bylo možné třídu použít v Objective-C, musíme pro ni napsat rozhraní. Přidáme tedy soubor JavaInterfaces.h. Klikněte pravým tlačítkem na "Other Sources", vyberte "Add > New File..." a v okně položku "Empty File in Project". Do nového souboru nakopírujte tento kód:

@interface Test
{}
- (void)write:(NSString*)msg;
@end

Nyní bude při volání metody write z Objective-C jasné, jaké argumenty má dostat a jakého typu je návratová hodnota (resp. že metoda nic nevrací). Převod z typu NSString na javovský String probíhá automaticky, o to se starat nemusíme.
Teď otevřete soubor main.m a přidejte do něj zvýrazněné řádky:

#import <Cocoa/Cocoa.h>
#import "JavaInterfaces.h"

int main(int argc, char *argv[])
{
    Test* test = NSJavaObjectNamedInPath(@"Test", nil);
    [test write: @"Hello from Java"];
    return NSApplicationMain(argc,  (const char **) argv);
}

Po kliknutí na "Build and Go" se po kompilaci program spustí a v konzole byste měli vidět na posledním řádku text "Hello from Java". První řádek přidaného kódu vytvoří instanci třídy Test, druhý řádek zavolá její metodu write s jedním parametrem (v terminologii Objective-C bychom řekli, že jí předá zprávu). Jak již bylo uvedeno, argument typu NSString je před zavoláním metody převeden na typ v Javě, což se týká obecně všech základních typů a většiny tříd z frameworků Foundation a Application Kit (tj. tříd, jejichž jméno začíná prefixem NS).
Neděste se spousty varování v konzole. Ta se týkají správy paměti, konkrétně si systém stěžuje, že neexistuji žádný pool pro uvolňování paměti (autorelease pool). My budeme v budoucnu používat Javu až po inicializaci celé aplikace, kdy už bude k dispozici i korektní správa paměti.

Přidání ikonky a menu

A teď zpět k uživatelskému rozhraní.
  1. Klikněte dvakrát na položku MainMenu.nib. V Interface Builderu vyberte v hlavním okně záložku "Classes", klikněte na "NSObject" a stiskněte Enter. Tím jste vytvořili novou třídu, jejíž nadtřídou je NSObject, kterou pojmenujte AppController.

  1. V menu "Classes" vyberte "Instantiate AppController". Tím vytvoříte instanci této třídy, ke které budete mít přístup z kódu v Objective-C.
  2. V menu "Classes" vyberte "Create Files for AppController". Tento příkaz vygeneruje soubory AppController.h a AppController.m a přidá je do projektu.
  1. Vraťte se do Xcode a upravte soubory AppController.h a AppController.m.

// AppController.h

#import <Cocoa/Cocoa.h>


@interface AppController : NSObject
{
    NSStatusItem* statusItem;
}
- (NSMenu*)createMenu;
@end

Zde jsme nadefinovali vlastnost třídy statusItem, reprezentující položku horní lišty, a metodu createMenu, jež vytvoří nabídku naší aplikace.

// AppController.m

#import "AppController.h"


@implementation AppController
- (void)awakeFromNib {
    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength: NSVariableStatusItemLength] retain];
    [statusItem setHighlightMode: YES];
    [statusItem setImage: [NSImage imageNamed: @"small"]];
    [statusItem setMenu: [self createMenu]];
}

- (NSMenu*)createMenu {
    NSMenu* menu = [[NSMenu alloc] initWithTitle: @"Email Notifier"];
   
    NSMenuItem* item = [[NSMenuItem alloc] initWithTitle: @"Info..." action: @selector(about) keyEquivalent: @""];
    [item setTarget: self];
    [menu addItem: item];
   
    [menu addItem: [NSMenuItem separatorItem]];
   
    item = [[NSMenuItem alloc] initWithTitle: @"Quit" action: @selector(exit) keyEquivalent: @""];
    [item setTarget: self];
    [menu addItem: item];
   
    return menu;
}

- (void)dealloc {
    [statusItem release];
    [super dealloc];
}

- (void)about {
    [NSApp activateIgnoringOtherApps: YES];
    [NSApp orderFrontStandardAboutPanel: self];
}

- (void)exit {
    [NSApp terminate: nil];
}
@end

U této třídy se na chvilku zastavíme. Přidali jsme několik metod, které si zaslouží vysvětlení. Začneme od těch jednodušších:
  • Metoda exit ukončí aplikaci předáním zprávy terminate instanci NSApp.
  • Metoda about zobrazí dialog o naší aplikaci (což je ekvivalentní kliknutí na položku "About..." ve standardním menu programu).
  • Metoda dealloc uvolní paměť instance třídy AppController těsně před jejím zrušením.
  • Metoda awakeFromNib je zavolána po nahrání celého .nib souboru do paměti a instanci třídy AppController. My ji využíváme k přidání ikonky do lišty a vytvoření menu. Aby se ikonka zobrazila, musíte ji přidat do projektu. Klikněte na záložku "Resources", vyberte "Add > Existing Files..." a určete soubor s obrázkem, který  v liště bude reprezentovat vaši aplikaci. Soubor se musí jmenovat small, přípona závisí na typu souboru.
  • Metoda createMenu vytvoří objekt typu NSMenu s položkami Info... a Quit. První položka vyvolá metodu about a druhá metodu exit ve stejné třídě.
Nakonec ještě přidejte do souboru Info.plist následující dva řádky:

<key>NSUIElement</key>
<string>1</string>

To způsobí, že po spuštění aplikace se v docku nezobrazí její ikona ani hlavní menu, jak je pro tento typ programů obvyklé.
Kliknete-li nyní na "Build and Go", objeví se v horní liště ikonka s menu:
V dalším díle si ukážeme práci s modelem MVC (model-view-controller) a s objektovou databází.

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

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

 

 

 

 

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

Uživatelské jméno:

Heslo: