Frage

Ich bin ziemlich neu für iPhone Entwicklung, aber ich bin in der Nähe meine erste App auf die Freigabe (bezogen auf eine Website, die ich laufen). Die App erfordert eine sehr große Datenbank und als solche habe ich nur vor Ort die am häufigsten verwendeten Daten speichern entschieden, die anderen Daten über einen JSON Webservice-Aufruf Abrufen aus der Datenbank meiner Website nicht sichtbar.

Während der Durchführung OK mit dem Simulator sucht (die Live-DB Schlagen) auf dem Web-Service-Aufruf verlassen haben, die länger als ich gehofft hätte, sie würden, wenn am Telefon läuft. Diese Anrufe sehen viel schlimmer, wenn auf die nativen Suche verglichen, die momentane sind. Um die relative Differenz reduzierst ich in einer gefälschten interstitielle (Seite mit Aktivitätsindikatoren) für den nativen sucht (die Web-Service-Suche nutzt bereits eine), aber ich habe mit einem Problem mit dem Timing der Navigation-Controller setzen wollte drückt, wenn in Kombination mit Schlaf (n).

Wie auch immer, ist die Suche Abschnitt meiner App ein NavController wihin eine tabController Registerkarte. Beim Versuch, Code wie folgt zu verwenden:

[[tabBarController.viewControllers objectAtIndex:0] pushViewController:(UIViewController *)waitingController animated:YES];
sleep(2);

Ich finde, dass der Push wartet immer für den Schlaf vor der Ausführung zu beenden, wenn der Effekt I will für die Viewcontroller geschoben werden und dann zwei Sekunden lang die App zu warten, bevor Sie fortfahren den Suchvorgang zu simulieren.

Ich habe einige andere seltsame Ergebnisse hatte mit NavController schiebt, bei einigen Gelegenheiten die ich erlebt habe, was ein Maischen aus zwei separaten Viewcontrollers zu sein scheint, als die, die ich als interstitielle geschoben habe nur an Ort und Stelle Inhalt weise bleibt der Titel der, die ich in seinen Platz geschoben wollen bleiben.

Ich bin sicher, dass es ein grundlegender Mangel an Verständnis für meinen Teil ist schuld so für ein bisschen Anleitung hier ich hoffe.

Cheers,

Alan.

War es hilfreich?

Lösung

sleep(float) blockiert die Haupt-Thread verursacht die UI einfrieren. Sie sollten stattdessen eine Aktion planen später -[NSObject performSelector:withObject:afterDelay:]

Beispiel:

[label performSelector:@selector(setText:) withObject:@"Delayed Hello World!" afterDelay:2.0f];

Andere Tipps

Ich würde aussehen Ihre Architektur an wechselnden und nicht auf dem Haupt-Thread schlafen - keine große Benutzererfahrung

Schauen Sie in NSOperation mit Ihren Interaktionen mit dem Web-Service zu steuern -. Dies ermöglicht es Ihnen, Operationen anstehen und haben sie in einer bestimmten Reihenfolge oder parallel ausgeführt

NSOperation ist eine sehr einfache Art und Weise robust Threading-Operationen zur Verfügung zu stellen -. Und man konnte einen Rückruf an den Haupt-Thread mit allen Updates, die Sie auf dem Weg zu tun, machen wollen wählen

Ich denke, dass diese Architektur wird Ihnen helfen, die Benutzeroberfläche viel besser zu machen - aber sobald Sie Ihr Denken neu konfiguriert haben, Operationen zu verwenden, werden Sie viele weitere Vorteile finden.

NB: Es hat mich ein paar Mal wirklich mit NSOperation und NSOperationQueue in den Griff zu bekommen - aber die Zeit, die ich investiert war es definitiv wert

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top