2016-07-11 6 views
0

Dies ist das Szenario.Ich arbeite an einer App, wo es 3 View-Controller (sagen "child1", "child2", "child3") jeweils mit einer CollectionView darauf Nun haben alle die gleiche Funktionalität. Der einzige Unterschied ist, dass die Daten von 3 verschiedenen APIs kommen. Jetzt habe ich einen übergeordneten View-Controller erstellt (sagen wir "ParentVC") und alle drei ViewController erben "ParentVC".Freigabe von UICollectionView-Daten von 3 View-Controllern mit MVC iOS

Nun angenommen, ich komme auf "child1", API-Hits und CollectionView wird neu geladen. Jetzt drücke ich "child2", API-Hits und CollectionView wird neu geladen. Ähnliches ist bei "child3" der Fall.

Jetzt, wenn ich "child3" pop, sollte die API auf "child2" nicht erneut schlagen. Ähnlich wird der Fall sein, wenn ich "child2" pop.

Jetzt habe ich es geschafft, aber hier ist das Problem.

PROBLEM:

Ich versuche, MVC-Muster zu verwenden, und ich habe eine separate Datenmodellklasse, die die Daten von API.Now nimmt, wie ich MVC in diesem Szenario verwenden kann, wie das Datenmodell sein muss jedes Mal aktualisiert, wenn ich zwischen View-Controllern umschalte, und daher muss der Reload-Vorgang durchgeführt werden?

+0

Post einige Code, was Sie vorher versucht haben? dies wird helfen, Ihre Situation und Problem zu verstehen. –

Antwort

0

Sie haben zwei Möglichkeiten, Ihr Problem

1- Versuchen zu lösen Ihre API in viewWillAppear statt viewDidLoad zu nennen.

2- Wenn Sie MVC verwenden, dann müssen Sie auch zwei zusätzliche Methoden in Modellklassen encodeWithCoder und initWithCoder und nach dem Aufstehen Antwort von API Ihr Modell speichern Array oder Dictionary genannt implementieren Objekte in NSUserDefaults unter Code

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:object]; [prefs setObject:myEncodedObject forKey:key]; [[NSUserDefaults standardUserDefaults] synchronize];

und erhalten Sie das gespeicherte Objekt unter Code zu zeigen.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSData *myEncodedObject = [prefs objectForKey:key ]; id obj = [NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];

+0

Ich habe nur eine einzige Modellklasse. – Reckoner

+0

Dann sollten Sie verschiedene Objekte dieses Modells für jede API-Daten nehmen müssen. Und legen Sie die oben genannten Methoden zum Kodieren und Dekodieren in Ihrer Modellklasse fest. –

+0

Das ist was ich tue.Aber ich möchte nicht die API jedes Mal, wenn ich einen View-Controller besuchen – Reckoner