检查我的应用程序的首次启动

时间:2012-07-07 00:34:48

标签: objective-c macos nsuserdefaults

我如何使用NSUserDefaults检查是否是我的应用程序的第一次启动,并且在我的应用首次打开时运行了一些代码?

4 个答案:

答案 0 :(得分:19)

这应该指向正确的方向:

static NSString* const hasRunAppOnceKey = @"hasRunAppOnceKey";
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
if ([defaults boolForKey:hasRunAppOnceKey] == NO)
{
    // Some code you want to run on first use...
    [defaults setBool:YES forKey:hasRunAppOnceKey];
}

答案 1 :(得分:2)

NSUserDefaults的回答是我头脑中的第一件事,但经过反思,我会提出另一个建议。多做一点,但值得考虑。动机是:有时在对应用程序进行故障排除时,Apple建议删除该应用程序的plist文件。这是一种相当普遍的故障排除技术。我建议将你的布尔值存储在你的plist文件而不是NSUserDefaults。

免责声明:我只进行iOS开发,所以我不确定NSUserDefaults和plists如何在Mac上进行交互,我不知道让你的plist生活所涉及的是〜/ Library / Application \ Support /Preferences/com.mycompany.MyAppName.plist

无论如何,我想这需要的是一些代码可以实际创作一个“新鲜”的plist(可能是你的包中的模板文件中的副本),并且你的应用程序会在启动时执行此操作并且看不到plist 。默认plist不应该包含允许用户跳过“第一次”代码的标志,但如果他们之前打开了应用程序,然后删除了plist,那么它们应该恢复默认行为。

如果我们的应用程序给他们带来麻烦,这是一个支持可能的重要行为,以帮助我们的用户。

答案 2 :(得分:2)

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hasBeenLaunched"]) {
    // Run code on the first launch only ...
    [defaults setBool:YES forKey:@"hasBeenLaunched"];
}

您可以使用NSUserDefaults将bool,整数,对象保存到程序中,并在打开它时使它们可用。您可以使用'boolForKey'设置一个名为“hasBeenLaunched”的标志。默认情况下,未设置时该值为NO。一旦将其更改为YES,if条件中的代码将永远不会再次执行。

答案 3 :(得分:1)

在您的主控制器类中,实现以下内容:

static NSString * const MDFirstRunKey  = @"MDFirstRun";


@implementation MDAppController

+ (void)initialize {
   NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
   [defaults setObject:[NSNumber numberWithBool:YES] forKey:MDFirstRunKey];
   [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
   // the following if on Mac and is necessary:
   [[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:defaults];
}

- (void)applicationDidFinishLaunching:(NSNotification *)notification {

  BOOL firstRun = [[[NSUserDefaults standardUserDefaults]
                      objectForKey:MDFirstRunKey] boolValue];

  if (firstRun) {
     // do something

     [[NSUserDefaults standardUserDefaults] setObject:
                [NSNumber numberWithBool:NO] forKey:MDFirstRunKey];

  } else {
     // do something else

  }
}

@end

在创建它所找到的类的实例之前调用+initialize类方法;换句话说,它很早就被调用,是设置默认值的好地方。

有关详细信息,请参阅Preferences and Settings Programming Guide: Registering Your App's Default Preferences