2009-07-23 11 views
1

Ich erstelle einen benutzerdefinierten ViewController. Dieser VC muss einige Daten laden, die für den Fall, dass er erstellt wird, bekannt sind und an den Anfang des NavigationControllers, an dem er beteiligt sein soll, senden.Cocoa Touch UIViewController Eigenschaften und Klassendesign

Meine Frage ist, wie ich Daten aus der Ansicht weitergeben soll, die die benutzerdefinierte ViewController-Erstellung in diesem benutzerdefinierten ViewController verarbeitet.

Ich habe über vier mögliche Optionen nachgedacht, und ich hatte gehofft, Feedback zu bekommen, warum jeder für diese Funktionalität gut ist oder nicht.

1) Zeigen Sie öffentliche Eigenschaften im benutzerdefinierten ViewController an und legen Sie die UI-Elemente in der Ansicht basierend auf diesen Eigenschaften in - (void) ViewDidLoad fest.

2) Zeigen Sie die eigentlichen UI-Elemente selbst an und legen Sie ihre .text/.image/.whatever-Attribute fest, während der ViewController erstellt wird.

3) Erstellen Sie einen benutzerdefinierten Konstruktor für die benutzerdefinierte Ansicht und geben in den Werten I die UI-Elemente

4) Erstellen Sie ein benutzerdefiniertes Modell einrichten müssen, dass beide Ansichten Zugriff haben, stellen Sie die Daten vor dem Custom erstellt/gedrängt wird und auf diese Daten im ViewDidLoad-Ereignis zugreift.

Ich bin immer noch neu in all dem, und ich möchte sicherstellen, dass ich die richtige Handhabung dieser Übergaben von Daten verstehe. Es scheint so etwas wie eine einfache Antwort zu sein, aber ich bin immer noch ein wenig verwirrt und es ist wahrscheinlich sehr wichtig dieses richtig zu machen um Gedächtnisverlust zu vermeiden.

Auch wenn jemand interessiert, ich benutze Stanfords CS193p-Klasse auf iTunes U und Mark/Lamarche "Beginn iPhone Entwicklung", um mich selbst Kakao für das iPhone zu lehren. Ich arbeite an einer Anwendung mit einem NavigationController und einigen ViewControllern (Präsenz 1, wenn Sie mit 193p vertraut sind).

Antwort

1

Nun, ich glaube, es gibt Vorteile & Nachteile für jede dieser Methoden abhängig von Ihren Anforderungen ... oft wird es einige Kombination von Ansätzen erfordern. Ich glaube, das Üblichste ist für mich, etwas wie das zu tun, wo du es genug gibst, um loszulegen.

MyViewController *vc = [[MyViewController alloc] init]; // (or initWithNibName:bundle:) 
// transfer vc values here 
vc.value1 = aValue; 
vc.value2 = anotherValue; 
[self.navigationController pushViewController:vc animated:YES]; 
[vc release]; 

Nachdem Ihr View-Controller instanziiert wurde, haben Sie die Möglichkeit, Objekte an ihn zu übergeben. Sagen Sie MyViewController ist eine Detailansicht, dann würden Sie ihr das Objekt geben, für das die Details angezeigt werden sollen. Oder, wenn es sich um eine Tabellenansicht handelt, können Sie ihr das NSArray geben, das für die Anzeige benötigt wird. Dann in viewDidLoad oder watchFromNib oder watchFromCoder, oder ... können Sie die Ansicht ausfüllen ... sozusagen.

1

# 1 ist in Ordnung, mit oder ohne # 3 (diese beiden nicht gegenseitig ausschließen)

# 4 meine bevorzugte Lösung ist. Zum Beispiel, wenn ich eine UserViewController hätte, würde ich wahrscheinlich auch wie ein User-Objekt haben und es auf diese Weise zu erstellen:

User *user = [self.users objectAtIndex:someIndex]; 
UserViewController *uvc = [[[UserViewController alloc] initWithUser:user] autorelease]; 

# 2 keine gute Idee ist. Objekte sollten nicht auf die UI-Elemente anderer Objekte zugreifen. Daraus ergibt sich viel Ärger, wenn Sie sich entscheiden, Ihre Benutzeroberfläche zu ändern (und Sie werden es tun).

Verwandte Themen