2012-05-13 93 views
1

我遵循Using NSURLConnection的指示,有時(非常非常少)我的項目在方法中崩潰。NSURLConnection在發佈NSMutableData時崩潰

- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    [connection release]; 
    [myNSMutableData release]; 
} 

當我試圖釋放我的NSMutableData時,它崩潰。 我想知道它爲什麼崩潰!

一些代碼,我用:

- (void) start 
{ 
    while (1) 
    { 
     NSString *stringURL = @"http://www.iwheelbuy.com/get.php?sex=1"; 
     NSURL *url = [NSURL URLWithString:stringURL]; 
     NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0]; 
     NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
     if (connection) 
     { 
      getData = [[NSMutableData data] retain]; 
      break; 
     } 
     else 
     { 
      NSLog(@"no start connection"); 
     } 
    } 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    if ([connection.originalRequest.URL.absoluteString rangeOfString:@"get.php"].location != NSNotFound) 
    { 
     [getData setLength:0]; 
    } 
} 

- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    if ([connection.originalRequest.URL.absoluteString rangeOfString:@"get.php"].location != NSNotFound) 
    { 
     [connection release]; 
     [getData release]; 
    } 
} 

- (void) connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    if ([connection.originalRequest.URL.absoluteString rangeOfString:@"get.php"].location != NSNotFound) 
    { 
     [connection release]; 
     NSString *html = [[NSString alloc] initWithData:getData encoding:NSASCIIStringEncoding]; 
     [getData release]; 
     if ([html rangeOfString:@"id1="].location != NSNotFound && [html rangeOfString:@"id2="].location != NSNotFound) 
     { 
      NSLog(@"everything is OKAY"); 
      [html release]; 
     } 
     else 
     { 
      [html release]; 
      [self start]; 
     } 
    } 
} 
+1

顯示來自崩潰的控制檯輸出和崩潰報告或堆棧跟蹤。另外,運行殭屍工具下的應用程序。 –

+0

我一直試圖得到一些崩潰報告,但仍然沒有成功。我不知道什麼是殭屍工具... – iWheelBuy

+0

我的應用程序運行在殭屍下,接下來應該怎麼做? – iWheelBuy

回答

1

您的代碼正在執行異步調用。每次調用start方法時,都會創建NSURLConnection對象的新實例,但只有一個對象(getData)用於數據。考慮一些如何有兩個同時調用和第一個失敗它釋放你的連接和getData對象,當第二個失敗它釋放你的連接對象成功,但你的getData對象已被釋放在以前的失敗調用導致你的代碼崩潰。

要解決這個問題,在您釋放它們並在必要時執行無檢查後,始終將您的對象設置爲零。

0

你需要釋放getData而不是myNSMutableData

+0

那是一個例子 – iWheelBuy

+0

好的。它是否有時只發生?有時只有 – rishi

+0

!一旦從100「開始」方法調用 – iWheelBuy