我写了一些测试代码
-(void)downloadFile
{
[self getFile:^(id result) {
if([result isKindOfClass:[NSData class]])
{
self.myData=result;
}
}];
NSLog(@"%lu",(unsigned long)[self.myData length]);
}
-(void)getFile:(void(^)(id result))completionHandler
{
void(^partCompetionHandle)(NSURL *, NSURLResponse *, NSError *)=^(NSURL *url, NSURLResponse *response, NSError *error){
if(response==nil){
completionHandler(error);
return;
}
NSData *data=[NSData dataWithContentsOfURL:url];
completionHandler(data);
};
self.session=[NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURL *url=[NSURL URLWithString:@"http://upload.wikimedia.org/wikipedia/commons/7/7f/Williams_River-27527.jpg"];
NSURLSessionDownloadTask *dataTask =[_session downloadTaskWithURL:url completionHandler:^(NSURL* data, NSURLResponse * response, NSError * error) {
partCompetionHandle(data, response, error);
}];
[dataTask resume];
}
当我下载他们的数据时,我的数据为零 这一行显示为0
NSLog(@"%lu",(unsigned long)[self.myData length]);
答案 0 :(得分:1)
经典:由于任务是异步执行的,因此结果的记录要比下载数据的时间早得多。
将日志行放在完成块
中-(void)downloadFile
{
[self getFile:^(id result) {
if([result isKindOfClass:[NSData class]]) {
self.myData=result;
NSLog(@"%lu",(unsigned long)[self.myData length]);
}
}];
}
答案 1 :(得分:0)
我改变了代码。但我没有看到数据
-(void)downloadFile
{
[self getFile:^(id result) {
if([result isKindOfClass:[NSData class]])
{
self.myData=result;
NSLog(@"%lu",(unsigned long)[self.myData length]);
}
}];
}
我从主要函数中调用了 downloadFile 方法
int main(int argc, const char * argv[]) {
@autoreleasepool {
DownloadFile *donload=[DownloadFile new];
[donload downloadFile];
}
return 0;
}
我如何获取数据?