以下是在视图控制器中显示警报的代码
-(void)saveProducts {
pData = [[JsonModel sharedJsonModel] prodData];
if ([pData count] == 0 && [self respondsToSelector:@selector(alertView:clickedButtonAtIndex:) ] ) {
alert = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"No products against this category" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
[self.tblView reloadData];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0) {
[self.navigationController popViewControllerAnimated:YES];
[actInd stopAnimating];
}
}
但在慢速网络中,警报会慢慢来。如果我们同时单击导航栏的后退按钮,则弹出导航控制器并在新视图控制器中显示警报。但是,当我点击确定时,应用程序突然崩溃,出现EXC_BAD_ACCESS错误。 我也试过
didDismissWithButtonIndex
而不是
clickedButtonAtIndex
但同样的错误发生了。请帮帮我
如果我们没有点击后退栏按钮,它会正常工作。只有当第一个视图控制器警报显示在第二个视图控制器中时才会出现问题
修改 这是错误报告 * - [ProductsListing alertView:didDismissWithButtonIndex:]:消息发送到解除分配的实例0x8478280
修改 我理解这个问题。当我单击后退按钮时,我的警报委托取消分配并委派调用结果错误。我怎么能克服这个?
答案 0 :(得分:2)
我最好的猜测是'self.navigationController'或'actInd'已经发布了。此外,您的'UIAlertView'会泄漏内存(除非您使用ARC)。使用Instruments对应用程序进行配置,选择“Zombies”工具,看看它是什么。
答案 1 :(得分:0)
根据你的描述,这里的问题可能是这个(一个疯狂的猜测)
[actInd stopAnimating];
删除(弹出)viewController后调用。actInd
可能没有有效的内存,因此崩溃
像这样更改方法内容并检查
if (buttonIndex == 0) {
[actInd stopAnimating];
[self.navigationController popViewControllerAnimated:YES];
}
快乐编码:)
答案 2 :(得分:0)
我相信你必须改变
[alert show];
到
if(self.view.window){
[alert show];
}
这样,仅当控制器(视图)仍在屏幕上时才会出现警报。(为什么让用户看到来自上一屏幕的警报?) 如果您希望警报仍然出现......那么“旧”控制器必须通知“新”控制器发生问题...现在它是新控制器的工作以通知用户。
或者你可以尝试改变这部分
[self.navigationController popViewControllerAnimated:YES];
[actInd stopAnimating];
到
if(self.view.window){
[self.navigationController popViewControllerAnimated:YES];
[actInd stopAnimating]; // im not sure where the animation is...so not sure if this shoulb be in here or not
}