2012-03-14 2 views
0

Я пытаюсь отправить почту с помощью JSON NSURLConnection:NSURLConnection замораживать

NSURL *url = [NSURL URLWithString:urlStr]; 

NSString *jsonPostBody = [NSString stringWithFormat:@"{\"user\":""\"%@\""",\"pass\":""\"%@\""",\"listades\":\"\"}", 
          [username stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding], 
          [password stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
NSLog(@"JSNON BODY:%@", jsonPostBody); 
NSData *postData = [jsonPostBody dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; 
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url 
                 cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
                timeoutInterval:10.0]; 
[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:postData]; 
[request setTimeoutInterval:2.0]; 
NSString* postDataLengthString = [[NSString alloc] initWithFormat:@"%d", [postData length]]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:postDataLengthString forHTTPHeaderField:@"Content-Length"]; 

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

исполнение App получает замораживание, когда он достигнет команды соединения, несмотря на тайм-аут.

Я застрял в этой проблеме, и я не могу найти решение.

Большое спасибо

+0

Что, если таковые имеются, 'методы NSURLConnectionDelegate' называются? – FluffulousChimp

ответ

1

Это замораживает ваше приложение, потому что вы прошли ДА в startImmediately. Это заморозит приложение до тех пор, пока запрос не будет завершен.

Вам нужно использовать что-то вроде connectionWithRequest: delegate: - это запустит запрос в фоновом режиме и скажет вам, когда это будет сделано.

NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 
+0

Большое спасибо, я попробую все ваши предложения. – roof

2
-(void) jsonRESTWebServiceMethod:(NSString*)method WithParameter:(NSMutableDictionary*)params{ 
    self.iResponseType = JSONTYPE; 
    NSMutableDictionary *bodyDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:method,@"name",params,@"body",nil,nil]; 
    NSData *data = [[CJSONSerializer serializer] serializeObject:bodyDict error:nil]; 
    NSString *strRequest = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; 
    strRequest = [NSString stringWithFormat:@"json=%@",strRequest]; 
    NSData *body = [strRequest dataUsingEncoding:NSUTF8StringEncoding]; 
    NSString *strURL = [NSString stringWithString:WebServiceURL]; 
    NSString* escapedUrlString = [strURL stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 

    NSMutableURLRequest *request= [NSMutableURLRequest requestWithURL:[NSURL URLWithString:escapedUrlString]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:body]; 
    NSString *msgLength = [NSString stringWithFormat:@"%d",strRequest.length]; 
    [request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField: @"Content-Type"]; 
    [request addValue:msgLength forHTTPHeaderField:@"Content-Length"]; 

    if (mydata) { 
     [mydata release]; 
     mydata = nil; 
    } 
    conections = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    mydata = [[NSMutableData alloc] init]; 
} 
+0

Большое спасибо, я попробую все ваши предложения. – roof