2014-10-12 3 views
0

я следовал на эти вопросы и учебные пособия:Почему мой метод делегата никогда не вызван?

Но я до сих пор что-то отсутствует. Мой делегат метод

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

вызывается все время, занимает немного времени немного, и я предполагаю, что это из-за скорости интернета, но метод

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data 

никогда не вызывается. Что мне не хватает? Пожалуйста, помогите мне.

Мой код:

-(void)loadDataBase{ 
    NSString *post = [NSString stringWithFormat:@"advnr=123"]; 
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://thewebsite.abc/interface.php"]]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:postData]; 
    NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 
    //return @""; 
} 

#pragma mark - 
#pragma mark NSURLConnection delegates 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data { 
    NSLog(@"Success"); // never gets executed 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    NSLog(@"didFinished"); 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    NSLog(@"FAILED"); 
} 
+0

Этот метод делегата вызывать только тогда, когда возвращение вебсервис данных, вы уверены, что you'r отправлять запрос возвращает другие данные чем 200 HTTP-заголовков? –

+0

Да, когда я тестирую его с помощью своей тестовой формы html, я всегда получаю данные, которые мне нужны на экране. –

ответ

0

Я подозреваю, что там действительно нет данных возвращается (либо из-за какой-то ошибки веб-службы или неправильно подготовленного запроса).

Вы можете использовать Charles для наблюдения за запросом и ответом, чтобы подтвердить это, если хотите. BTW, Charles или любой такой инструмент - это полезное оружие для добавления в ваш арсенал, поскольку он значительно упрощает диагностику проблем HTTP, изолируя связанные с сетью проблемы от проблем программирования на стороне клиента.

Независимо, если вы получаете такие ошибки, вы часто получите не-200 statusCode, возвращенный сервером. См. list of HTTP status codes.

Вы можете проверить это также осуществляет didReceiveResponse и проверить заголовок ответа:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse*)response { 
    if ([response isKindOfClass:[NSHTTPURLResponse class]]) { 
     int statusCode = [(NSHTTPURLResponse *)response statusCode]; 
     if (statusCode != 200) { 
      NSLog(@"Status code = %ld; response = %@", (long)statusCode, response); 

      // handle this error however you'd like 
     } 
    } 

    // temporarily, you might even want to log the whole `response` regardless of the status code 
    NSLog(@"%s: %@", __PRETTY_FUNCTION__, response); 
} 
+0

Я получаю '{код состояния: 200, заголовки { Connection = close; «Content-Length» = 0; "Content-Type" = "text/html"; Дата = "Вс, 12 октября 2014 19:21:08 GMT"; Сервер = "Apache/2.2.22"; "X-Powered-By" = "PHP/5.3.26"; }} ', но я не могу понять, почему ... Если я использую html-тестовую форму, я всегда получаю свои данные. –

+0

Это обнадеживает. Мы хотим увидеть '200'. Итак, следующий вопрос: действительно ли сервер ничего не возвращает или нет. Именно здесь Чарльз становится бесценным. – Rob

+0

Длина содержимого 0 ... это означает, что я не получаю данных, не так ли? –

Смежные вопросы