2015-04-24 3 views
0

Я не знаю, почему мой приложение падает в этой строкеприложение разбился sendSynchronousRequest в ИОС

NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

Это мой код:

NSString * urlString = [[NSUserDefaults standardUserDefaults] objectForKey:MAINURL]; 

NSHTTPURLResponse * response; 
NSError * error; 
NSMutableURLRequest *request; 

request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlString] 
            cachePolicy:NSURLRequestReloadIgnoringCacheData 
            timeoutInterval:120]; 

if([[[NSUserDefaults standardUserDefaults] objectForKey:@"callWebServiceFor"] isEqualToString:nil]) { 
    // [request setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"]; 

    NSString * strSessionId = [[NSUserDefaults standardUserDefaults] objectForKey:@"sessionId"]; 
    if(strSessionId != nil) 
     [request setValue:strSessionId forHTTPHeaderField:@"Cookie"]; 
} 
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
// Storing session headers when user logs in successfully 
if([[[NSUserDefaults standardUserDefaults] objectForKey:@"callWebServiceFor"] isEqualToString:@"login"]) { 
    NSArray * all = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:urlString]]; //testing 
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:all forURL:[NSURL URLWithString:urlString] mainDocumentURL:nil]; 
    NSString * strSessionId; 
    for (NSHTTPCookie *cookie in all) { 
     strSessionId = [[NSString alloc] initWithString:cookie.value]; 
     // NSLog(@"Session value: %@",cookie.key]; 
     // NSLog(@"Session value: %@",strSessionId); 
    } 
    [[NSUserDefaults standardUserDefaults] setObject:strSessionId forKey:@"sessionId"]; 
    [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"callWebServiceFor"]; 
} 
if (data != nil) { 
    dispatch_async(kBackGroudQueue, ^{ 
     [self performSelectorOnMainThread:@selector(handleWebServiceResponse:) 
           withObject:data waitUntilDone:YES]; 
    }); 
} else { 
    [SwapweekUtilViewController showAlert:@"Internet" :@"Check your Internet Connection"]; 
} 
+0

Даже не содержит никаких ошибок. –

+0

Опубликовать stacktrace. – trojanfoe

ответ

0

Я не могу понять, почему ваш код врезаться в NSURLConnection sendSynchronousRequest:, и вы еще не опубликовали stacktrace, чтобы проверить этот факт, однако этот код может произойти сбой (если strSessionId равен nil):

[[NSUserDefaults standardUserDefaults] setObject:strSessionId forKey:@"sessionId"]; 

и этот код будет аварии:

[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"callWebServiceFor"]; 

(Использование removeObjectForKey: для удаления объекта из пользователя по умолчанию.)

Кроме того, это очень плохо:

if([[[NSUserDefaults standardUserDefaults] objectForKey:@"callWebServiceFor"] isEqualToString:nil]) { 

(Test для [NSString length] == 0.)

Это слишком бедна:

for (NSHTTPCookie *cookie in all) { 
    strSessionId = [[NSString alloc] initWithString:cookie.value]; 
    // NSLog(@"Session value: %@",cookie.key]; 
    // NSLog(@"Session value: %@",strSessionId); 
} 

(break когда у вас есть непустое strSessionId и просто сделать strSessionId = cookie.key; вместо этого initWithString).

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