2017-02-17 2 views
1

ich eine Liste der Nachrichten zu zeigen versuche, von Firebase erhielt die Clean Architektur für Swift mit hier beschrieben:ungültig Firebase Daten mit SWIFT Sauber Architektur Handhabung

http://clean-swift.com/clean-swift-ios-architecture/

Mein Zweifel ist, wie wenn ein Datum zu handhaben ist im Firebase ungültig. Derzeit stürzt die App ab, da der für UITableView bereitgestellte Index nicht korrekt ist.

Ich verwende eine SWIFT-Version des FUArray class (genannt als FireBaseQueryDataSource), die den Index korrekt für die Feuerbasis Knoten liefert, als

private func insertSnapshot(snapshot: FIRDataSnapshot, previousChildKey: String?) { 
    var index = 0 
    if let previousChildKey = previousChildKey { 
     index = self.index(key: previousChildKey) + 1 
    } 

    self.snapshots.insert(snapshot, at: index) 
    self.delegate?.dataSourceDidAddObjectAtIndex(dataSource: self, snapshot: snapshot, index: index) 
} 

folgt also diese Indizes auf die UITableView propagiert werden, wie es geschätzt werden kann aus der folgenden Spur:

ChatMessagesViewController.displayMessage (Ansichtsmodell: ChatMessageViewModel) ->() (ChatMessagesViewController.swift: 83)

ChatMessagesPresenter.presentChatMessage (response: ObserveChatMessagesResponse) ->() (ChatMessagesPresenter.swift: 36)

ChatMessagesInteractor.chatMessagesWorkerDidAddObjectAtIndex (Arbeiter: ChatMessagesWorker, message: FireBaseChatMessage, index: int) ->() (ChatMessagesInteractor.swift: 66)

ChatMessagesWorker.dataSourceDidAddObjectAtIndex (Datenquelle: FireBaseQueryDataSource, Snapshot: FIRDataSnapshot, index: int) ->() (ChatMessagesWorker.swift: 131)

FireBaseQueryDataSource.insertSnapshot (snapshot: FIRDataSnapshot, previousChildKey: String) -? >() (FireBaseQueryDataSource.swift: 99)

FireBaseQueryDataSource (observeQuery() ->()) (Schließung # 1) (FireBaseQueryDataSource.swift: 69)..

Wenn FIRDataSnapshot zu FireBaseChatMessage in der Worker-Klasse analysiert wird, die ungültigen Daten werden so erkannt es wird nicht mehr propagiert.

Die Sache ist, dass folgende Objekte mit falschen Indizes sind, so UITableView assertionhandler eine Ausnahme auslöst.

Ich bin mir nicht sicher, wo und wie ich mit den Indizes umgehen soll. Interactor/Worker-Klasse hat keinen Verweis auf die Liste der Knoten, so dass ich dort keinen neuen Index bekommen kann.

In der FireBaseQueryDataSource-Klasse kann ich keine Logik für diese Funktionalität verwenden, da sie mit jeder Art von Daten umgehen kann.

Presenter- oder ViewController-Klassen sollten keine Logik verarbeiten. ChatMessageViewModel sollte bereits die richtigen Indizes haben, wenn sie an diesem Punkt eintreffen.

Jede Hilfe wäre willkommen.

Antwort

0

Was ist mit der Weitergabe des ungültigen Fehlers am angegebenen Index? Auf diese Weise können Sie es im Ansichtsteil löschen, und die Indizes bleiben kohärent.

+1

Vielen Dank Mijail, ich denke, es ist eine mögliche Lösung. Es wäre durchaus möglich, dass wir uns auf der Ansichtsebene dazu entschließen, die eine oder andere Daten zu zeigen. Aber ich habe den Zweifel, dass es nicht wirklich Business-Logik auf der View-Ebene wäre, die wahrscheinlich nicht passieren sollte. Ich denke, das hängt davon ab, wie Geschäftslogik definiert ist. Wie auch immer, schließlich entschied ich mich, den Fehler zu ignorieren, ungültige Daten nicht zu propagieren, gegebene Nachricht in Worker zu verwerfen und Indizes auf Ansichtsebene basierend auf Zeitstempelwerten neu zu zählen, anstatt sich auf die von Firebase empfangenen Indizes zu verlassen. Ich akzeptiere deine Lösung noch. Vielen Dank – Yunnyyy