代码之家  ›  专栏  ›  技术社区  ›  user1904273

ios/xcode:UIAlert不停止操作并单击“确定”崩溃应用程序

  •  0
  • user1904273  · 技术社区  · 11 年前

    在将一些内容保存到核心数据后,我想显示一个警告,感谢用户。当用户单击“确定”时,我希望关闭执行保存的模态视图控制器。

    然而,警报并没有停止控制器的关闭,而且当你点击ok时,应用程序会崩溃。我的理解是,当控制器不存在时,这些崩溃可能会发生。然而,在这种情况下,我将在解除控制器之前启动警报。

    有人能发现出了什么问题吗?

    如有任何建议,将不胜感激。

    代码:

    if ([self.managedObjectContext save:&error]) {
                [self fireAlert];
                // Dismiss View Controller
                [self dismissViewControllerAnimated:YES completion:nil];
    
            } else {
                if (error) {
                    NSLog(@"Unable to save record.");
                    NSLog(@"%@, %@", error, error.localizedDescription);
                }
             }
    
    -(void) fireAlert {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Thank you!" message:@"We appreciate your feedback" delegate:self
                                                   cancelButtonTitle:@"OK" otherButtonTitles:nil];
    
        [alert show];
    }
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   SpaceDust__    11 年前

    您正在解除视图控制器,因此 delegate:self 导致撞车的原因是

    [self dismissViewControllerAnimated:YES completion:nil];
    

    self 不再可用。它被解除分配,向解除分配的对象发送消息导致崩溃。

    尝试制作 delegate:nil 如果你不想使用 UIAlertView 委托方法。

    或使用委托方法,确保 UIViewController <UIAlertViewDelegate>

    那就做吧

    if ([self.managedObjectContext save:&error]) {
                [self fireAlert];
    
            } else {
                if (error) {
                    NSLog(@"Unable to save record.");
                    NSLog(@"%@, %@", error, error.localizedDescription);
                }
             }
    
    -(void) fireAlert {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Thank you!" message:@"We appreciate your feedback" delegate:self
                                                   cancelButtonTitle:@"OK" otherButtonTitles:nil];
    
        [alert show];
    }
    - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
    {
       // Dismiss View Controller
       [self dismissViewControllerAnimated:YES completion:nil];
    }
    
    推荐文章