我无法在NSURLSession的帮助下获取数据

时间:2016-06-11 14:25:26

标签: objective-c nsurlsession

我写了一些测试代码

-(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]); 

2 个答案:

答案 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;
}

我如何获取数据?