用户点击UIAlertview上的按钮后,我尝试使用手机应用程序拨号。手机应用程序确实打开了,但是原始应用程序在点击UIAlertview上的按钮后立即崩溃。有人知道原因吗?我确实尝试确保发布了应该发布的所有内容。谢谢!以下是代码:
-(IBAction)dialButtonPressed:(UIButton *)numberButton
{
if ([company isEqualToString:@"Not Found"]==true){
message = [[UIAlertView alloc] initWithTitle:@"Sorry"
message:@"No replace number found. Would you like to dial anyway?"
delegate:self
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes", nil];
message.tag = 0;
if(phoneLinkString)
{
[phoneLinkString release];
phoneLinkString = nil;
}
[message show];
[message autorelease];
phoneLinkString = [[NSString stringWithFormat:@"tel:%@",replace]retain];
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
[self release];
message = nil;
if(message.tag == 0 && buttonIndex == 1){
NSURL *phoneLinkURL = [NSURL URLWithString:phoneLinkString];
[[UIApplication sharedApplication] openURL:phoneLinkURL];
}
- (void)dealloc {
[phoneNumberString release];
[phoneNumberLabel release];
[self release];
[message release];
[super dealloc];
}
最新代码
-(IBAction)dialButtonPressed:(UIButton *)numberButton
{
if ([company isEqualToString:@"Not Found"]==true){
message = [[UIAlertView alloc] initWithTitle:@"Sorry"
message:@"No replace number found. Would you like to dial anyway?"
delegate:self
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes", nil];
message.tag = 1;
if(phoneLinkString)
{
[phoneLinkString release];
phoneLinkString = nil;
}
[message show];
[message autorelease];
phoneLinkString = [[NSString stringWithFormat:@"tel:%@",replace]retain];
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(message.tag == 1 && buttonIndex == 1){
NSURL *phoneLinkURL = [NSURL URLWithString:phoneLinkString];
[[UIApplication sharedApplication] openURL:phoneLinkURL];
message = nil;
}
}
- (void)dealloc {
[phoneNumberString release];
[phoneNumberLabel release];
[super dealloc];
}
但是在点击UIAlertview上的按钮后它仍然崩溃了。错误是0x3beb85b0:ldr r3,[r4,#8] EXC_BAD_ACCESS(代码= 1,地址= 0x7269634f)任何帮助将不胜感激。谢谢!
答案 0 :(得分:3)
问题可能是您在if语句之前将警报设置为nil。试着把它放在后面。
答案 1 :(得分:3)
由于此代码,崩溃正在发生。 [self release];
。
当您致电self
release
时,显示警报的视图将被释放并取消分配,而不是alertView。这是崩溃的原因。
您已使用dialButtonPressed:
[message autorelease];
方法中发布alertViews内存
因此无需在clickedButtonAtIndex
中再次发布alertView。所以改变方法如:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
if(alertView.tag == 0 && buttonIndex == 1)
{
NSURL *phoneLinkURL = [NSURL URLWithString:phoneLinkString];
[[UIApplication sharedApplication] openURL:phoneLinkURL];
}
message = nil;
}
答案 2 :(得分:2)
您的崩溃是由内存管理不善引起的。主要问题是调用[self release]
。这是一个非常罕见的情况,这是合适的。
另一个问题是,您在message.tag
设置为message
后尝试检查nil
。在tag
对象上调用nil
属性将始终生成值0.
你的dealloc方法都错了。不要致电[self release]
。不要打电话给[message release]
,因为你在展示它时会自动释放它。
顺便说一句 - 从不使用0的tag
。这是默认值。如果要使用tag
,请始终使用非零值,以便将值与默认值区分开来。