ios - AFNetworking - 除了 for 循环中的最终请求外,没有任何响应

标签 ios networking afnetworking afnetworking-2 afnetworking-3

我已经尝试了 AFNetworking 类的几种变体,这只是一个示例,但是在 UIImageView+AFNetworking 中,例如,我无法在 for 循环中发出请求并且实际上得到不止一帧。意思是,我不明白为什么只有最后一个响应在成功 block 中返回,而其他响应只是被发送出去但无限期地挂起:

for (unsigned int i = 1; i <= numFrames; ++i)
    {
        // Fire a request
        NSLog(@"REQUEST MADE FOR FRAME #%u", i);

        // get ith frame
        NSString* urlString = [NSString stringWithFormat:@"%@%u.png", urlPrefix, i];
        NSURL* frameURL = [NSURL URLWithString:urlString];
        NSURLRequest* request = [[NSURLRequest alloc] initWithURL:frameURL];

        [_myImage setImageWithURLRequest:request
                        placeholderImage:spinnerImage
                                 success:^(NSURLRequest* request, NSHTTPURLResponse* response, UIImage* image)
         {
             if (image != nil)
             {
                 NSLog(@"Frame %u DONE!", i);
                 frames[i - 1] = image;
             }
             else
             {
                 NSLog(@"Frame #%u is nil, expected %lld bytes!", i, response.expectedContentLength);
             }
         }
                                       failure:^(NSURLRequest* request, NSHTTPURLResponse* response, NSError* error)
         {
             NSLog(@"REASON: %@ - %@", error, [error userInfo]);
         }];
    }

我在控制台得到的输出是

2016-03-06 20:04:45.795 [2625:383915] Reachability Flag Status: -R ------- networkStatusForFlags
2016-03-06 20:04:45.825 [2625:383915] REQUEST MADE FOR FRAME #1
2016-03-06 20:04:45.833 [2625:383915] REQUEST MADE FOR FRAME #2
2016-03-06 20:04:45.834 [2625:383915] REQUEST MADE FOR FRAME #3
2016-03-06 20:04:45.921 [2625:383915] [Crashlytics] Version 3.7.0 (102)
2016-03-06 20:04:46.388 [2625:383915] Reachability Flag Status: -R ------- networkStatusForFlags
2016-03-06 20:04:46.389 [2625:383915] Reachability Flag Status: -R ------- networkStatusForFlags
2016-03-06 20:04:46.389 [2625:383915] Reachability Flag Status: -R ------- networkStatusForFlags
2016-03-06 20:04:46.468 [2625:383915] Frame 3 DONE!

如果我将 numFrames 更改为 4、10 或 50 之类的值,同样的事情会发生:对每一帧都发出请求,但只有最后一帧完成。其他的不返回任何东西,要么是成功 block 中的 nil 图像,要么是失败 block 中的错误。

我的问题是,我做错了什么?或者更好的是,我们可以通过什么方式发出一堆帧请求(甚至不一定是顺序或同步)并让它们全部返回而不挂起?我检查了网络可达性和实际 URL,一切正常。必须有一种方法可以同时发出一堆请求,并在 URL 和网络可访问性都检查正常时实际收到所有请求的回复。

我已经尝试了一些事情:

(1)等待时间长

(2) 检查超时和错误

(3) 将第二帧的请求放在第一帧的成功 block 中(第二个请求发出,但没有收到回复)

(4) 其他版本的AFNetworking

没有运气!

必须有比这更好的 API 来从网络中拉取帧,因为这是将动画放在一起时的常见操作...

最佳答案

您的代码看起来不错,请尝试使用此代码下载图片,我能够在循环中成功使用。这就是我现在可以帮助你的。

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];

requestOperation.responseSerializer = [AFImageResponseSerializer serializer];

[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    [imageView setImage: responseObject];

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Image error: %@", error);
}];
[requestOperation start];

关于ios - AFNetworking - 除了 for 循环中的最终请求外,没有任何响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35836094/

相关文章:

ios - AFNetworking 没有构建正确的 URL?

ios - 如何在 UITextView 中替换句子中的确切关键字

ios - 如何使具有多个 UITableViewCell 的 tableView(cellForRowAtIndexPath) 可读?

ios - 如何以编程方式检测 iPhone 中的 EDGE 网络或不良网络?

c - 开发数据库服务器 : How to send results to a client?

ios - AFNetworking - HTTP 加载失败(错误代码 : -999) swift iOS

ios - 如何将图像下载到本地磁盘并在 View Controller 中设置 ImageView 的图像?

ios - 我得到这个 “Thread 1: signal SIGABRT”

ios - 如何显示 iOS 推送通知弹出窗口?

python 3.2.3 : Socket takes longer to timeout than it should?