これは、 Eurekaと呼ばれる Swift オープン ソース プロジェクトに関連する質問です。ここでタグを監視しているため、SO にこの質問を投稿しています。
viewDidLoad
では、View Controller のメソッドでフォームを作成します。同時に、API への http 呼び出しを行い、データ (ジョブ) のリストを取得します。この呼び出しは非同期です。これらのジョブをオプション値として に表示したいと考えていますPushRow
。
この API 呼び出しは非同期であるため、このデータが受信されるまでに、フォームは既にセットアップされています。http 呼び出しからのジョブのリストを設定するクラス レベルの配列のセットアップがあります。その同じ配列がその行のoptions
プロパティに割り当てられます。データを受け取ったら、値を配列に割り当てます。しかし、次に行って をタップするとPushRow
、空です。
class CreateEventViewController: FormViewController {
private var jobs = [Job]()
override func viewDidLoad() {
super.viewDidLoad()
setupForm()
api.getJobs(.LeadCreated) { jobs, error in
if let error = error {
print(error.localizedDescription)
return
}
if let jobs = jobs {
self.jobs = jobs
}
}
}
private func setupForm() {
form
+++ Section()
<<< PushRow<String>("Jobs") {
$0.title = "Choose Job"
$0.options = jobs.map { $0.description }
$0.selectorTitle = "Choose..."
}.onPresent { from, to in
to.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Done, target: from, action: #selector(CreateEventViewController.multipleSelectorDone(_:)))
}
}
}
特定の行またはフォーム全体のデータを更新または再読み込みする方法はありますか?
更新 1
以下のケビンの回答に従って、コードを次のように変更しました。
override func viewDidLoad() {
super.viewDidLoad()
api.getJobs(.LeadCreated) { jobs, error in
if let error = error {
print(error.localizedDescription)
return
}
if let jobs = jobs {
self.jobs = jobs
if let jobsRow = self.form.rowByTag("Jobs") {
jobsRow.updateCell()
}
}
}
setupForm()
}
しかし、何らかの理由で、まだ機能していません。オプションは空です。タグを介してセルが正しく取得されていることを確認しました。とにかくこれに失敗したので、私も試しtableView.reloadData()
てみましたが、役に立ちませんでした。