こんにちは。
閲覧いただきありがとうございます。
表題の通り、UITableViewの非同期更新処理についてつまずいています。
具体的には、
・UITableViewと同じ階層にUITextField,UIButtonを設置
・UITextFieldにコメントを入力し、UIButtonをタップすると入力した内容がWebAPIにPOSTされ、DBが更新される
・これまで入力された内容がUITableViewCellに表示される
といったものです。
DBの更新までは実装できたものの、1度画面を切り替えないとPOSTされた内容が表示されず悩んでいます。
API実行のNotification内でTableView.reloadData()を実行してみたものの上手く行きませんでした。
どなたか対処法をご存知のかた、ご教授いただけますと助かります。
よろしくお願いします。
【追記】
APIはCakePHPで用意しており、URLを指定してAlamofireでPOSTしています。
Cake側ではPOSTされたコメント内容をDBに格納しています。
APIを実行完了したタイミングでNotificationで通知を出し、そのタイミングでTableView.reloadData()を実行してもテーブルを再描画することができませんでした。
【再追記】
Notification付近のコードは以下のとおりです。
(エラーハンドリング周りは参考書からそのまま引っ張ってきています…)
上記のUIButtonをタップした際に呼び出しているメソッドになります。
sendData()メソッドでAPIを叩いてDBに保存する形になります。
DBの値はviewWillAppear()内で最初にAPIを通して取得しています。
TableView.reloadData()メソッドの使い方を勘違いしていて、
この実装では新しくDBの値を取得できていない、ということでしょうか…?
お手数おかけして恐縮ですが、よろしくお願いします。
swift
1func onClickSendButton(sender: UIButton) { 2 3 var qc = PostCommentQueryCondition() // POSTする際のパラメータ 4 var comment: String = self.editField.text 5 6 qc.comment = comment 7 8 postCommentAPI = PostCommentAPI(condition: qc) 9 postCommentAPI.sendData() 10 11 postCommentObserver = NSNotificationCenter.defaultCenter().addObserverForName( 12 postCommentAPI.PostCommentAPISendCompleteNotification, 13 object: nil, 14 queue: nil, 15 usingBlock: { 16 (notification) in 17 18 self.editField.text = "" 19 self.myTableView.reloadData() 20 self.hideKeyBoard() 21 22 // エラーがあればダイアログを開く 23 if notification.userInfo != nil { 24 if let userInfo = notification.userInfo as? [String: String!] { 25 if userInfo["error"] != nil { 26 let alertView = UIAlertController( 27 title: "通信エラー", 28 message: "通信エラーが発生しました", 29 preferredStyle: .Alert) 30 alertView.addAction( 31 UIAlertAction(title: "OK", style: .Default) { 32 action in return 33 } 34 ) 35 self.presentViewController(alertView, animated: true, completion: nil) 36 } 37 } 38 } 39 40 }) 41 42 43 }
回答2件
あなたの回答
tips
プレビュー