NSURLConnection добавляет случайные символы в ответ - PullRequest
1 голос
/ 05 мая 2011

В одном месте моего приложения я инициализирую асинхронный запрос, используя NSURLConnection:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:[self.URLs objectForKey:@"API URL"]]
    cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
apiConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[request release];

и получите результат:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    if (responseData == nil) {
        responseData = [[NSMutableData alloc] init];
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [responseData appendData:data];
    NSLog(@"%s", [data bytes]);
}

Проблема в том, что иногда случайные данные добавляются к фактическим данным, возвращаемым сервером. Иногда сообщение журнала, а также фактический вывод (после преобразования в объект NSString в connectionDidFinishLoading:connection) содержат некоторую часть некоторого заголовка, «CFNetwork» или просто произвольные байты / символы.

Это известная ошибка? Кто-нибудь сталкивался с этим раньше и знает, как обойти это? Есть что-то, что я могу делать не так?

1 Ответ

1 голос
/ 05 мая 2011

Вам нужно добавить символ '0', чтобы ограничить строку, если вы используете ее как c-String (нулевой терминатор).

Из одного из моих проектов:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
   char temp[] = {0};
   [receivedData appendBytes:temp length:1];

   // etc your usual code here
}

дал мне много головных болей тоже.

...