3 次启动 App 后显示 UIAlertview

Posted

技术标签:

【中文标题】3 次启动 App 后显示 UIAlertview【英文标题】:Show UIAlertview after 3 launches App 【发布时间】:2014-10-20 20:13:58 【问题描述】:

我想要实现的是当用户在 3 次后打开应用程序时显示 UIAlertview。我在 ViewDidAppear 的 ViewController 中使用下面的代码,但每次打开应用程序时都会显示 UIAlertview。有人可以告诉我我在这里做错了什么吗?

int launches = [[NSUserDefaults standardUserDefaults] integerForKey:@"launchCount"];
if (launches > 3) 
  UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"My Alert" 
                                                  message:@"Some message" delegate:nil
                                        cancelButtonTitle:@"OK" otherButtonTitles:nil];
  [alert show];

[[NSUserDefaults standardUserDefaults] setInteger:launches+1 forKey:@"launchCount"];

编辑:我也收到 NSInteger(又名“long”)到“int”警告。这可能是它不起作用的问题吗?

【问题讨论】:

要修复警告,请将int 更改为NSInteger Show uialertview after opening an app after 3 times? 的可能重复项问同一个问题两次的目的是什么? 【参考方案1】:

您应该将该代码移至您的应用委托 -application:didFinishLaunchingWithOptions:

【讨论】:

不,每次打开应用程序时仍会显示警告和警报视图弹出窗口。 检查第一次启动时返回的启动值。此外,您是希望在应用程序在第 3 次启动后每次启动时出现警报,还是仅在第 3 次启动时出现? 如何检查返回的值?是的,我想在应用程序在第 3 次启动后每次启动时显示它。 有三种很好的调试值的方法: 1. 在launches 返回后设置断点(第44 行)。 2. 使用NSLog 将值打印到控制台。 3. 执行步骤 1 并在控制台中输入“po launch”。 看截图,它在启动时显示一个奇怪的值link【参考方案2】:

@AdamPro13 是正确的,您应该将代码移动到您的应用程序委托中的- (void)applicationDidBecomeActive:(UIApplication *)applicationviewDidAppear 方法可以在每次应用启动时调用多次。如果您希望每次安装只显示一次UIAlertView,您可以保存BOOL(如果已显示)或更改测试launches == 4。类似的东西

NSInteger launches = [[NSUserDefaults standardUserDefaults] integerForKey:@"launchCount"];
BOOL launchAlertShown = [[NSUserDefaults standardUserDefaults] boolForKey:@"launchAlertShown"];
if (launches > 3 && !launchAlertShown) 
   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"My Alert" 
                                              message:@"Some message" delegate:nil
                                    cancelButtonTitle:@"OK" otherButtonTitles:nil];
  [alert show];
  [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"launchAlertShown"];

[[NSUserDefaults standardUserDefaults] setInteger:launches+1 forKey:@"launchCount"];

您已删除应用程序,而不仅仅是用新版本覆盖,以删除 [NSUserDefaults standardUserDefaults] 的内容。这意味着测试 launches > 3 将保持正确,直到您从正在测试的设备或模拟器中删除应用程序。,

【讨论】:

【参考方案3】:

知道了!感谢@AdamPro13

NSInteger launches = [[NSUserDefaults standardUserDefaults] integerForKey:@"launchCount"];
    if (launches % 3 == 0) 
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"My Alert"
                                                        message:@"Some message" delegate:nil
                                              cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    

    [[NSUserDefaults standardUserDefaults] setInteger:launches+1 forKey:@"launchCount"];

【讨论】:

以上是关于3 次启动 App 后显示 UIAlertview的主要内容,如果未能解决你的问题,请参考以下文章

iPhone App 中的 UIAlertView 动态

如何取消并从UIAlertView调用用户操作

为啥支付成功后,回到APP页面,又重新启动一次支付宝

如何从 UIAlertView 获取取消和调用用户操作

一段时间后如何显示 UIAlertView?

iOS 在显示另一个之前关闭 UIAlertView