我想从互联网上的特定链接下载图像下载此图像发生在另一个类中,该类是Singleton类名moreAppInternet.m
我的更多AppInterNet.m文件如下
//finishedImgDling is bool
//mutableData is NSMutableData
//urlConnection is NSURLConnection
//appimage is UIImage
//imageUrl is NSString Containing Link
+(id)sharedManager
{
static moreAppInterNet *sharedMyManager = nil;
@synchronized(self) {
if (sharedMyManager == nil)
sharedMyManager = [[self alloc] init];
}
return sharedMyManager;
}
-(void)downloadImageFromUrl
{
finishedImgDling = NO;
[self.mutableData setLength:0];
self.urlConnection = [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.imageUrl]] delegate:self];
while(!finishedImgDling) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
if (connection == self.urlConnection)
{
NSLog(@"imageDling");
}
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
if (connection == self.urlConnection)
{
if (self.mutableData == nil)
{
self.mutableData = [NSMutableData data];
}
[self.mutableData appendData:data];
}
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
if (connection == self.urlConnection)
{
NSLog(@"image Downloaded");
finishedImgDling = YES;
[self setUrlConnection:nil];
[self storeImage];
}
}
-(void)storeImage
{
[self setAppimage:nil];
self.appimage = [UIImage imageWithData:self.mutableData];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *path =[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"appImage.png"]];
[fileManager createFileAtPath:path contents:UIImagePNGRepresentation(self.appimage) attributes:nil];
NSLog(@"downloading and storing complete");
}
and my other ViewController is as follow from where I call that function
-(void)viewDidLoad
{
[moreAppInterNet sharedManager];
[self downloadImage];
}
-(void)downloadImage
{
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download_Image_from_other_class) object:nil];
NSOperationQueue *que = [[NSOperationQueue alloc] init];
[que addObserver:self forKeyPath:@"operations" options:0 context:NULL];
[que addOperation:operation];
[operation release];
self.dlingQue = que;
[que release];
}
-(void)download_Image_from_other_class
{
[[moreAppInterNet sharedManager] downloadImageFromUrl];
}
-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"operations"] && object == self.dlingQue)
{
if ([self.dlingQue operationCount] == 0)
{
self.imgView = [[moreAppInterNet sharedManager] appimage];
//it takes lots of time to display image in UIImageView
//Even though Above line get executed
}
}
else {
[super observeValueForKeyPath:keyPath ofObject:object
change:change context:context];
}
}
问题是self.imgView
需要大量的时间来加载图像,大约5秒,即使它已经完全下载。
我用于联网的库是AFNetworking
我认为当您请求时,您的代码会再次下载图像。
您需要检查downloadImageFromUrl
中是否有该文件。
也许,您需要更健壮的库来处理文件下载。