После того, как я весь день стучу в голову, я дошел до StackOverflow, чтобы протащить меня.
Я делаю NSURLRequest в своем приложении для iPhone ...
NSURL* url = [[self serviceUrl] URLByAppendingPathComponent:[NSString stringWithFormat:@"Json"]];
NSString* json = [NSString stringWithFormat:@"{\"id\":\"%@\"}", id];
NSMutableURLRequest* urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[urlRequest setHTTPBody:[json dataUsingEncoding:NSUTF8StringEncoding]];
этовозвращает мне строку JSON, которая возвращается ко мне, но она не работает, поскольку строка не будет анализироваться правильно.
Однако, если я сделаю обычный запрос на тот же URL в браузере Safari, то JSONвозвращается правильно.Я проверяю этот JSON здесь .
Так в чем же дело?Существует ли ограничение длины данных в NSString *, при котором файл json размером 32 КБ не будет правильно храниться в памяти?Иногда JSON может быть проанализирован, и это заставляет меня поверить, что я неправильно очищаю строку JSON после каждого запроса.
_json = [[NSString alloc] initWithData:_dataResponse encoding:NSUTF8StringEncoding];
NSArray* retrievedData = (NSArray*)[_json JSONValue];
// removed for brevity
_json = @"";
Другая информация, я использую ASP.NET MVC 3 для предоставления веб-сервисовдля этого приложения.
РЕДАКТИРОВАТЬ
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse
{
_loader.hidden = NO;
[_loadingIndicator startAnimating];
return request;
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
_dataResponse = [[NSMutableData alloc] init];
[_dataResponse setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[_dataResponse appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"Error receiving response: %@", error);
_loader.hidden = YES;
[_loadingIndicator stopAnimating];
}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection
{
_json = [[NSString alloc] initWithData:_dataResponse encoding:NSUTF8StringEncoding];
// Removed for brevity
_json = @"";
_loader.hidden = YES;
[_dataResponse release];
_dataResponse = nil;
[_loadingIndicator stopAnimating];
}
ЗАКЛЮЧИТЕЛЬНОЕ РЕШЕНИЕ
Я делал несколько вызовов, чтобы данные уже сохранялись для представлений, чтобы переключать представления в контроллере панели вкладок,Я не проверял соединение во время добавления данных, я проверял соединение, когда оно было закончено, чтобы правильно хранить данные.Мое окончательное решение состояло в том, чтобы сделать каждый вызов синхронно после предыдущего во время завершенного вызова метода.