我一直在为我的雇主构建一个框架,将网络请求和我们的身份验证从将为我们的应用程序做出贡献的开发人员那里抽象出来。我们正在为我们的 Web API 使用表单身份验证(我希望我可以更改它)当我的应用程序启动我的框架检查并确保我的 cookie 没有过期时,如果是,我会尝试登录,以便用户获得无缝体验。我遇到了一个问题,如果 cookie 过期并且我请求一个新的,有时需要一点时间(尤其是在 3G 上),所以当我登录用户时,有时他们会选择一个需要网络数据的选项,并且请求与无效的 cookie 一起发送。让请求等到我完成登录后再发出请求的最佳方法是什么。这是一些伪代码
IF appIsLoggingIn
WAIT FOR COMPLETION
WHEN COMPLETED PROCEED
ELSE
PROCEED AS NORMAL
完成块将适用于此。
+ (void)login:(void (^)(NSDictionary *response, NSError *error))completionBlock;
{
...
// Do some NSURLRequests here and when you get the
// response, call the completionBlock
dispatch_async(dispatch_get_main_queue(), ^(void) {
completionBlock(@{ @"some-key":@"some-response-value-from-server" }, nil);
});
}
您还可以使用 BOOL 完成块而不是 void,因此当服务器返回登录成功时,BOOL 可以返回 TRUE。