我面临着强烈的自我解决问题:
我使用具有强大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
答案 0 :(得分:0)
您需要将指针传递给NSProgress对象,而不是将对象作为参数传递。 **表示您必须将指针传递给指向现有对象的指针。
[myApiClient downloadFileWithUrl:_url progress:&_progress];
答案 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;
}