1

我有这个问题:我的控制器要求我的模型为我加载一些数据,因为控制器需要这些数据来填充视图。模型向数据存储询问数据,然后再次查询数据库。我的模型发送一个块,其中包含处理结果的逻辑。

然后问题来了;如何将此数据返回给控制器?由于它是异步的,所以我不能在块内或块外放一个 return,因为我不知道它什么时候完成。

我考虑过两种解决方法;

  • 让 Controller 将一个块作为回调传递给我的模型,然后它再次在自己的回调块中调用该回调。
  • 让我的模型发布我的控制器可以收听的通知。

有没有人对此有很好的解决方案?

编辑:尝试澄清列表中的#1(没有任何代码):我的控制器调用,比如说,saveStuff:callback:在模型中并传递stuff和一个回调块。然后模型要求数据存储保存stuff并将它自己的回调传递给数据存储。然后我要做的是在模型回调中调用控制器回调。这更有意义吗?

4

1 回答 1

4

最好的解决方案是将块作为完成处理程序传递给模型,然后调用它。像这样的东西

// model implementation
-(void)loadDatabaseOnCompletion:(void(^)(id result))completionHandler {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // loading data from server
        completionHandler(result);
    });
}

...
// from ViewController
[model loadDatabaseOnCompletion:^(id result) {

}];
于 2013-02-27T11:55:00.607 回答