У меня есть проблема, чтобы загрузить файл или управлять ошибки в некоторых случаях (JSON)AFNetworking + загрузить файл или JSON ответ + setDownloadProgressBlock
Загрузка работает очень хорошо. Проблема в том, что сервер может отправлять 404 или 200 (с JSON) в нескольких случаях, когда пользователь запрашивает загрузку.
Как обращаться с JSON в этом случае? Когда мы отправляем запрос, мы не знаем, получим ли мы ошибку JSON (с 200 статусом oR 404) или зашифрованным файлом ...
Я не вижу, как responseObject может мне помочь.
Вот мой код:
AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:zipPath append:NO];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSLog(@"Successfully downloaded zip file to %@", zipPath);
// is-it impossible to handle a JSON response here ?
// responseObject can help me ? don't think !
// do what I have to do after the download is complete
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
// 404
// is-it impossible to handle a JSON response here ?
if ([error code] == -1011)
{
}
}];
[operation setDownloadProgressBlock:^(NSInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
float progress = ((float)((int)totalBytesWritten)/(float)((int)totalBytesExpectedToWrite));
self.progressView.progress = progress;
}];
[operation start];
Нужна ли я сделать AFJSOnRequestOperation? Но в этом случае, как получить загруженный файл, который не является JSON? Спасибо за помощь.
EDIT: я wroted в моих комментариях, я могу получить и поймать responseData в успехе блока ТОЛЬКО если я комментирую строку:
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:zipPath append:NO];
Это логично, я полагаю, что ответ идет в OutputStream вместо успеха блок. Есть ли решение для этого?
Hello phix23. Проблема в том, что операция.responseData кажется нулевой, когда я получил ответ JSON вместо файла. И id jsonObject = AFJSONDecode (операция.responseData, NULL); не работает (неявное объявление функции AFJSONDecode недействительно на C99) –
вам нужно использовать AFHTTPRequestOperation, а не AFJSONRequestOperation. Для AFJSONDecode вы должны импортировать AFJSONUtilities.h – Felix
Дополнительная информация. Я могу получить код состояния 200, а приложение/json mineType ..., но responseData - null. Или можете увидеть JSON в моем браузере. –