【问题标题】:Block is not getting executed块没有被执行
【发布时间】:2016-03-30 08:14:39
【问题描述】:

我已将方法声明如下:

- (void)downloadCSVs:(void (^)(void))completion

它的主体是:

- (void)downloadCSVs:(void (^)(void))completion
{
        [[Singleton sharedData] downloadCSVFilesFromServer:<MY_URL>];
}

并将此方法称为:

[self downloadCSVs:^
{
        NSLog(@"Download Completed!");
}];

但下载后,它并没有执行 NSLog。 请让我知道我错在哪里。

【问题讨论】:

  • 你需要调用completion();在旁边下载CSVs:功能实现。或者将完成块传递给另一个函数或属性调用完成();完成所有任务后。
  • @阿宝 是宝!我做了同样的事情,它现在正在工作!感谢您的回答! :-)

标签: ios block ios9.2


【解决方案1】:

您的块没有被调用,因为没有尝试调用它。

以下方法接受块作为参数,然后调用[Singleton downloadCSVFilesFromServer:],但它不会将块传递给此方法,也不会自行调用它:

- (void)downloadCSVs:(void (^)(void))completion
{
    [[Singleton sharedData] downloadCSVFilesFromServer:<MY_URL>];
}

您需要扩展[Singleton downloadCSVFilesFromServer:] 方法以接受块参数并在完成时调用它。

【讨论】:

  • 感谢您的回复。它现在正在工作,因为我没有明确调用该块。我认为它会被自己调用,因为我已经调用了该方法。但是你能解释一下你的意思---------------你需要扩展 [Singleton downloadCSVFilesFromServer:] 方法来接受块参数--------- ----------------?
  • @Developer 您需要将completion 参数添加到该方法并让它在完成时调用它。我假设它是一个异步方法?
  • 不是同步方法,但稍后我将使其异步。你能告诉我--------你需要将完成参数添加到该方法的语法------------ ----.我想我已经在我的方法声明中添加了这一点。请检查一次好吗?
  • 类似:downloadCSVFilesFromServer:(NSURL *)url withCompletion:(void (^)(void))completion.
  • 感谢分享代码。我想我还是有点困惑,因为如果你看到我的方法---------------- (void)downloadCSVs:(void (^)(void))completion------ -------------,我已经添加了完成处理程序,所以我期待它会被自己调用。您建议我将完成处理程序块放入下载 CSV 的方法中。我的意思是在我的方法中放置完成处理程序有什么不同。抱歉打扰你。如果您愿意,我们可以通过聊天进行讨论。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 2013-03-14
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多