appdelegate.m 中的 UIAlertView 不起作用

Posted

技术标签:

【中文标题】appdelegate.m 中的 UIAlertView 不起作用【英文标题】:UIAlertView in appdelegate.m does not work 【发布时间】:2011-12-22 08:40:03 【问题描述】:

我已经在谷歌上搜索了将近一整天的时间,但没有找到任何解决方案,所以我想问你们.. :)

我正在开发一个 ios 应用程序,该应用程序应通过 WiFi 连接到 mbed,并在连接时为用户提供一个对话框,如果未连接,则为用户提供重试的可能性。 我的问题是现在我已经在 appdelegate.m 中实现了连接方法,我想从这里显示警报..

它自己的警报工作正常,但是我在检测按下按钮时遇到问题,没有调用 clickedButtonAtIndex。

我在 appdelegate.h 中添加了 UIAlertViewDelegate,如下所示:

@interface AppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate, UIAlertViewDelegate> 

并在警报视图中将委托设置为 self,如下所示:

alert_NOT = [[UIAlertView alloc] initWithTitle:@"Not connected!" message:message_to_user delegate:self cancelButtonTitle:@"Try again" otherButtonTitles: nil];
    [alert_NOT show];
    [alert_NOT release]

clickedButtonAtIndex 看起来像

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
NSLog(@"test");

因此,当在警报视图中按下按钮时,我希望在日志中看到“测试”一词,但没有任何反应。

更新: 尝试在我的“FirstViewController.m”中实现它并且它在那里工作:S 但如果可能的话,我非常希望将它放在 appdelegate.m 中..

【问题讨论】:

【参考方案1】:

我目前正在研究类似的实现,并想与您分享一个想法:也许使用 NSNotification 在您的委托条件得到满足时触发,可以在您的 VC 中侦听并处理适当地,在堆栈顶部带有警报视图。

【讨论】:

【参考方案2】:
@interface urAppDelegate : NSObject <UIApplicationDelegate,UIAlertViewDelegate>

如果你合成了alert_not,那么将它与 self 一起使用:

self.alert_NOT = [[UIAlertView alloc] initWithTitle:@"Not connected!" message:message_to_user delegate:self cancelButtonTitle:@"Try again" otherButtonTitles: nil];

[alert_NOT show];
[alert_NOT release];

【讨论】:

嗯,还是什么都没有。在 UIAlertView 的声明中,委托被设置为 self。 那也无济于事。我设法自己解决了这个问题,方法是在我的视图控制器中实现警报系统,该系统与我的代码一起使用,然后从我的 appdelegate 请求所需的方法.m . 像魅力一样工作。但是非常感谢您的快速响应..【参考方案3】:

您应该为此使用 alertViewCancel 方法。

- (void)alertViewCancel:(UIAlertView *)alertView

    NSLog(@"text");

【讨论】:

【参考方案4】:

定义如下:

#define appDelegate ((AppDelegate*)[UIApplication sharedApplication].delegate)

并警告为:

UIAlertView *alert_NOT = [[UIAlertView alloc] initWithTitle:@"Not connected!" message:message_to_user delegate:appDelegate cancelButtonTitle:@"Try again" otherButtonTitles: nil];
[alert_NOT show];

这里将delegate设置为定义的关键字,即appDelegate。

希望这会有所帮助。

【讨论】:

以上是关于appdelegate.m 中的 UIAlertView 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

AppDelegate.m 文件中的两个包冲突

从 AppDelegate.m 中的 applicationDidEnterBackground 中去掉键盘

appdelegate.m 中的 UIAlertView 不起作用

如何从 Xcode 中的 AppDelegate.m 文件更新 UILabel 的文本?

在 AppDelegate 中使用 ViewController 中的数组

如何从 AppDelegate.m 访问 tabBarController?