2015-04-24 23 views
0

我不知道爲什麼我應用程序在這一行應用在IOS

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

崩潰墜毀sendSynchronousRequest這是我的代碼:

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

發佈堆棧跟蹤。 – trojanfoe

回答

0

我不明白爲什麼你的代碼是在NSURLConnection sendSynchronousRequest:崩潰,並且您尚未發佈堆棧跟蹤以驗證該事實,但是此代碼可能會崩潰(如果strSessionIdnil):

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

和驗證碼崩潰:

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

(使用removeObjectForKey:從用戶默認刪除對象。)

而且這是非常差:

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

(測試代替[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)。