Merge pull request #139 from facebook/imagedownloader-ios7

ASBasicImageDownloader iOS 7 support
This commit is contained in:
Nadine Salter 2014-12-04 12:56:06 -08:00
commit eb600b955a
2 changed files with 13 additions and 11 deletions

View File

@ -31,13 +31,13 @@
#pragma mark - #pragma mark -
/** /**
* NSURLSessionTask lacks a `userInfo` property, so add this association ourselves. * NSURLSessionDownloadTask lacks a `userInfo` property, so add this association ourselves.
*/ */
@interface NSURLSessionTask (ASBasicImageDownloader) @interface NSURLRequest (ASBasicImageDownloader)
@property (nonatomic, strong) ASBasicImageDownloaderMetadata *asyncdisplaykit_metadata; @property (nonatomic, strong) ASBasicImageDownloaderMetadata *asyncdisplaykit_metadata;
@end @end
@implementation NSURLSessionTask (ASBasicImageDownloader) @implementation NSURLRequest (ASBasicImageDownloader)
static const char *kMetadataKey = NSStringFromClass(ASBasicImageDownloaderMetadata.class).UTF8String; static const char *kMetadataKey = NSStringFromClass(ASBasicImageDownloaderMetadata.class).UTF8String;
- (void)setAsyncdisplaykit_metadata:(ASBasicImageDownloaderMetadata *)asyncdisplaykit_metadata - (void)setAsyncdisplaykit_metadata:(ASBasicImageDownloaderMetadata *)asyncdisplaykit_metadata
{ {
@ -85,14 +85,14 @@ static const char *kMetadataKey = NSStringFromClass(ASBasicImageDownloaderMetada
completion:(void (^)(CGImageRef, NSError *))completion completion:(void (^)(CGImageRef, NSError *))completion
{ {
// create download task // create download task
NSURLSessionTask *task = [_session downloadTaskWithURL:URL]; NSURLSessionDownloadTask *task = [_session downloadTaskWithURL:URL];
// associate metadata with it // associate metadata with it
ASBasicImageDownloaderMetadata *metadata = [[ASBasicImageDownloaderMetadata alloc] init]; ASBasicImageDownloaderMetadata *metadata = [[ASBasicImageDownloaderMetadata alloc] init];
metadata.callbackQueue = callbackQueue ?: dispatch_get_main_queue(); metadata.callbackQueue = callbackQueue ?: dispatch_get_main_queue();
metadata.downloadProgressBlock = downloadProgressBlock; metadata.downloadProgressBlock = downloadProgressBlock;
metadata.completionBlock = completion; metadata.completionBlock = completion;
task.asyncdisplaykit_metadata = metadata; task.originalRequest.asyncdisplaykit_metadata = metadata;
// start downloading // start downloading
[task resume]; [task resume];
@ -107,8 +107,8 @@ static const char *kMetadataKey = NSStringFromClass(ASBasicImageDownloaderMetada
return; return;
} }
ASDisplayNodeAssert([downloadIdentifier isKindOfClass:NSURLSessionTask.class], @"unexpected downloadIdentifier"); ASDisplayNodeAssert([downloadIdentifier isKindOfClass:NSURLSessionDownloadTask.class], @"unexpected downloadIdentifier");
NSURLSessionTask *task = (NSURLSessionTask *)downloadIdentifier; NSURLSessionDownloadTask *task = (NSURLSessionDownloadTask *)downloadIdentifier;
[task cancel]; [task cancel];
} }
@ -121,7 +121,7 @@ static const char *kMetadataKey = NSStringFromClass(ASBasicImageDownloaderMetada
totalBytesWritten:(int64_t)totalBytesWritten totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{ {
ASBasicImageDownloaderMetadata *metadata = downloadTask.asyncdisplaykit_metadata; ASBasicImageDownloaderMetadata *metadata = downloadTask.originalRequest.asyncdisplaykit_metadata;
if (metadata.downloadProgressBlock) { if (metadata.downloadProgressBlock) {
metadata.downloadProgressBlock((CGFloat)totalBytesWritten / (CGFloat)totalBytesExpectedToWrite); metadata.downloadProgressBlock((CGFloat)totalBytesWritten / (CGFloat)totalBytesExpectedToWrite);
} }
@ -133,7 +133,7 @@ static const char *kMetadataKey = NSStringFromClass(ASBasicImageDownloaderMetada
{ {
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:location]]; UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:location]];
ASBasicImageDownloaderMetadata *metadata = downloadTask.asyncdisplaykit_metadata; ASBasicImageDownloaderMetadata *metadata = downloadTask.originalRequest.asyncdisplaykit_metadata;
if (metadata.completionBlock) { if (metadata.completionBlock) {
dispatch_async(metadata.callbackQueue, ^{ dispatch_async(metadata.callbackQueue, ^{
metadata.completionBlock(image.CGImage, nil); metadata.completionBlock(image.CGImage, nil);
@ -142,10 +142,10 @@ static const char *kMetadataKey = NSStringFromClass(ASBasicImageDownloaderMetada
} }
// invoked unconditionally // invoked unconditionally
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task - (void)URLSession:(NSURLSession *)session task:(NSURLSessionDownloadTask *)task
didCompleteWithError:(NSError *)error didCompleteWithError:(NSError *)error
{ {
ASBasicImageDownloaderMetadata *metadata = task.asyncdisplaykit_metadata; ASBasicImageDownloaderMetadata *metadata = task.originalRequest.asyncdisplaykit_metadata;
if (metadata && error) { if (metadata && error) {
dispatch_async(metadata.callbackQueue, ^{ dispatch_async(metadata.callbackQueue, ^{
metadata.completionBlock(NULL, error); metadata.completionBlock(NULL, error);

View File

@ -311,6 +311,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = Sample/Info.plist; INFOPLIST_FILE = Sample/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
}; };
@ -322,6 +323,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = Sample/Info.plist; INFOPLIST_FILE = Sample/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
}; };