私はSDWebImageライブラリとそのiPhoneで動作していますが、なぜこれがiPadで呼び出されないのか分かりません。それは私がcellForItemAtIndexPathにこの方法を置く。いずれかのブレークポイントにヒットしません。dispatch_async(dispatch_get_main_queue()はiPad上で動作していませんが、iPhoneで動作します)
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* cellIdentifier = @"CustomCollectionViewCell";
CustomCollectionViewCell* cell = (CustomCollectionViewCell*)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
[cell.downloadButton setTag:indexPath.row];
[cell.downloadButton addTarget:self action:@selector(deleteButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
catalogModel = [catalogArray objectAtIndex:indexPath.item];
cell.cellDescription.text = catalogModel.catalogName;
SDWebImageManager *manager = [SDWebImageManager sharedManager];
NSString *urlStr = catalogModel.imageNameThumbnail;
NSURL *url = [NSURL URLWithString:urlStr];
dispatch_async(dispatch_get_main_queue(), ^{
if ([self.catalogCollectionView.indexPathsForVisibleItems containsObject:indexPath])
{
catalogModel = [catalogArray objectAtIndex:indexPath.item];
[manager downloadImageWithURL:[NSURL URLWithString:catalogModel.imageNameThumbnail] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {}completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL)
{
cell.cellImageView.image = image;
NSLog(@"%@",catalogModel.catalogName);
}];
};
});
return cell;
}
あなたのインデントはあなたが投稿したコードを理解することは不可能ですが、不可能にします。あなたは「私はこのメソッドをcellForItemAtIndexPathに入れます」と言っています。あなたが投稿したものは方法ではなく、コード断片です。あなたは 'cellForItemAtIndexPath'メソッド全体をポストし、ポストする前にコードを再インデントするためにconrol-Iを使うべきです。 –
2つのネストされた呼び出しを使用してdispatch_asyncを実行し、外側のグローバルバックグラウンドキューと内側のメインキューをメインキューに移動します。すべてのことは、そのコードの呼び出しを遅らせることです。実際にこのコードで何をしようとしていますか? –
また、 'downloadImageWithURL:options:progress:completed:'メソッドの完了ブロックがメインスレッドまたはバックグラウンドスレッドで呼び出されているかどうか知っていますか?それが問題になるバックグラウンドスレッドで呼び出された場合。 –