2017-07-31 98 views
-1

iOS應用終止於Xcode模擬器中的connectionDidFinishLoading以下一行代碼。iOS應用終止於connectionDidFinishLoading

NSMutableDictionary *dict = [parser objectWithString:[[NSString alloc] initWithData:dataForConnection encoding:NSUTF8StringEncoding] error:nil]; 

繼此功能

- (void)connectionDidFinishLoading:(NSURLConnection*)connection { 
NSMutableData *dataForConnection = [self dataForConnection:(URLConnection*)connection]; 
NSInteger statusCode=[((URLConnection*)connection).response statusCode]; 
NSString *tag=((URLConnection*)connection).tagKey; 

[self removeReceivedDataHandle:tag]; 

if (statusCode != 200 && statusCode!=204 && statusCode!=405){ 
    [reportActivityIndicator stopAnimating]; 
    [transactionsActivityIndicator stopAnimating]; 
    [swipeHQCheckout showMessage:PHRASE_ServerCommunicationError]; 
    return; 
} 

if ([reports count] == 0) { 
    [self removeReceivedDataHandle]; 
    [transactionsActivityIndicator stopAnimating]; 
    return; 
} 

SBJsonParser *parser = [[SBJsonParser alloc] init]; 
[reports removeObject:tag]; 

if ([tag isEqualToString:API_TransactionReport] || 
    [tag isEqualToString:API_FetchTransactions]) { 
    NSMutableDictionary *dict = [parser objectWithString:[[NSString alloc] initWithData:dataForConnection encoding:NSUTF8StringEncoding] error:nil]; // here issue 

    NSString *response_code=[dict objectForKey:@"response_code"]; 
// more code down here 
} 

可能是什麼問題,先進的感謝您的建議的更多的代碼。

+0

你能發佈錯誤/崩潰信息嗎? –

+0

對不起@ParasGorasiya因爲我在這方面很新,你能否請建議如何檢查崩潰信息?控制檯中沒有關於此的任何內容。 – Yas

+0

如果您的應用程序崩潰/終止,您應該在控制檯上看到崩潰的原因,否則難以回答,或者您可能希望發佈更多代碼以獲得有關該問題的詳細信息。 –

回答

0

看來你NSMutableData dataForConnection來了零和正在初始化的NSMutableDictionary與零值

爲了避免碰撞:

if (dataForConnection != nil){ 
    NSMutableDictionary *dict = [parser objectWithString:[[NSString alloc] initWithData:dataForConnection encoding:NSUTF8StringEncoding] error:nil]; 
}else{ 
    NSLog(@"NO Data"); 
} 
+0

謝謝你的回答。我在錯誤發生之前這樣做了,但它仍然存在。以下是代碼 'if(dataForConnection == nil){NSLog(@「No Data」);其他{ }其他{ NSLog(@「Data」); NSLog(@「%@」,dataForConnection);錯誤:nil]; [解析器] [object_WithString:[[NSString alloc] initWithData:dataForConnection encoding:NSUTF8StringEncoding] error:nil]; // error here' 它在else塊之後的行上顯示數據,然後顯示EXC_BAD_ACCESS。 – Yas

+0

它顯示'NSLog(@「%@」,dataForConnection)上的錯誤;'線。 EXC_BAD_ACCESS。 – Yas

+0

爲什麼你把NSMutableDictionary * dict = [parser objectWithString:[[NSString alloc] initWithData:dataForConnection encoding:NSUTF8StringEncoding] error:nil];在其他支架後。它必須在其他地方 –

0

您應該遵循最佳的方法開始添加復練習,就像

if (dataForConnection == nil){ 
     NSLog(@"NO Data"); 
     return; 
}else{ 
    //Do whatever you want to do 
} 
+0

謝謝你的回答。我在錯誤發生之前這樣做了,但它仍然存在。以下是代碼 'if(dataForConnection == nil){NSLog(@「No Data」);其他{ }其他{ NSLog(@「Data」); NSLog(@「%@」,dataForConnection);錯誤:nil]; [解析器] [object_WithString:[[NSString alloc] initWithData:dataForConnection encoding:NSUTF8StringEncoding] error:nil]; // error here' 它在else塊之後的行上顯示數據,然後顯示EXC_BAD_ACCESS。 – Yas

+0

它顯示'NSLog(@「%@」,dataForConnection)上的錯誤;'線。 EXC_BAD_ACCESS。 – Yas

+0

您是否在connectionDidFinishLoading方法的第一行之後添加了答案中顯示的代碼?你也應該增加回報;如果阻止呼叫。 –

相關問題