5

对这个网站来说是全新的,这里有相当业余的知识!几周前开始自学。有一个非常可靠的 iPhone 应用程序,但是我想实现的最后一个功能是能够;

创建“仅限首次发布”导览。

我想知道的是;如果它是用户第一次启动应用程序,我如何将视图重定向到一个新的视图控制器,而无需点击按钮,所有这些都以编程方式进行。

我已经阅读了一些关于检测我理解的首次启动的教程。我还阅读了一些教程并尝试了书中的所有内容来尝试实现“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.
}
4

3 回答 3

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.
}
于 2013-10-15T10:29:49.700 回答
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];
}
于 2013-12-30T16:22:55.477 回答
1

尼尔科

您提供的内容确实有效,但您在首次启动 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.
}
于 2014-01-29T11:17:11.003 回答