1

解决方案:

原来这个代码中不存在问题。这是因为 foo 在被销毁时在 UIViewController 中被调用。因此,当异步 foo 调用完成块时,它会由于调用不再存在的东西而中断。

向那些我花时间处理这个问题的人道歉。:/ 希望这对其他人来说是一个教训,以确保他们的完成处理程序在完成时仍然存在。


在开始之前,我查看了 Wait for many asynchronous calls to perform callbackChaining Completion Blocks,但两者的解决方案都不能解决我的问题。

情况:

我有一个方法 foo,它有一个完成块,但它调用另一个方法 bar,它有一个完成块。foo 在 bar 执行完成块期间调用其完成块。下面是一个例子。

-(void) foo:(void(^)())completion{
    ...
    bar:^{
        ...
        completion();
    }
}
-(void) bar:(void(^)())completion{
    ...
    completion();
}

当我这样做时,我在 foo 的完成调用中获得了错误的访问权限。

我需要__block复制 foo 的完成参数吗?

如果是这样,我该怎么做,因为__block (void(^)()) completionCopy;甚至没有通过编译器?

4

0 回答 0