Ошибка NSURLErrorDomain -1021

Я разрабатываю приложение, в которое я интегрировал Dropbox. Вход в систему выполнен правильно, также я могу создать папку в DropBox. Но когда я пытаюсь загрузить файл, я получаю сообщение об ошибке

Следующая ошибка, которую я получаю

error making request to /1/files_put/dropbox/Info.plist - Error
Domain=NSURLErrorDomain Code=-1021 "The operation couldn’t be
completed. (NSURLErrorDomain error -1021.)" UserInfo=0x6859bc0
{destinationPath=/Info.plist,
sourcePath=/Users/bcod/Library/Application Support/iPhone
Simulator/5.0/Applications/0E1EE43C-8F6B-40FA-8696-D3992DA2DCE5/DBRoulette.app/Info.plist}

Я не получаю эту ошибку при создании папки.


person user2185354    schedule 20.04.2013    source источник


Ответы (2)


У меня была такая же проблема с iOS 5.0 на iPhone, но симулятор iPhone 6.1 работал без сообщений об ошибках.

Я просмотрел DropboxSDK/DBRestClient.m, особенно последние строки uploadFile:toPath:fromPath:params и внедрил категорию ExBody в DBRequest, чтобы добавить метод connection:needNewBodyStream:

#import "DBRequest+ExBody.h"

@implementation DBRequest (ExBody)

#pragma mark NSURLConnection delegate methods

- (NSInputStream *)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)req {

    NSString * sourcePath = [userInfo objectForKey:@"sourcePath"];
    NSLog(@"%@ needs newBodyStream!", sourcePath);
    return [NSInputStream inputStreamWithFileAtPath:sourcePath];
}

@end

Это сработало для меня. Метод вызывается на iOS5, а не на iOS6!

person TomThumb    schedule 25.04.2013
comment
Абсолютно спасатель. Работал как шарм. - person Alex1987; 27.04.2013
comment
У меня тоже сработало, спасибо! Я сообщил о проблеме в Dropbox. Они планируют включить исправление в следующую версию. - person nschum; 03.05.2013
comment
Привет @TomThumb - я воспроизвел эти два файла в своем проекте. Должен ли я #импортировать файл .h куда-нибудь? - person Justin; 08.06.2013
comment
Нет необходимости импортировать (или фактически создавать) файл .h. Просто свяжите файл .m. - person nschum; 20.06.2013
comment
SDK 1.3.5 включает это исправление. - person nschum; 16.07.2013
comment
Спасибо за внимание - person Justin; 26.07.2013

Ошибка -1021 является ошибкой NSURLErrorRequestBodyStreamExhausted.

Согласно документации вам не хватает метода делегата:

NSURLErrorRequestBodyStreamExhausted
Возвращается, когда необходим основной поток, но клиент его не предоставляет. Это влияет на клиентов на iOS, которые отправляют запрос POST с использованием основного потока, но не реализуют подключение метода делегата NSURLConnection: needNewBodyStream. Доступно в OS X v10.7 и более поздних версиях.

person Richard Brown    schedule 20.04.2013
comment
Я попытался вызвать делегата DBNetworkRequestDelegate, NSURLConnectionDataDelegate, NSURLConnectionDelegate, но все еще получаю ту же ошибку. - person user2185354; 20.04.2013
comment
Вы добавили метод connection:needNewBodyStream? - person Richard Brown; 20.04.2013
comment
как мне реализовать этот метод - person user2185354; 20.04.2013
comment
Прочтите документацию. - person Richard Brown; 20.04.2013
comment
Эта ошибка исходит из Dropbox SDK, поэтому @user2185354, вероятно, не может ее реализовать. То есть библиотеке Dropbox SDK может понадобиться это реализовать, но у него нет доступа к файлу NSURLConnection. - person Smilin Brian; 25.04.2013