【问题标题】:Calling UIAlertView delegate method crashed调用 UIAlertView 委托方法崩溃
【发布时间】:2013-07-21 17:01:04
【问题描述】:

我有一个 viewController 类 A,它有一个创建 UIAlertView 并实现 UIAlertView Delegate 方法的方法,以及一个用于处理日志记录和网络的 NSObject 模型类 B。在B类中,只是分配一个A类实例,然后调用A的方法。警报视图正常显示,但是当我单击“确定”按钮时,它就崩溃了。我想单击“确定”按钮重新打开键盘,让用户在失败后继续登录。 (已经在头文件中声明了 UIAlertView 协议。)

在视图控制器 A 类中:

- (void)displayAlertViewString:(NSString *)string
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Failured!"
                                                    message:string
                                                   delegate:self
                                          cancelButtonTitle:nil
                                          otherButtonTitles:@"Ok", nil];
    [alert show];

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex];

    if ([title isEqualToString:@"Ok"])
    {
        //reopen the keyboard let user continue login.
        [self.passwordField becomeFirstResponder[;
    }

在模型类 B 中,我在 AFNetworkingfailure block 中调用了显示警报视图方法。

failure:^(AFHTTPRequestOperation *operation, NSError *error){
        NSLog(@"%@", error);

        RDLoginViewController *loginViewController = [[RDLoginViewController alloc] init];

        [loginViewController displayAlertViewString:@"The entered email or password was incorrectly!"];

调试器中没有任何信息,Xcode 只是停留在线程视图上。谁能帮我弄清楚?谢谢。

【问题讨论】:

    标签: ios delegates uialertview


    【解决方案1】:

    在执行失败块后,您的loginViewController 会从内存中释放,因为没有人对它有强引用。

    当 alertView 尝试访问它的委托时,它会崩溃,因为它的委托不再在内存中。

    我建议你看看Advanced Memory Management Programming Guide

    【讨论】:

    • 谢谢。我该怎么做才能防止从内存中释放?为什么在失败块执行后,对象应该被释放?
    • 它的发布是因为没有强引用它。这里的答案将取决于您的应用程序的架构。根据您所展示的内容,在触发 AFNetworking 请求的类上创建一个强属性似乎是合理的,而不是在失败块上分配和初始化它。
    • 我在头文件中添加了一个类属性,而不是在success block中初始化类,但仍然崩溃,这是什么问题?
    • 哦,不,类对象正在初始化 success blockfailure block 的 ou,但它们都在一个方法中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多