iphone - guidelines - xcode tab bar icons




iPhone: Übergeben von Daten zwischen mehreren Viewcontrollern in einer Tabbar-App (2)

Ich habe folgendes Problem:

Ich habe eine Tabbar-Anwendung mit 4 Tabs erstellt. Ich möchte ein Objekt / eine Variable vom ersten Tab-Controller an den dritten übergeben und diesen Controller mit dem entsprechenden Objekt initialisieren.

Ich habe schon etwas recherchiert. Der beste Weg, der einem reinen Modellansatz entspricht, wäre, eine initWithObject: -Methode auf dem aufgerufenen Viewcontroller aufzurufen. Wie kann ich das erreichen? Wie kann ich die init Methode des Receivercontrollers im Callercontroller aufrufen? Können Sie mir ein Codebeispiel geben?

Bearbeiten: Um Daten zwischen mehreren Ansichten / Klassen usw. zu übergeben, erstellen Sie einfach eine Art von Datenklasse, die die Daten zwischen mehreren Klassen enthält. Für weitere Informationen folgen Sie dem Link: Singleton


Ich denke nicht, dass dies die beste Vorgehensweise ist (überprüfe auch die Syntax), aber ich bin damit durchgekommen:

in der .h

otherclassref *otherclassname

@property (assign) otherclassname otherclassref;

und in der .m

@synthesize otherclassref;

dann ordne ich den Verweis einfach von irgendwo her, zB dem App-Delegierten oder wo auch immer du deine Viewcontroller installierst.

Dann kann der View-Controller einen Verweis auf den anderen View-Controller erhalten.

Ich füge @class secondviewcontroller der .h-Datei für den firstviewcontroller hinzu und setze die #imports "secondviewcontroller.h" in die .m-Datei des ersten View-Controllers. Diese werden als Vorwärtsreferenzen bezeichnet und verhindern Compilerfehler, die daraus resultieren, dass sich .h-Dateien gegenseitig referenzieren.


Sie benötigen ein Datenmodellobjekt, das die Daten für die Anwendung speichert.

Ein Datenmodell ist ein benutzerdefiniertes, eigenständiges Objekt, auf das von überall in der Anwendung zugegriffen werden kann. Das Datenmodellobjekt kennt keine Ansichten oder View-Controller. Es speichert nur Daten und die logischen Beziehungen zwischen diesen Daten.

Wenn verschiedene Teile der App Daten schreiben oder lesen müssen, schreiben und lesen sie in das Datenmodell. In Ihrem Fall würde view1 seine Daten beim Entladen im Datenmodell speichern und dann würde view2 diese Daten beim Laden des Datenmodells lesen (oder umgekehrt).

In einer ordnungsgemäß entwickelten App sollten keine zwei View-Controller Zugriff auf die internen Daten eines anderen Controllers haben. (Der einzige Grund, warum ein View-Controller von der Existenz eines anderen Controllers wissen muss, ist, ob er das Laden dieses anderen Controllers auslösen muss.)

Die schnellste und schmutzigste Methode zum Erstellen eines Datenmodells besteht darin, dem Anwendungsdelegaten Attribute hinzuzufügen und anschließend den Anwendungsdelegaten von den Ansichtscontrollern aus aufzurufen:

YourAppDelegateClass *appDelegate = [[UIApplication sharedApplication] delegate];
myLocalProperty = appDelegate.someDataModelProperty;

Dies funktioniert bei kleinen Projekten. Wenn Ihre Daten jedoch komplex werden, sollten Sie eine dedizierte Klasse für Ihr Datenmodell erstellen.

Bearbeiten:

Um den spezifischen Fall zu verdeutlichen, würden Sie den Aufruf zum Datenmodell hinzufügen, wenn der Empfänger viewController aktiv wird.

Das Platzieren der Daten in einer init-Methode oder einer viewDidLoad nicht, da die Benutzer in einer UITabBar hin und her wechseln können, ohne die Ansicht zu entladen oder den Ansichtscontroller neu zu UITabBar .

Der beste Ort, um sich ändernde Daten abzurufen, ist die viewWillAppear Controller-Methode. Auf diese Weise werden die Daten jedes Mal aktualisiert, wenn der Benutzer zu dieser Registerkarte wechselt.





uitabbarcontroller