如何设置 iOS 应用程序的首次启动

Posted

技术标签:

【中文标题】如何设置 iOS 应用程序的首次启动【英文标题】:How to setup first time launch of an iOS App 【发布时间】:2015-04-29 12:07:19 【问题描述】:

我只想在我的应用首次启动时显示条款和条件。

目前我正在didFinishLaunchingWithOptions 中编写我的代码。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
// Handle launching from a notification
 if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])

    NSLog(@"Already Run");

else

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

FirstPage * termsView = [storyboard instantiateViewControllerWithIdentifier:@"FirstPage"];

    UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:termsView];
    self.window.rootViewController=navController;

    // This is the first launch ever


更新::

当我的应用程序第一次在TERMSandCONDITIONSVC 中启动时我想要什么我有一个Accept 按钮。当用户Accepts 同意时,只有他允许走得更远。

上面代码的问题:

当我第一次运行我的应用程序时,TermsandCondition 显示给我。我按下主页按钮,应用程序进入后台。我再次从启动器打开应用程序,TermsandCondtion 显示。

但是当我将我的应用程序置于后台并通过双击主页按钮将其从后台删除并运行应用程序时,我会直接转移到我的主屏幕。

没有条款和条件。

我该如何恢复。

【问题讨论】:

应用程序需要一个视图作为根视图控制器,因此无论是否存在其他条件,您都需要设置根视图控制器。这意味着您还需要在 if 条件下设置 RootView Controller @AadilKeshwani 看我的故事板..我已经设置好了。我只想在我的应用程序第一次运行时更改它。看我的截图 您可以尝试以下代码:FirstPage * termsView = [self.storyboard instantiateViewControllerWithIdentifier:@"termsView"]; UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:termsView]; self.window.rootViewController=navController; 确保将termsView 作为storyboard id 【参考方案1】:

因为没有 viewcontroller 被设置为根视图,所以你得到了黑屏。

做一件事在 IF 部分也写下您的 else 部分,并将您的控制器从条款页面更改为第二页。

尝试将以下代码放入 didFinishLaunch 并检查。

self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

UINavigationController *navController

 if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])

    NSLog(@"Already Run");
    SecondView *secondView = [storyboard instantiateViewControllerWithIdentifier:<storyboard id>];
    navController=[[UINavigationController alloc]initWithRootViewController:secondView];


else

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
    [[NSUserDefaults standardUserDefaults] synchronize];

     TermsView *termsView = [storyboard instantiateViewControllerWithIdentifier:<storyboard id>];
    navController=[[UINavigationController alloc]initWithRootViewController:termsView];

// This is the first launch ever
    

self.window.rootViewController=navController;
 return YES;

更新: 只需拖动以下行以同意按钮的单击事件并从 didFinishlaunching 中删除此行。

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];

【讨论】:

你能在 Question 中写出你的 didFinishLaunch 方法代码吗 我更新了我的问题...请告诉我 didFinishLaunchingWithOptions 是检查应用程序启动的正确位置 那么我做错了什么。我的代码有问题吗。 @RahulMishra 您的视图中是否添加了任何控件?因为在故事板中我看不到任何控件 你不需要为默认的根视图控制器做同样的事情。这将被自动调用。【参考方案2】:

您正在以错误的方式实例化您的 termsView。在您的故事板中,为 FirstPage 视图控制器分配一个故事板 ID FirstPage

然后在您的didFinishLaunchingWithOptions 中执行以下操作

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

FirstPage * termsView = [storyboard instantiateViewControllerWithIdentifier:@"FirstPage"];

这将找到您的主故事板,然后根据提供的故事板ID(即FirstPage)使用ViewController 实例化termsView

【讨论】:

是 didFinishLaunchingWithOptions 编写此代码的正确位置吗? 我已经更新了我的问题请看一下【参考方案3】:

如果您想设置 ios 应用的首次启动。使用此代码,条款和条件将仅在应用首次启动时出现或显示。

  if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
    
        NSLog(@"Already Run");
    
    else
    
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
        [[NSUserDefaults standardUserDefaults] synchronize];
        FirstPage *termsView = [[FirstPage alloc]init];

        UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:termsView];
        self.window.rootViewController=navController;

        // This is the first launch ever
UIStoryboard *story=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
//first goto storyboard and give storyboard id "TermsConditionVC" to TermsConditionVC 
        TermsConditionVC *firstVC = [story instantiateViewControllerWithIdentifier:@"TermsConditionVC"];
        self.window.rootViewController =firstVC;
    

有关设置您的第一个计时器 iOS 应用启动的完整文章和完整过程,请访问以下链接http://findnerd.com/list/view/How-to-setup-first-time-launch-of-an-iOS-App/2770/

【讨论】:

以上是关于如何设置 iOS 应用程序的首次启动的主要内容,如果未能解决你的问题,请参考以下文章

检测iOS应用程序的首次启动[重复]

Xcode UI 测试:如何测试应用程序的首次启动

区分 UI 测试的首次启动

检测应用程序的首次运行

在 iCloud 环境中检测应用程序 (IOS/OSX) 的首次运行

从快速的首次加载开始