使用强大的NSProgress与downloadtaskwithrequest

时间:2015-01-31 14:03:14

标签: ios automatic-ref-counting afnetworking-2

我面临着强烈的自我解决问题:

我使用具有强大NSProgress的对象来管理某些文件下载。 要下载,请使用AFNetworking中的downloadtaskwithrequest。 我的问题是这个方法采用的NSProgress * __autoreleasing *与我强大的NSProgress不兼容:

这是我拥有NSProgress的对象:

@interface MyDocument ()
@property(nonatomic, strong) NSProgress *progress;
@end

@implementation MyDocument ()
-(void)download
{
    [myApiClient downloadFileWithUrl:_url progress:_progress]
}
@end

这是处理下载的SessionManager:

-(void)downloadFileFromUrl:(NSString*)url progress:(NSProgress * __strong *)progress
{
    NSURLSessionDownloadTask *downloadTask = [self downloadTaskWithRequest:request 
        progress:progress 
        destination:^NSURL *(NSURL *targetPath, NSURLResponse *response)
        { ... }
        completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error)
        { ... }];
}

这是有关行progress:progress的错误:

Passing address of non-local object to __autoreleasing parameter for write-back

2 个答案:

答案 0 :(得分:0)

您需要将指针传递给NSProgress对象,而不是将对象作为参数传递。 **表示您必须将指针传递给指向现有对象的指针。

[myApiClient downloadFileWithUrl:_url progress:&_progress];

You can find more details from this link

答案 1 :(得分:0)

初始化NSProgress对象的是downloadTaskWithRequest,所以我不能直接给它一个NSProgress,它是我的对象的属性,我必须创建另一个NSProgress对象,并在需要时更新我的​​属性:

-(void)downloadFileFromUrl:(NSString*)url progress:(NSProgress * __strong *)progress
{
    NSProgress *localProgress = nil;
    NSURLSessionDownloadTask *downloadTask = [self downloadTaskWithRequest:request 
    progress:localProgress 
    destination:^NSURL *(NSURL *targetPath, NSURLResponse *response)
    { ... }
    completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error)
    { ... }];

    // Update my property here :
    *progress = localProgress;
}