2013-10-15 44 views
5

这个网站的新品牌,非常有业余知识!几周前开始教我自己。有一个非常坚实的iPhone应用程序,但是我想实现的最后一个功能是能够;iOS首次发布游戏 - 检测应用程序是否首次推出

创建“仅首次发布”导游。

我想知道的是; 如果它是用户第一次启动应用程序,我怎样才能将视图重定向到一个新的视图控制器,而不是按下按钮的“初始视图控制器”,全部以编程方式。

我读了一些关于检测首次启动的教程,我明白了。 我也读了一些教程,并尝试在本书中的一切尝试和实施“performSegueWithIdentifier”,但没有任何工作对我来说!

也许是因为我使用Xcode 5并在iOS 7上测试。 如果有人能帮助我,我会永远感激!

(void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLaunch"]) { 
    } 
    else { 
     // Place code here 
     self.view.backgroundColor = [UIColor redColor]; 

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

    // Do any additional setup after loading the view, typically from a nib. 
} 
+0

你试过了什么?也许向我们展示一些代码。你试过的东西怎么不起作用?更多细节你可以给,更好的装备,我们将帮助你。 – neilco

+0

我添加到我的主要职位,我添加到我的viewcontroller.m文件。这工作正常,但我不太确定要在“// Place code here”部分中放置什么来打开替代视图控制器。 – Luke

+0

我也试图创建一个segue,并通过将代码放置在上面说的“//在此处放置代码”的地方使用代码以编程方式推送它; [self performSegueWithIdentifier:@“Tour”sender:self]; 我的segue被命名为“Tour” – Luke

回答

6

如果您还没有注册使用[[NSUserDefaults standardDefaults] registerDefaults:]任何违约,你第一次叫[[NSUserDefaults standardDefaults] boolForKey:@"FirstLaunch"],您将收到NO为键不存在。

我更愿意使用更多的语义键名,如hasPerformedFirstLaunch,那么它检查是否返回NO和执行第一启动顺序的问题:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hasPerformedFirstLaunch"]) { 
     // On first launch, this block will execute 

     // Set the "hasPerformedFirstLaunch" key so this block won't execute again 
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasPerformedFirstLaunch"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
    else { 
     // On subsequent launches, this block will execute 
    }  

    // Do any additional setup after loading the view, typically from a nib. 
} 
+0

对于代码来说相对较新,这非常有用,能够区分它和其他代码很简单,这是一个巨大的帮助。所以,现在我们已经建立了如何识别第一次启动并保存这些信息,那么如何以编程方式执行到另一个视图控制器的切换?我试图使用'performseguewithidentifier',但没有任何反应! – Luke

+0

我没有尝试过,因为我没有多少使用故事板,但是你可能会有更好的运气来做第一次启动检查并在'viewWillAppear:'中执行segue。 '执行SegueWithIdentifier:'应该工作。 – neilco

+0

我试过在viewWillAppear和viewDidLoad中使用,但没有任何反应。它不会触发任何东西! – Luke

1

这里是一个导游来源https://github.com/sofienazzouz/Guided-Tour,现在如果你想打电话给您的委托导游,你应该称呼它

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

//// initialize your initialViewController here however you want 
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"knewOrRecentUser"]) { 
     self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.initialViewController]; 
    } else { 
     [[NSUserDefaults standardUserDefaults] setObject:@"old" forKey:@"knewOrRecentUser"]; 
     GuidedTourViewController *guideTour = [[GuidedTourViewController alloc] init]; 
     self.navigationController = [[UINavigationController alloc] initWithRootViewController:guideTour]; 
    } 
[self.window setRootViewController:self.navigationController]; 
} 
1

neilco

您提供的功能确实有效,但您在第一次启动APP时忽略了将屏幕变成红色(或您喜欢的颜色)的代码。

现在看起来可能不是很多,但是当一个新手确实冒险通过时,最好提供尽可能多的信息,以便我们甚至可以理解正在发生的事情。是的,包括我! < < =新手

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hasPerformedFirstLaunch"]) { 
     // On first launch, this block will execute 
     // Place code here 
     self.view.backgroundColor = [UIColor redColor]; 

     // Set the "hasPerformedFirstLaunch" key so this block won't execute again 
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasPerformedFirstLaunch"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
    else { 
     // On subsequent launches, this block will execute 
    } 

    // Do any additional setup after loading the view, typically from a nib. 
}