我認爲我的問題是在我的代碼或邏輯。AFNetworking 2.0和下載多個圖像
我所試圖做的
我有一個view Controller
在集合視圖我有一個自定義UICollectionViewCell
一個UICollectionView
- 它的定製是由於需要下載並設置不同的圖像的原因每個單元格。這些圖像是具有其他屬性,如日期/標題項目等
這是我曾嘗試
創建一個自定義UITableViewCell
和I類有這樣的代碼:
-(void) setDetailsWithTitle: (NSString *) title Image:(UIImage *) image Items: (NSArray *)items
{
int i = 0;
for (BBItem *item in items){
BBThumbnailView *thumbNailView = [[BBThumbnailView alloc]initWithFrame:CGRectMake(5 + (60 * 1), 5, 60, 60)];
[self.contentView addSubview:thumbNailView];
thumbNailView.item = item;
thumbNailView.clipsToBounds = YES;
i++;
}
}
在這裏,我給單元格的所有項目的數組。這些項目是對象。我下載了它們並用XML解析器解析了它們。這完美地工作,並在檢查每個對象時 - 他們都有我需要的正確屬性。
我在此方法中尚未使用UIImage
參數。 for循環遍歷數組中的每個項目並設置圖像,thumbNailView.item
是我設置的對象。
然後在BBThumbnailView
我已經這樣做了:
設置每個項目,並獲得其URL
(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.shouldShowPlaceHolder = NO;
self.backgroundColor = [UIColor clearColor];
UIImageView *backGroundImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"Thumbnail_Background_Big.png"]];
[self addSubview:backGroundImageView];
self.layer.masksToBounds = NO;
self.imageView = [[UIImageView alloc]initWithFrame:CGRectMake(4, 2, 60, 60)];
// self.imageView.backgroundColor = [UIColor whiteColor];
[self addSubview:self.imageView];
}
return self;
}
self.imageView is the imageView I am setting for the cells. The other imageViews are placeholder images.
-(void)setItem:(BBItem *)aItem
{
_item = aItem;
if (self.item){
if (self.item.thumbnailUrl && [self.item.thumbnailUrl length] > 0){
[self loadUrl: [NSURL URLWithString:self.item.thumbnailUrl]];
}
}
}
這是我重寫的屬性BBItem的制定者。每個項目僅啓動URL的下載。
在loadUrl
方法:
-(void)loadUrl:(NSURL *)url
{
NSURLRequest *urlRequest = [[NSURLRequest alloc]initWithURL:url];
AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
requestOperation.responseSerializer = [AFImageResponseSerializer serializer];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
//NSLog(@"Response: %@", responseObject);
//self.imageView.image = responseObject;
UIImage *image = [[UIImage alloc] init];
image = responseObject;
[self.imageView setImage:image];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Image error: %@", error);
}];
[requestOperation start];
}
現在我已經把一個破發點上lodUrl
方法,它與每個項目不同的網址,多次執行(由於許多BBItems有)。
問題
BBCollectionViewCell
每個的圖像被設置爲相同的圖像。當我重新加載視圖或關閉應用並再次打開時,這總是一個不同的圖像,它將是一個不同的圖像。我把它當作下載和設置的最後一張圖片。
爲什麼我認爲它的發生
我想原因是由於由我取消先前請求的每個新的請求?任何人都可以解釋一下這個問題嗎?
在做了一些更多的調試之後,我認爲這個問題與設置imageView有關。每次請求結束時,它都會將self.imageView的相同實例設置爲新圖像。 – Tander
這似乎是重用問題 – rounak
Esenitally,是的。我正在重複使用同一個單元格的實例。我沒有在cellForRowAtIndex方法中設置indexPath.row – Tander