У меня есть веб-сайт rails 3.0.3, который в режиме разработки отвечает на HTTP GET, вызывая didReceiveData, а затем connectionDidFinishLoading, а данные фотографий отправляются с веб-сайта на iPhone и отображаются правильно. Но когда я запускаю веб-сайт rails 3.0.3 в производственном режиме на Amazon Web Services, connectionDidFinishLoading вызывается до didReceiveData. Я использую операторскую волну для обработки фотографий как для разработки, так и для производства рельсов.
Кто-нибудь знает, что может вызвать вызов connectionDidFinishLoading до didReceiveData?
Я пытался проверить следующее:
1) Я убедился, что NSURLConnectionDelegate вызывается для интерфейса класса.
2) didReceiveResponse не вызывается до подключенияDidFinishLoading и statusCode = 200.
3) В приложении rails я использую send_file для отправки данных фотографии, а путь к файлу, отправленному в производство, является реальной фотографией.
4) Проверка с полным запросом к веб-сайту показала, что с производственного веб-сайта возвращается 0 байт данных с использованием приведенного ниже кода в connectionDidFinishLoading (это оказалось причиной того, что didReceiveData не вызывался):
NSData *returnedData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://production_website"]];
Вот код для didReceiveData:
// theConnectionData is an instance variable defined as:
NSMutableData *theConnectionData = [[NSMutableData data] retain];
-(void)connection:(NSURLConnection *)con didReceiveData: (NSData *)data {
[theConnectionData appendData:data ];
}
Обновление. Я думаю, что проблема может быть на стороне рельсов. Вот код, который я использую для отправки фотографии из приложения rails из локального хранилища на AWS в приложение для iPhone:
@p = Photo.find_by_user_id(user_id)
uploader = @p.avatar
uploader.retrieve_from_store!(File.basename(@p.avatar.url))
uploader.cache_stored_file!
send_file(uploader.file.path,
:disposition => 'inline',
:encoding => 'binary',
:type => @p.content_type,
:stream => false,
:filename => URI.encode(@p.filename),
:x_sendfile => true,
:buffer_size => 16384
)
Кто-нибудь знает, почему didReceiveData не вызывается перед connectionDidFinishLoading для веб-сайта производства рельсов?
didReceiveData
даже послеconnectionDidFinishLoading
? На самом деле сервер ничего не вызывает, это ваш NSURLConnection, который информирует своего делегата о своем статусе. Вы загружаете свои фотографии по одной? возможно, несколько журналов NSURLConnection перекрываются в консоли. - person teriiehina   schedule 28.02.2012