Ich habe folgendes Setup für eine kleine Apollo iOS app, wo ich eine Liste von Konferenzen in einer Tabellenansicht angezeigt werden und wollen in der Lage sein, eine Konferenz zur Liste hinzufügen :Automatische Aktualisierungen der Benutzeroberfläche mit Apollo in Swift nicht funktioniert
GraphQL:
query AllConferences {
allConferences {
...ConferenceDetails
}
}
mutation CreateConference($name: String!, $city: String!, $year: String!) {
createConference(name: $name, city: $city, year: $year) {
...ConferenceDetails
}
}
fragment ConferenceDetails on Conference {
id
name
city
year
attendees {
...AttendeeDetails
}
}
fragment AttendeeDetails on Attendee {
id
name
conferences {
id
}
}
ConferencesTableViewController:
AddConferenceViewController:
class AddConferenceViewController: UIViewController {
// ... IBOutlets
@IBAction func saveButtonPressed() {
let name = nameTextField.text!
let city = cityTextField.text!
let year = yearTextField.text!
apollo.perform(mutation: CreateConferenceMutation(name: name, city: city, year: year)) { result, error in
if let _ = result?.data?.createConference {
self.presentingViewController?.dismiss(animated: true)
}
}
}
}
ich implementiert auch cacheKeyForObject
in AppDelegate wie so:
apollo.cacheKeyForObject = { $0["id"] }
Meine Frage ist, ob es möglich ist, von der automatischen Aktualisierungen der Benutzeroberfläche mit diesem Setup profitieren ? Derzeit, wenn die CreateConferenceMutation
ausgeführt wird, wird die Tabellenansicht nicht aktualisiert. Bin ich etwas fehlt oder bin ich schlagen die Einschränkung, dass in der docs erwähnt wird:
In einigen Fällen nur
cacheKeyFromObject
verwendet, ist nicht genug, um für Ihre Anwendung UI korrekt zu aktualisieren. Wenn Sie z. B. einer Liste von Objekten etwas hinzufügen möchten, ohne die gesamte Liste erneut abzurufen, oder wenn einige Objekte vorhanden sind, denen Sie keine Objekt-ID zuweisen können, kann Apollo vorhandene Abfragen nicht automatisch für Sie aktualisieren.