ASIFormDataRequest не может загрузить файл .zip с устройства, но делает это в симуляторе - PullRequest
1 голос
/ 08 июля 2011

У меня подключен Wi-Fi в устройствах - так что это исключено.

Приложение, которое у меня работает с таким же следующим кодом, может загрузить файл на сервер Java в симуляторе iOS 4.3, но не можетзагрузить в iOS 4.3.3 устройство.Это немного странно.

ASIFormDataRequest *request_zip = [[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:strURL]];
[request_zip setAllowCompressedResponse:YES];
[request_zip setPostValue:@"device" forKey:@"value1"]; //pass device ID here...
//[request_zip addRequestHeader:@"Content-Type" value:@"multipart/form-data"];
[request_zip setTimeOutSeconds:20];
[request_zip setDelegate:self];
[request_zip setDidFailSelector:@selector(uploadFailed:)];
[request_zip setDidFinishSelector:@selector(uploadFinished:)];
[request_zip setFile:path forKey:path];
[request_zip startAsynchronous];
NSLog(@"%@ post length",[NSString stringWithFormat:@"%llu",[request_zip postLength]]);

Код при выполнении приводит к следующему выводу в терминале.

Обнаружено неправильное значение NSStringEncoding 0x0000.Предполагая NSStringEncodingASCII.Остановит это поведение сопоставления совместимости в ближайшем будущем.

Длина сообщения, напечатанного в консоли =>

0 Длина сообщения

Наконец, появляется еще одна строка, то есть сообщение об истечении времени ожидания,

Запрос не выполнен: истек срок ожидания запроса с данными ответа

100% уверен, что серверактивен и немедленно отвечает за приложение, запущенное с симулятора.

как можно правильно запустить программу на симуляторе, но не на устройстве?

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Неверное значение NSStringEncoding 0x0000 обнаружено. Если предположить, NSStringEncodingASCII. Остановит это поведение сопоставления совместимости в ближайшее будущее.

Означает, что у вас NSString, который инициализируется без значения NSStringEncoding, проверьте ваши NSString звонки.

Пустое тело в POST в ASIHTTPRequest

Попытка:

NSURL *requestURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@", strURL]];
ASIFormDataRequest *request_zip = [ASIFormDataRequest requestWithURL:requestURL];

NSLog сработает сразу после [request_zip startAsynchronous];, который в это время может быть просто инициализирован, вам нужно переместить запрос журнала в метод делегата, изменить его на [request_zip startSynchronous];, и он будет срабатывать немедленно. 1020 *

Тогда ваш метод делегата будет выглядеть так:

 - (void)requestStarted:(ASIHTTPRequest *)request {
   NSLog(@"%@ post length",[NSString stringWithFormat:@"%llu",[request postLength]]);
}
1 голос
/ 19 июля 2011

Проблема была с концом сервера. Библиотека ASIHTTP работает правильно, когда ASI пытается передать запрос с телом сообщения на сервер, apache не отвечает должным образом, так как, вероятно, отсутствует одна из конфигураций сервера. Владельцы проприетарной веб-библиотеки исправили это позже, и проблема была решена.

Это работало в симуляторе, но не в устройстве, почему?

Он работал в симуляторе, потому что данные передаются через Ethernet, а не по беспроводной сети, поэтому скорость передачи данных была сравнительно высокой.

Разработчики веб-сервисов должны убедиться, что данные получены даже если он поступает из низкоскоростных сетей

**

Библиотека ASI вернула ошибку кодирования ASCII, почему?

**

Эта ошибка возвращается ASI сразу после истечения времени ожидания запроса. Это причина, но настоящая внутренняя проблема с ASI для этой ошибки должна быть выяснена.

Очень интересные результаты получены в конце дня.

...