iPhone 101: Implementace kontroleru pohledu

K implementaci kontroleru pohledu je potřeba několika kroků - instanční proměnné včetně správy paměti, implementace metody changeGreeting: a zrušení klávesnice po klepnutí na tlačítko Done.

Vlastnosti

Prvně je zapotřebí říct překladači aby syntetizoval přístupové metody.

Do souboru MyViewController.m přidejte následující řádek za @implementation MyViewController:

@synthesize textField;
@synthesize label;
@synthesize string;

Tímto řekneme překladači aby syntetizoval metody pro tyto vlastnosti podle specifikace kterou jste poskytli v souboru rozhraní. Například deklarace vlastnosti string je @property (nonatomic, copy) NSString *string;, takže překladač vygeneruje dvě přístupové metody: - (NSString *)string a - (void)setString:(NSString *)newString. V metodě setString: se vytvoří kopie řetězce předaného jak argument. To je užitečné pro zajištění zapouzdření (předaný řetězec může být modifikovatelný, takže vaší snahou je zajistit aby měl kontroler vlastní kopii). Více informací o zapouzdření najdete v Mechanisms of Abstraction v Object-Oriented Programming with Objective-C.

Musíte navrátit vlastnictví v metodě dealloc, protože všechny deklarace vlastností definují kontroler pohledu jako vlastníka instančních proměnných (copy implikuje vlastnictví, viz Memory Management Rules v Memory Management Programming Guide for Cocoa).

Změňte metodu dealloc v souboru MyViewController.m tak aby uvolnila instanční proměnné před voláním implementace v nadtřídě:

- (void)dealloc {
    [textField release];
    [label release];
    [string release];
    [super dealloc];
}

Metoda changeGreeting:

Při klepnutí na tlačítko se kontroleru pohledu pošle zpráva changeGreeting:. Kontroler pohledu by pak měl dostat řetězec z texového pole a aktualizovat popisek.

Dokončete implementaci metody changeGreeting: v souboru MyViewController.m:

- (IBAction)changeGreeting:(id)sender { 
    self.string = textField.text;  
    NSString *nameString = string;
 
    if ([nameString length] == 0) { 
        nameString = @"World"; 
    } 

    NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString]; 
    label.text = greeting; 
    [greeting release]; 
}

V této metodě se provádí několik operací: