このファイルをマイデバイスにダウンロードするには、次のようにします。しかし、99%の読み込みインターフェイスの停止(私はボタンをクリックすることはできません)。 20秒後にすべて正常に動作し、ロード= 100%。インターフェイスが99%の負荷で停止するのはなぜですか?それを修正するには?デバイス上のファイルをダウンロードしようとすると、インターフェイスがブロックされています。
- (void)viewDidLoad
{
dispatch_async(dispatch_get_main_queue(), ^{
_session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
});
[self.progressView setProgress:0 animated:NO];
}
- (IBAction)btnClicked:(id)sender {
if(_downloadTask == nil){
_url =[NSURL URLWithString:@"https://www.nsw.gov.au/sites/default/files/bg-view-nsw-media.png"];
_downloadTask = [_session downloadTaskWithURL:_url1];
[_downloadTask resume];
}
else
[_downloadTask resume];
}
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
{
dispatch_async(dispatch_get_main_queue(), ^{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"image1.mp3"];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:NO];
NSData *urlData = [NSData dataWithContentsOfURL:_url];
[urlData writeToFile:filePath atomically:YES];
}
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite;
{
dispatch_async(dispatch_get_main_queue(), ^{
[ _progressView setProgress:totalBytesWritten/totalBytesExpectedToWrite animated:YES];
NSString *percentage = [NSString stringWithFormat:@"%d%%", (int)((totalBytesWritten/totalBytesExpectedToWrite)*100)];
[_label setText:[NSString stringWithFormat:@"%@%%", percentage]];
NSLog(@"%lld", totalBytesWritten);
_label = [[UILabel alloc]initWithFrame:CGRectMake(91, 15, 500, 50)];
[_label setText: percentage];
_label.numberOfLines = 1;
_label.backgroundColor = [UIColor blackColor];
_label.textColor = [UIColor whiteColor];
_label.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:_label];
});
UPD
その後、私はこのコードを削除
NSData *urlData = [NSData dataWithContentsOfURL:_url];
[urlData writeToFile:filePath atomically:YES];
すべてはあなたががmain thread
にすべてを置くべきではありません罰金
は機能しません。コード内でどのように見えますか? – user214155
私はこの行[urlData writeToFile:filePath atomically:YES]と思います。 (そしておそらく上記のもの)はバックグラウンドでコールする必要があります。 – AnthoPak
私の質問が更新されます。ご確認ください – user214155