NSURLConnection没有回应

Chr*_*iet 3 iphone objective-c nsurlconnection nsurlrequest ios5

我正在尝试从URL获取一些数据,但出于某种原因,当我执行以下操作时没有任何反应.无论是didReceiveResponse:,didReceiveData:,didFailWithError:或者connectionDidFinishLoading:是达到了,除非我添加超时通过这样做我的要求:[request setTimeoutInterval:10.0]

这是我正在做的事情:

-(void)getConfigFromServer{
    [self getContentAtURL:kUrlGetUser];
}

//Va chercher le contenu à l'URL passée en paramètre
- (void)getContentAtURL: (NSURL *)url {

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSString * userLogin = [userDefaults objectForKey:@"UserLogin"];
    NSString * userPassword = [userDefaults objectForKey:@"UserPassword"];
    NSURL * urlFinal = [NSURL URLWithString:[NSString stringWithFormat:@"%@", url]];
    NSLog(@"Request : %@", [NSString stringWithFormat:@"%@", url]);
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:urlFinal];  
    [request setHTTPShouldHandleCookies:NO];
    [request setTimeoutInterval:10.0];

    NSString *sourceString = [NSString stringWithFormat:@"%@:%@", userLogin, userPassword]; 
    NSData * sourceData = [sourceString dataUsingEncoding:NSUTF8StringEncoding];  
    NSString *authString = [sourceData base64EncodedString];  

    authString = [NSString stringWithFormat: @"Basic %@", authString];
    [request setValue:authString forHTTPHeaderField:@"Authorization"];
    [request setValue:@"text/xml" forHTTPHeaderField:@"Accept"];
    NSURLConnection * connection=[NSURLConnection connectionWithRequest:request delegate:self];

    if(connection){
        NSLog(@"Connection started");
        receivedData = [NSMutableData data];
    }else{
        NSLog(@"Error while trying to initiate the connection");
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [receivedData setLength:0];
    if ([response respondsToSelector:@selector(statusCode)])
    {
        int statusCode = [((NSHTTPURLResponse *)response) statusCode];
        if (statusCode >= 400)
        {
            [connection cancel];  // stop connecting; no more delegate messages
            NSDictionary *errorInfo
                = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:
                NSLocalizedString(@"Server returned status code %d",@""),
                statusCode]
                    forKey:NSLocalizedDescriptionKey];
            NSError *statusError = [NSError errorWithDomain:@"Error"
                code:statusCode
                userInfo:errorInfo];
            [self connection:connection didFailWithError:statusError];
        }
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    [receivedData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    NSLog(@"Connection failed! Error - %@ %@",[error localizedDescription],[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    [self fetchedData:receivedData];
}
Run Code Online (Sandbox Code Playgroud)

编辑:我仍然有这个问题,现在也在实际的设备上.正如我在评论中所说,我第一次在这个应用程序上使用ARC,而我正在使用XCode 4.2.

任何的想法?

Sri*_*nth 5

这是旧线程但仍然这个答案可能会帮助那里的人.

如果您在后台线程中调用它,请在调用委托之前检查线程是否正在退出.

试试这个.

NSURLConnection * connection = [[NSURLConnection alloc] 
                                initWithRequest:request
                                       delegate:self startImmediately:NO];

[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
                      forMode:NSDefaultRunLoopMode];
[connection start];
Run Code Online (Sandbox Code Playgroud)