2016-06-11 46 views
0
的幫助下得到的數據

我寫了一些測試代碼我不能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]); 

回答

1

經典:作爲該任務是異步執行的,結果的記錄比數據下載要早得多。

把日誌行中完成塊

-(void)downloadFile 
{ 
    [self getFile:^(id result) { 
     if([result isKindOfClass:[NSData class]]) { 
     self.myData=result; 
     NSLog(@"%lu",(unsigned long)[self.myData length]); 
     } 
    }]; 
} 
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; 
} 

我怎樣才能獲得數據?

+1

不要通過回答自己的問題來提出新的問題! **編輯**問題。失敗的原因是一個簡單的命令行界面沒有運行循環,而'NSURLSession'需要一個 – vadian