- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个使用 AFHTTPClient
与 API 通信的 iOS 应用程序。第一步是对用户进行身份验证,为此,我使用以下代码:
-(void)authorize
{
NSURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"login.php" parameters:@{@"login": account.username, @"passwd":account.password}];
AFHTTPRequestOperation *operation = [httpClient HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
[httpClient setDefaultHeader:@"Token" value:[[operation.response allHeaderFields] objectForKey:@"CSRF-Token"]];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@",error.localizedDescription);
}];
[httpClient enqueueHTTPRequestOperation:operation];
[httpClient.operationQueue waitUntilAllOperationsAreFinished];
}
如您所见,我的代码从服务器响应中获取 token 并将其设置为所有 future 请求的默认 header 。
然后我使用 - (void)postPath:(NSString *)path parameters:(NSDictionary *)parameters success:success failure:failure 继续其他请求
但是当我使用调试器时,我发现那些在授权操作完成之前执行的其他请求,因此它们失败了,因为它们没有授权 token 。我添加了 [httpClient.operationQueue waitUntilAllOperationsAreFinished];
但它似乎不起作用...
谢谢你的帮助
最佳答案
使用 dispatch semaphore .
-(void)authorize
{
dispatch_semaphore_t done = dispatch_semaphore_create(0);
NSURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"login.php" parameters:@{@"login": account.username, @"passwd":account.password}];
AFHTTPRequestOperation *operation = [httpClient HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
[httpClient setDefaultHeader:@"Token" value:[[operation.response allHeaderFields] objectForKey:@"CSRF-Token"]];
dispatch_semaphore_signal(done);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@",error.localizedDescription);
}];
[httpClient enqueueHTTPRequestOperation:operation];
[httpClient.operationQueue waitUntilAllOperationsAreFinished];
dispatch_semaphore_wait(done, DISPATCH_TIME_FOREVER);
}
请注意,这会阻止该方法返回,因此您需要确保它不在主/UI 线程上。
关于ios - 在继续之前等待 AFHTTPRequestOperation 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925702/
我正在 swift 中使用 AFNetworking,并且在将以下代码转换为 swift 时遇到问题 objective-c [client GET:url parameters:nil succes
使用发送几个post请求 - (AFHTTPRequestOperation *)POST:(NSString *)URLString parameters
如何中断执行 AFHTTPRequestOperation?如果 HTTP 请求已经开始但尚未完成,这是否可能? 最佳答案 中断是什么意思?如果您想取消操作,则只需调用 -cancel 即可。请参阅:
我搜索了很多并看到了一些答案,但我仍然不确定如何解决它:我只想在操作完成时执行一些 void 函数。 我的代码: NSMutableURLRequest *request = [NSMutableUR
我有这样一种情况,我需要向服务器发出多个请求,而后续请求将取决于先前的请求 1) request 1 2) process data 3) request 2 based on data in ste
我的应用程序中有一些网络服务调用。这是我如何调用它们的示例 +(void) login:(NSDictionary *) loginParams { AppDelegate *appDeleg
有没有办法取消 AFHTTPRequestOperation?例如,我用它来下载 PLIST。所以我打算有一个按钮来取消下载或任务。有办法吗? 更新: operationQueue = [NSOper
伙计,被这个难住了。尝试使用 AFNetworking 下载文件我能做的最好的事情就是在 downloadProgressBlock 中捕获进度字节。我已经尝试了许多不同的 AFNetworking
我使用的是最新的 AFNetworking V2.0。如果可达性可用,我已经设置了一系列要在 AFHTTPRequestOperationManager 的操作队列上运行的操作。我在 appDeleg
我在 swift 中使用AFHTTPRequestOperation,如下所示: let operation : AFHTTPRequestOperation? = manager.GET(reque
我是 objective-c 的完全菜鸟,所以请原谅这个愚蠢的问题。 我已经能够按照 AFNetworking 2.0 的指南使用 AFHTTPRequestOperationManager 发送帖子
我有一个用于测试 AFNetworking 的应用程序API。它从服务器下载文档并将它们放置在应用程序的沙箱中。用户可以开始下载、暂停/恢复下载和取消下载。按预期启动、暂停和恢复所有工作。然而,取消做
使用 iOS 有一段时间了,但现在我在一个复杂的客户端-服务器应用程序中工作,这需要我: 向服务器发送请求(使用 AFHttpRequestOperation)响应是一个区间或一个字典 如果我得到一个
我正在连接到我自己的 Web 服务,我认为它正在发回一个 gzipped 响应,该响应由 AF Networking 库在后台解压缩。当存在接受编码 gzip header 时,我已验证我的服务器正在
所以我试图在线访问一个 json 文件,当我使用 AFHTTPRequestOperation 方法运行完成 block 时,我可以获取 JSON 文件的内容。但是当我尝试在完成 block 之外使用
我正在尝试制作一个使用 AFHTTPClient 与 API 通信的 iOS 应用程序。第一步是对用户进行身份验证,为此,我使用以下代码: -(void)authorize { NSURLRe
我希望函数在 AFHTTPRequestOperation 完成之前不返回,但我不知道该怎么做,在此先感谢。 -(BOOL)download { BOOL ret = TRUE; AFHTTPRequ
我刚刚更新到 AFNetworking 2.0,我正在重写我的代码以下载数据并将其插入到核心数据中。 我下载 JSON 数据文件(从 10-200mb 文件不等),将它们写入磁盘,然后将它们传递给后台
我发现自己在整个代码中使用 AFHTTPRequestOperationManager 重复了很多代码,所以我在考虑将它子类化,这样我就可以将它设置为一个单例,然后将所有代码放在子类,而不是通过我的项
我在使用 AFNetworking 时遇到问题。我在我的代码中这样写: AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperation
我是一名优秀的程序员,十分优秀!