我已经实现了以下完成块,当我得到结果时,completionBlock是 null
. 所以完成块没有被触发,因为它不会进入条件 . 为什么完成阻止 null
?
-(void)checkIfThereAnyValidCouponCodeAsTeacherWithCompletionHandler:(void(^)(NSDate *date))completionBlock{
[[DDDataManager defaultManager] checkIfThereAnyValidCouponCodeAsTeacherWithCompletionHandler:^(NSDate *expireDate) {
_expireDate = expireDate;
if (completionBlock) {
completionBlock(expireDate);
}
}];
}
呼叫者
-(void)loadData{
[[DDCouponCodesManager sharedManager] checkIfThereAnyValidCouponCodeAsTeacherWithCompletionHandler:^(NSDate *date) {
[self checkAndReloadData];
}];
}
1 回答
你试图在其他块响应中调用块,这两个块都将以异步方式工作,所以你的 completionBlock 是nulll . 请使用 dispatch_semaphore_t 来实现您的目标 .
使用dispatch_semaphore_t将等待您的内部块响应,然后它将调用您的完成块 .
要使用dispatch_semaphore_t,您可以从此链接获得帮助How do I wait for an asynchronously dispatched block to finish?