4

UIImageView新しい 'loadImageNamed:' メソッドでを拡張しようとしています。このメソッド内で使用しますdispatchQueueXCode、プロパティ「dispatchQueue」がタイプ「UIImageView」のオブジェクトに見つからないというエラーをスローします。

誰かヒントをくれませんか!? ありがとう!

#import "UIImageView+LazyPicLoad.h"

@implementation UIImageView (LazyPicLoad)

-(void)loadImageNamed:(NSString *)name {
dispatch_async(self.dispatchQueue, ^{
    NSData *imageData;
    if (name) {
        if ([UIScreen mainScreen].scale == 2.0)
            imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[name stringByAppendingString:@"@2x"] ofType:@"png"]];
        else
            imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:name ofType:@"png"]];
    }

    CGImageRef decompressedImage = NULL;
    if (imageData) {
        CGDataProviderRef imageDataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)imageData);
        CGImageRef image = CGImageCreateWithPNGDataProvider(imageDataProvider, NULL, NO, kCGRenderingIntentDefault);
        CGContextRef bitmapContext = CGBitmapContextCreate(NULL, CGImageGetWidth(image), CGImageGetHeight(image), CGImageGetBitsPerComponent(image), CGImageGetWidth(image) * 4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little);
        CGContextDrawImage(bitmapContext, CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image)), image);
        decompressedImage = CGBitmapContextCreateImage(bitmapContext);

        CGDataProviderRelease(imageDataProvider);
        CGImageRelease(image);
        CGContextRelease(bitmapContext);
    }

    dispatch_sync(dispatch_get_main_queue(), ^{
        if (decompressedImage)
            self.image = [UIImage imageWithCGImage:decompressedImage];
    });

    if (decompressedImage)
        CGImageRelease(decompressedImage);
});
}

@end
4

1 に答える 1

1

それがまさに問題です。UIImageView には dispatchQueue プロパティがありません。そのブロックをバックグラウンドに送りたい場合は、代わりにこれを使用する必要があります。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // background code
});
于 2012-12-21T13:14:19.213 に答える