2013-03-08 4 views
6

Ich habe eine App, die Internet benötigt, um einen Webservice mit einer lokalen Core-Datenbank zu synchronisieren. Dann wird ein lokaler DB-Abruf verwendet, um verschiedene Objekte für ein MapView und ein TableView in einem Tabbar-Controller zu füllen. Im Blick auf diese zwei Szenarien:Was ist der effektivste Workflow für diese iOS App?

AppFlowLogic

Der Hauptvorteil von „A“ ist, dass ich zu nicht die App mit einer Datenbank vorzuladen, obwohl seine eine kleine db (ca. 100 Einträge). Das Problem ist, dass es sich verschlingt. Wenn in MapView keine Internetverbindung besteht, sieht der Benutzer eine Map, aber der refreshButton ist deaktiviert. Das ist also kein Problem. Aber der Benutzer kann immer noch zur Tabellenansicht gehen und er wird einen leeren Tisch sehen.

Der Hauptvorteil von "B" ist, dass die App mit einer vorinstallierten db immer eine Datenquelle zum Plotten und Auflisten bereithält. Ich weiß nicht wirklich, wie man die App mit einem DB vorlädt.

Ich möchte irgendwie die erste Route, "A" gehen. Meine Hauptfrage ist, da ich gerade den refreshButton in MapView deaktiviert habe, so dass es nur funktioniert, sobald die Daten aus dem Web stammen ... dass sortedArray beim Start leer ist. Wenn der Benutzer zum TableVC geht, ist es leer. So wie es steht, muss der Benutzer zuerst auf die Aktualisierungsschaltfläche tippen, bevor er zur Tabellenansicht geht.

Was ist der effektivste Weg, damit umzugehen?

+0

+1 nette Erklärung. – Dilip

+0

Edge Fälle, sie sind so schwer zu programmieren, aber sie sind so wichtig für die Benutzererfahrung. Ich denke "A" ist deine beste Wahl (meine Meinung). Sie können die Verwendung der gesamten App mit einem "Sie müssen die Daten herunterladen, erhalten eine Internetverbindung" blockieren, wenn Sie keine anfänglichen Daten + keine Verbindung haben. Sie könnten Code schreiben, um das "no data" -Szenario auf jedem Bildschirm zu behandeln, zu dem der Benutzer gelangen kann, wenn er keine Daten hat. Die meisten Tabellen enthalten einen Fall "keine Daten", der eine Zeile hinzufügt, die den Benutzer informiert. Die beste Antwort hängt von Ihren Anwendungsfällen und Anforderungen ab und ist in der Regel von persönlichen Präferenzen abhängig. – DBD

+0

Danke Dilip, ich wünschte wirklich, es gäbe ein xcode-Modul, um Logik zu handhaben, um Ihnen zu zeigen, was es gemäß Ihrem Code ist, weil ich sehr visuell bin. DBD, obwohl ich lernen sollte, wie man für erste Startszenarien und so Code programmiert, denke ich, dass der Benutzer eine Internetverbindung benötigt. Ich bin nicht so sicher über das Blockieren der gesamten App, aber zumindest "keine Daten" -Szenario. Das ist im Wesentlichen das Gleiche wie das Blockieren der gesamten App, weil sie nichts anderes als die Shell sehen. Andererseits ist es in UX-Form besser, sie etwas sehen zu lassen. Also ich bin ratlos :(Ich denke, ich muss die harte Route gehen – marciokoko

Antwort

2

Wenn die 100 Datensätze statisch genug sind, dass Sie einen Standardsatz von Datensätzen mit der App versenden können, wäre das die beste Lösung. Der Benutzer mit oder ohne Internet erhält eine gefüllte Tabellenansicht.

Senden Sie Ihre Datensätze als Plist im Paket Ihrer App. Öffnen Sie beim ersten Start das Plist und fügen Sie jeden Eintrag als neues Objekt in die Stammdaten ein. Diese Art von "Seeding" passiert sehr schnell. Erstellen Sie einfach eine Auflistung (Array, Dictionary) für den Plist, und führen Sie dann eine Enumeration durch, und weisen Sie sie den Attributen Ihres managedObjects zu.

Es gibt Code, der Ihnen zeigt, wie Sie dies in der WWDC 2012 Video iCloud und Core Data tun (ignorieren Sie einfach den iCloud-Teil).

Dann, wenn es eine Verbindung nach dem Seeding gibt, können Sie Daten synchronisieren, die/etc die vorbelegten Daten aktualisieren/ersetzen würden.

+0

Ok danke für die Vorgeladene Daten Die Datensätze sind im Grunde Geschäftsstandorte Ein neuer Datensatz wird ca. jeden Monat hinzugefügt – marciokoko

+0

Also kann ich es nicht mit einer vorgeladenen Core Data db liefern? – marciokoko

+0

Nr. Core-Daten fügt eine Menge von Tabellen und Beziehungen und alle Arten von besonderen Dingen in die SQLite-Datenbank, die nur durchgeführt werden können, wenn Sie tatsächlich Core-Daten durchlaufen, um es in Ihrer App zu tun. Sei vorsichtig mit Blogposts, die dir sonst etwas zeigen! Aber keine Sorge, die Aussaat ist nicht annähernd so schlimm, wie Sie vielleicht denken. –

Verwandte Themen