5

Vor etwa einem Monat hatten meine Frau und ich eine gute Idee für eine iPhone App, also dachte ich darüber nach, wie die App von einem Nutzer funktionieren würde Perspektive und vor etwa einer Woche öffnete ich XCode zum ersten Mal und begann mich zu entwickeln.Fragen zur iPhone App Struktur - Kerndaten, Ansichten, Modal Views etc.

Bevor ich mich zu sehr mit dem Schreiben der App beschäftige, möchte ich sicherstellen, dass ich einige Schlüsselkonzepte im Kopf habe, die speziell mit der Architektur zu tun haben.

FYI, als Prinzip möchte ich versuchen, so viel meiner App programmgesteuert (speziell die UI) zu erstellen, so dass ich ein gründliches Verständnis davon habe, was vor sich geht. Später könnte ich IB als Werkzeug verwenden, um die UI-Entwicklung zu beschleunigen (gilt im Moment, weil ich TableViews anstelle von statischen Ansichten verwende).

View-Controller

  • So UINavigationControllers ist in der Regel nicht Unter eingestuft und wird als Eigentum im AppDelegate und ist die wichtigste 'Unteransicht' der MainWindow.xib erstellt.

  • Der UINavigationController steuert einen Stapel von Ansichten und wird normalerweise mit einem Stammansicht-Controller gestartet.

  • Der Navigationscontroller wird im Allgemeinen innerhalb des aktuellen/TopView-Controllers als [self navigationcontroller] referenziert und gemeldet, was eine schreibgeschützte Eigenschaft der übergeordneten UIViewController-Klasse ist.

Core Data

  • der verwaltete Objekt Kontext ist der Hauptsteuerpunkt für die Daten im Modell zugreifen, aber es im allgemeinen verwendet wird, nicht direkt und stattdessen Abrufanforderungen werden verwendet Arrays zurück, setzen oder Wörterbücher von Datenobjekten, die dann von den View-Controllern zum Präsentieren und Manipulieren von Daten verwendet werden.

  • Der Kontext wird als Eigenschaft im Anwendungsdelegaten erstellt und dann beim Start an den Stammansichtscontroller übergeben, der ihn an nachfolgende Ansichten im Stapel weiterleitet, bevor der Navigationscontroller angewiesen wird, die Ansicht zu ändern (z. B. wenn eine Zelle angezapft wird).

So ist es mir eine Woche genommen, hier zu bekommen, ich mein Modell erstellen, füllen Sie es mit Daten und auf einer Tabellenansicht angezeigt werden, aber ich habe nicht in der Lage gewesen, viel auf Modal Ansichten zu finden, wenn Sie möchten, um Daten zu bearbeiten, speziell um modale Ansichten zu entwerfen (wenn es einen Unterschied zu normalen Ansichten gibt)?

Auch ich bin mir nicht ganz sicher über die gesamte "Bindung" von Daten, um Objekte zu sehen, was es tut und wie es programmatisch zu tun?

Vielen Dank für Ihre Kommentare, Vorschläge im Voraus.

Antwort

2

Eine Ansicht wird modal, wenn sie mit presentModalViewController angezeigt wird: animiert. Sie können das zu bearbeitende Modell übergeben, bevor Sie die modale Ansicht präsentieren.

DetailViewController dvc = ...; 
dvc.model = model; 
dvc.delegate = self; // if you want to use a delegate pattern. 
[self presentModalViewController:dvc animated:YES]; 

Da das Modell, das Sie in den Modal-View-Controller bearbeiten möchten verfügbar ist, um die Werte in viewDidLoad einstellen. Auf der iOS-Plattform ist keine Datenbindung verfügbar, dh Sie müssen die Ansicht und Ihr Modell manuell aktualisieren.

Was Sie bei der Arbeit mit einer modalen Ansicht beachten müssen, ist, dass Sie eine Möglichkeit bereitstellen müssen, diese zu schließen. Z.B. indem Sie oben eine Navigationsleiste mit den Schaltflächen Abbrechen und Speichern haben. eine modale View-Controller Abweisung erfolgt mit:

[self dismissModalViewControllerAnimated:YES]; 

Es ist möglich, die modale Ansicht von innerhalb des Modal-View-Controller zu entlassen, aber das bedeutet auch, dass eine solche modal Controller in der Lage sein müssen, um das Modell in Frage zu speichern. Ich würde persönlich einen Rückruf zu dem präsentierenden Controller verwenden, der ihm mitteilen würde, ob er speichern oder abbrechen soll, sowie das Ablehnen der modalen Ansicht behandeln soll. Dies kann mithilfe eines Delegatenmusters erfolgen. Wenn der Benutzer auf Speichern klickt, können Sie das Modell aktualisieren und den Delegaten benachrichtigen.

- (IBAction)save:(id)sender { 
    self.model.someText = self.someTextField.text; 
    [self.delegate detailViewControllerDidSave:self]; 
} 

Und in dem Präsentator haben eine Methode wie:

-(void)detailViewControllerDidSave:(DetailViewController *)controller { 
    // save the model 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+0

Hallo Robert, Danke. Gibt es also etwas Besonderes an der detailViewController, so dass Felder, wenn sie modal angezeigt werden, editierbar sind? – Glynton

+0

Gern geschehen. Ich denke nicht, dass es einen automatischen Weg dafür gibt. Ein UIViewController verfügt über eine Bearbeitungseigenschaft, die verwendet werden kann, um einen bearbeitbaren Zustand über setEditing: animated: umzuschalten. Wenn Sie denselben DetailViewController zum Anzeigen und Bearbeiten verwenden möchten, können Sie [dvc setEditing: YES animated: NO] nach dem Aufruf von presentModalViewController: animated: aufrufen. Dann müssen Sie setEditing implementieren: animiert: in DetailViewController und aktualisieren Sie die entsprechenden Steuerelemente, wie self.someTextField.enabled = bearbeiten. –

+0

"Es ist keine Datenbindung für iOS verfügbar" - Nicht mehr zutreffend: https://www.youtube.com/watch?v=88DkI8ZfEkg - wird bis Ende des Jahres veröffentlicht (einige OS-Lizenz) – Michael

0

Einige Antworten, von meinem Wissen über Ansichten/Daten. Ich habe noch keine Erfahrung mit CoreData, also werde ich diesen Teil nicht beantworten.

  • Eine modale Ansicht ist nur eine normale Ansicht. Aber seine Größe kann ein wenig anders sein, da es einige UI-Elemente abdeckt, die nicht von einer in einem Navigationscontroller gedrückten Ansicht abgedeckt würden.

  • Für die Datenbindung an Ansichten haben Sie es bereits getan, wenn Sie eine Tabellenansicht füllen. Es gibt eine Reihe von "Datenquellen" -Methoden, die Sie in Ihrem Controller implementieren können, indem Sie Ihre Daten von Ihrem Modell an Ihre View (MVC-Muster) übergeben.

  • +0

    ... so Bindungen eher ein IB-Tool sind, wo Sie eine Reihe von Daten mit Einheiten eingestellt haben Objekte anzuzeigen? Die programmatische Entsprechung überschreibt das - (UITableViewCell *) tableView: (UITableView *) tableView – Glynton