2012-02-22 2 views
0

У меня есть небольшая проблема, я использую этот класс для нагрузки некоторых изображений asincronuslyполучить изображение из asyncimageview

#import <UIKit/UIKit.h> 
@interface AsyncImageView : UIView { 
    NSURLConnection* connection; 
    NSMutableData* data; 
} 
- (void)loadImageFromURL:(NSURL*)url; 
- (UIImage*) image; 
@end 


#import "AsyncImageView.h" 

@implementation AsyncImageView 


- (void)dealloc { 
    [connection cancel]; //in case the URL is still downloading 
} 

- (void)loadImageFromURL:(NSURL*)url { 
    //in case we are downloading a 2nd image 

    NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 

    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; //notice how delegate set to self object 

} 

//the URL connection calls this repeatedly as data arrives 
- (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)incrementalData { 

    if (data==nil) { data = [[NSMutableData alloc] initWithCapacity:2048]; } 

    [data appendData:incrementalData]; 
} 

//the URL connection calls this once all the data has downloaded 
- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection { 

    //so self data now has the complete image 
    connection=nil; 

    if ([[self subviews] count]>0) { 
     //then this must be another image, the old one is still in subviews 
     [[[self subviews] objectAtIndex:0] removeFromSuperview]; //so remove it (releases it also) 
    } 

    //make an image view for the image 
    UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:data]]; 
    imageView.contentMode = UIViewContentModeScaleAspectFit; 

    [self addSubview:imageView]; 
    imageView.frame = self.bounds; 
    [imageView setNeedsLayout]; 

     [self setNeedsLayout]; 
     data=nil; 
} 

- (UIImage*) image { 
    UIImageView* iv = [[self subviews] objectAtIndex:0]; 
    return [iv image]; 
} 
@end 

и это для загрузки изображения

AsyncImageView *asyncImage = [[AsyncImageView alloc] initWithFrame:frame]; 

asyncImage.tag = 999; 
NSURL *url = [NSURL URLWithString:indirizzoImmagine];  

[asyncImage loadImageFromURL:url]; 
[self.view addSubView:asyncImage] 

с этим кодом все работает, но когда я попробуйте поставить asyncImage на [cell.imageview setImage: async.image]; авария приложения, я думаю, что мне нужно изменить подкласс в UIImageView, но ничего ... та же ошибку

, истекающее приложение из-за неперехваченное исключение «NSRangeException», причина: "* - [__ NSArrayI objectAtIndex]: индекс 0 за пределами для пустого массива '

Как я могу получить только изображение?

ответ

0

В классе AsyncImageView синтезировать Imagecache, используя следующий код, который вы можете получить изображение

[imageView.imageCache imageForKey:str_ImgUrl]; 

Здесь ImageView является объектом AsyncImageView.

Смежные вопросы