iPhone应用程序随机崩溃,exc\u访问错误
我有一个有四个标签的应用程序。在我使用nsurlconnection连接到远程服务器的每个选项卡中,获取响应并相应地显示。在测试应用程序时,我会随机崩溃。如果我试图再次复制崩溃,我不会崩溃。我不明白坠机的根本原因是什么。我启用了NSZombie,用符号表示崩溃日志,检查了内存泄漏,但没有运气 我在Xcode 3中启动了这个项目,现在我将同一个项目导入了Xcode 4.2,那么Xcode的兼容性有什么问题吗 我在所有选项卡中使用相同的名称作为nsurlconnection,如 在表1中,我将nsurlconnection定义为conn,表2将nsurlconnection定义为conn 这个定义会引起任何问题吗 请帮我解决这个问题iPhone应用程序随机崩溃,exc\u访问错误,iphone,ios,exc-bad-access,Iphone,Ios,Exc Bad Access,我有一个有四个标签的应用程序。在我使用nsurlconnection连接到远程服务器的每个选项卡中,获取响应并相应地显示。在测试应用程序时,我会随机崩溃。如果我试图再次复制崩溃,我不会崩溃。我不明白坠机的根本原因是什么。我启用了NSZombie,用符号表示崩溃日志,检查了内存泄漏,但没有运气 我在Xcode 3中启动了这个项目,现在我将同一个项目导入了Xcode 4.2,那么Xcode的兼容性有什么问题吗 我在所有选项卡中使用相同的名称作为nsurlconnection,如 在表1中,我将nsu
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: url];
conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(label != nil){
progressView = [[ProgressView showHUDAddedTo:self.tabBarController.view animated:YES] retain];
progressView.labelText = label;
}
[request release];
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"didReceiveresponse");
if ([response isKindOfClass: [NSHTTPURLResponse class]]) {
if([(NSHTTPURLResponse *)response statusCode] == 200){
}
else{
//show Connection Error Alert
}
}
responseData = [[NSMutableData alloc]init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSLog(@"didReceiveData");
[responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[progressView hide:YES];
NSLog(@"didFail");
//show failed alert
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"didfinish loading");
if([responseData length] > 0)
{
//handles response data
}
}
我猜在没有看到代码的情况下,会在一个选项卡中创建一个NSURLConnection,并在完成后对结果进行处理。如果在返回结果之前更改选项卡,则会导致其崩溃 当VIEWDID消失时,您需要取消NSURLConnection,或者确保在完成后运行的任何代码都不包含任何可能导致崩溃的内容,如果选项卡不可见(如设置标签文本)
我处理这个问题的方法是使用一个单独的类来执行URL请求,该请求在完成时发送通知。这样,在ViewDidDisplay方法中,您可以将viewController设置为侦听通知,而在viewDidDisapper方法中,您可以停止侦听通知。因此,如果URL请求完成时您的视图不可见,则会触发通知,但不会发生任何事情。能否提供控制台的输出?这似乎不是来自Xcode的错误。
这些类型的错误通常在您尝试访问解除分配的对象时出现。我确信您尝试过内存泄漏的工具。尝试使用僵尸工具使用仪器,您可以在仪器库中轻松找到它。 使用此工具运行代码,如果此崩溃是由于任何僵尸对象造成的,那么您将很容易检测到位置
它帮了我好几次。分段故障11崩溃主要发生在从相机拍摄图像时。在哪里取消nsurlconnection?在阅读更多有关它的内容后,您可能无法取消请求。因此,您需要做的是确保当请求完成时,它什么也不做,因为我猜目前它正在尝试更新另一个选项卡上的UI?NSMutableURLRequest*request=[[NSMutableURLRequest alloc]initWithURL:url];conn=[[NSURLConnection alloc]initWithRequest:request委托:self];iLabel!=nil{progressView=[[progressView showhuddedto:self.tabBarController.view animated:YES]retain];progressView.labelText=label;}[request release];啊,您添加了一个HUD,因此用户在完成此操作之前无法切换视图?如果您的HUD是一个模式视图,因此用户在URL请求完成之前无法切换选项卡,那么这不是问题所在。