2016-03-07 47 views
0

我已經嘗試過幾種AFNetworking類的變體,這只是一個例子,但在UIImageView + AFNetworking中,例如,我無法在for循環,並實際上獲得多個幀。意思是,我不明白爲什麼只有永遠的最後一個響應返回,在成功的塊,其中,其他人只是送送出去,但無限期掛起:AFNetworking - 對除for循環中的最終請求之外的所有請求都沒有響應

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的東西,會發生同樣的情況:爲每個幀放置一個請求,但只有最後一個完成。其他人不返回任何東西,成功塊中的零圖像或失敗塊中的錯誤。

我的問題是,我做錯了什麼?或者更好的是,我們可以通過什麼方式製作一堆幀請求(甚至不一定按順序或同步),並讓它們全部返回而不掛起?我已經檢查過網絡可達性和實際的網址,在那裏一切正常。必須有一種方法可以一次製作一堆請求,並且當URL和網絡可訪問性全部檢出OK時,實際上可以聽到所有請求。

我已經嘗試了幾件事情:

(1)等待時間長

(2)檢查超時和錯誤

(3)將在所述第二幀中的請求所述第一的成功塊(以及第二請求被提出,但沒有聽到回)

(4)的AFNetworking

其它版本沒有升科索沃解放軍!

必須有比這更好的API從網絡上拉框架,因爲它放在一起時的動畫是一種常見操作...

回答

2

您的代碼看起來不錯,嘗試使用此代碼下載圖像,我能夠成功地在循環中使用。那就是我現在可以幫你的。

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]; 
+0

我沒有在AFNetworking 3.x中找到這個API。我看到的最接口的接口是AFHTTPSessionManager,它不會讓我訪問AFHTTPRequestOperation。你能否粘貼你的整個文件,或者至少需要導入和輸入來運行它?謝謝。 – Cindeselia

+0

我已經在bitbucket上創建了AFHTTPSessionManager文件的片段,你可以從https://bitbucket.org/snippets/bharatmodi777/8rA5M獲得它,我剛剛導入了一個文件作爲#import「AFNetworking.h」,就是這樣。讓我知道是否有其他要求。 –

1

當使用UIImageView+AFNetworking,一個UIImageView將只保留一個請求的時間,和以前的請求將被取消,因此只有最後一個請求工作。請參閱源代碼以供參考:UIImageView+AFNetworking.m

您可以直接使用AFImageDownloader API下載多個圖像。