2013-03-08 19 views
6

Mam aplikację, która wymaga Internetu do synchronizacji usługi internetowej z lokalną bazą danych db. Następnie pobieranie lokalne db jest używane do zapełniania różnych obiektów dla MapView i TableView w kontrolce tabbarcontroller. Im patrząc na te 2 scenariusze:Jaki jest najbardziej efektywny przepływ pracy dla tej aplikacji na iOS?

AppFlowLogic

Główną zaletą „A” jest to, że nie mam do wstępnego ładowania aplikacji z bazą danych, choć jej małą db (około 100 rekordów). Problem polega na tym, że robi się zawikłany. Jeśli nie ma połączenia z Internetem, w MapView użytkownik widzi mapę, ale przycisk refreshButton jest wyłączony. To nie jest problem. Ale użytkownik nadal może przejść do widoku table, a zobaczy on pustą tabelę.

Główną zaletą "B" jest to, że przy wstępnie załadowanej db, aplikacja zawsze będzie miała źródło danych gotowe do drukowania i wystawiania. Naprawdę nie wiem jak wstępnie załadować aplikację z db.

Chciałbym wybrać pierwszą trasę, "A". Moje główne pytanie brzmi: od teraz wyłączam refreshButton na MapView, tak że działa on tylko wtedy, gdy dane są pobierane z sieci ... To sortedArray jest puste po uruchomieniu. Więc jeśli użytkownik przejdzie do TableVC, będzie on pusty. W tej wersji użytkownik musi najpierw nacisnąć przycisk odświeżania przed przejściem do widoku stołu.

Jaki jest najskuteczniejszy sposób radzenia sobie z tym?

+0

+1 miłe wyjaśnienie. – Dilip

+0

Futerały na krawędzie są tak trudne do nakręcenia, ale są tak ważne dla wygody użytkownika. Myślę, że "A" to najlepsza opcja (moja opinia). Możesz zablokować korzystanie z całej aplikacji z "Musisz pobrać dane, uzyskać połączenie internetowe", jeśli nie masz danych początkowych + brak połączenia. Możesz napisać kod do obsługi scenariusza "brak danych" na każdym ekranie, na który użytkownik może się dostać, gdy nie ma danych. Większość tabel zawiera przypadek "brak danych", który dodaje wiersz informujący użytkownika. Najlepsza odpowiedź zależy od przypadków użycia i wymagań i zwykle jest stronnicza według osobistych preferencji. – DBD

+0

Dziękuję Dilipowi, naprawdę żałuję, że nie ma modułu xcode do obsługi logiki, aby pokazać, co to jest zgodnie z kodem, ponieważ jestem bardzo wizualny. DBD, chociaż powinienem nauczyć się kodować dla scenariuszy pierwszego uruchomienia i takie, myślę, że użytkownik powinien mieć wymagane połączenie internetowe. Nie jestem pewien co do zablokowania całej aplikacji, ale przynajmniej scenariusza "brak danych". Chociaż jest to w zasadzie to samo, co blokowanie całej aplikacji, ponieważ nie widzą niczego poza powłoką. Z drugiej strony, w kategoriach UX, lepiej jest pozwolić im coś zobaczyć. Więc jestem zakłopotany :(Myślę, że muszę iść na trudną trasę – marciokoko

Odpowiedz

2

Jeśli 100 rekordów jest wystarczająco statycznych, aby można było wysyłać domyślny zestaw rekordów z aplikacją, byłoby to najlepsze rozwiązanie. Użytkownik, z lub bez internetu, otrzymuje zapełniony widok tabeli.

Wysyłaj swoje zapisy jako plik plist w pakiecie aplikacji. Przy pierwszym uruchomieniu otwórz plik plist i dodaj każdy wpis jako nowy obiekt do danych podstawowych. Ten rodzaj "siewu" dzieje się bardzo szybko. Po prostu utwórz kolekcję (tablicę, słownik) dla plist, a następnie wyliczyć ją, odwzorowując ją na atrybuty managedObject.

Jest kod, który pokazuje, jak to zrobić w wideo iCloud i Core Data WWDC 2012 (po prostu zignoruj ​​część iCloud).

Następnie, jeśli istnieje połączenie po zaszczepieniu, można zsynchronizować dane, które aktualizowałyby/zastępowały/etc wstępnie wypełnione dane.

+0

Ok dzięki za Zapisy są w zasadzie lokalizacjami sklepów, a nowy rekord jest dodawany co miesiąc itd. – marciokoko

+0

Więc nie mogę wysłać go z wcześniej załadowaną bazą danych Core Data? – marciokoko

+0

Nie. Dane podstawowe dodają do bazy danych sqlite mnóstwo tabel i relacji oraz wszelkiego rodzaju specjalnych rzeczy, które można wykonać tylko wtedy, gdy faktycznie przechodzisz przez podstawowe dane, aby zrobić to w swojej aplikacji. Uważaj na posty na blogu, które pokazują inaczej! Ale nie martw się, siew nie jest tak zły, jak myślisz. –