非同期通信の終了タイミングでテーブルをreloadDataしたい
MVVMでの実装方法について質問です。
ModelでAFNetWorkingを使用し、JSONを取得しています。
AFNetWorkingの非同期通信が終了したタイミングでViewのテーブルをreloadDataしたいのですが、MVVMの場合ModelからViewを操作することは無いと認識しています。
この場合のViewを更新する方法を教えていただきたいです。
// Model
[manager POST:testAPI
parameters:parameters
success:^(NSURLSessionDataTask *task, id responseObject)
{
// レスポンスをDBに登録
// TODO: DB登録後、Viewの更新処理を実行したい
} failure:^(NSURLSessionDataTask *task, NSError *error)
{
}];
<追記>
【delegate】
Viewでmodel.delegate = self としてもAFNetWorkingのブロックスが実行されるときにはnilとなってしまいます…
Modelのインスタンス作成でミスしているだけでした。
【blocks】
View→ViewModel→Modelの流れなので......
// View
[_viewModel sampleMethod1:^{
[self refresh];
}];
// ViewModel
- (void) sampleMethod1:(void (^) (void)) refreshView {
[_model sampleMethod2:^{
refreshView();
}];
// Model
- (void) sampleMethod2:(void (^) (void)) refreshView {
..........
[manager POST:testAPI
parameters:parameters
success:^(NSURLSessionDataTask *task, id responseObject)
{
// レスポンスをDBに登録する処理を実行
.......
// TODO: 上記DB登録処理後、Viewの更新処理を実行したい
refreshView();
} failure:^(NSURLSessionDataTask *task, NSError *error)
{
}];
}
となり、VからVMに渡した処理をさらにMに渡して処理する事になり冗長な気がしました。
もっと綺麗な書き方があると思うのですが、分かりません…。
<追記2>
Blocksの場合の綺麗な書き方は分かりませんが、delegateで実装できそうでした。