我如何使用NSUserDefaults
检查是否是我的应用程序的第一次启动,并且在我的应用首次打开时运行了一些代码?
答案 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。