を動作していません:自動UIの更新は私がテーブルビューに<em>会議</em>のリストを表示し、リストに<em>会議</em>を追加できるようにしたい小さなアポロiOSアプリのための次のセットアップを持っている
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:
class ConferencesTableViewController: UITableViewController {
var allConferencesWatcher: GraphQLQueryWatcher<AllConferencesQuery>?
var conferences: [ConferenceDetails] = [] {
didSet {
tableView.reloadData()
}
}
deinit {
allConferencesWatcher?.cancel()
}
override func viewDidLoad() {
super.viewDidLoad()
allConferencesWatcher = apollo.watch(query: AllConferencesQuery()) { result, error in
print("Updating conferences: ", result?.data?.allConferences)
guard let conferences = result?.data?.allConferences else {
return
}
self.conferences = conferences.map { $0.fragments.conferenceDetails }
}
}
// ...
// standard implementation of UITableViewDelegate
// ...
}
AddConferenceViewController:
apollo.cacheKeyForObject = { $0["id"] }
私の質問には、この設定で自動UIのアップデートの恩恵を受けることが可能であるかどうかです:
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)
}
}
}
}
そうは次のように私はまた、AppDelegateでcacheKeyForObject
を実装?現時点ではが実行されると、テーブルビューは更新されません。私が何かをしないのですか私はdocsに記載されている制限当たっています:アプリケーションのUIを正しく更新するためだけcacheKeyFromObject
を使用して、いくつかのケースでは
するだけでは十分ではありません。たとえば、リスト全体を再編集せずにオブジェクトのリストに何かを追加したい場合や、オブジェクト識別子を割り当てることができないオブジェクトがある場合、Apolloは自動的に既存のクエリを更新することはできません。