Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c AFN正在更新请求中的URL_Objective C_Afnetworking - Fatal编程技术网

Objective c AFN正在更新请求中的URL

Objective c AFN正在更新请求中的URL,objective-c,afnetworking,Objective C,Afnetworking,在AFNetworking中启动请求后,有没有简单的方法更新请求的URL? 假设我的应用程序正在下载2GB的数据块,我们将有200个10MB的数据块。对于每一个,我都创建一个AFHTTPRequestOperation并将其添加到队列中 问题是,我正在下载的服务器在所有URL上都有一个超时,这意味着在这个时间之后我将得到403,我必须生成一个新的URL。我需要在时间用完之前做这件事 for (DownloadFile *downloadFile in [download filesInTheDo

在AFNetworking中启动请求后,有没有简单的方法更新请求的URL? 假设我的应用程序正在下载2GB的数据块,我们将有200个10MB的数据块。对于每一个,我都创建一个AFHTTPRequestOperation并将其添加到队列中

问题是,我正在下载的服务器在所有URL上都有一个超时,这意味着在这个时间之后我将得到403,我必须生成一个新的URL。我需要在时间用完之前做这件事

for (DownloadFile *downloadFile in [download filesInTheDownload])
{
    for (DownloadChunk *downloadChunk in [downloadFile chunksInTheFile])
    {
        NSURL *fileURL = [[NSURL alloc] initWithString:[downloadFile filePath]];

        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:fileURL];
        NSLog(@"Normal range: %lli-%lli", [downloadChunk startingByte], [downloadChunk endingByte]);
        NSString *range = [NSString stringWithFormat:@"bytes=%lli-%lli", newStartingByte, [downloadChunk endingByte]];
        [request setValue:range forHTTPHeaderField:@"Range"];
        AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
        operation.outputStream = [NSOutputStream outputStreamToFileAtPath:chunkPath append:YES];

        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"%@", [NSString stringWithFormat:@"Chunk complete: %@.%i", [downloadFile fileName], [downloadChunk chunkId]]);
            if (download.downloadedBytes == download.size)
                [[NSNotificationCenter defaultCenter] postNotificationName:@"downloadFinished" object:download];
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"Error: %@", error);
        }];

        [operation setDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
            download.downloadedBytes += bytesRead;
        }];

        [queue addOperation:operation];
    }
}

不,无法修改计划的操作。一般来说,这是一件好事,这意味着您可以安排操作,并绝对确保它将根据原始条件执行

我认为你有两种选择。首先,您可以一个接一个地安排操作,并验证链接是否有效,必要时进行更新


其次,您可以通过更新链接并重新安排相同的操作来对
403禁止的
做出反应。

是的,我考虑过这两种情况,但我认为我也可以通过将AFHTTPNetworking子类化或其他方法来实现;)当然,但这会带来维护复杂性;)