我知道如何使用NSUserDefault检测应用程序是否第一次打开:
BOOL didRunBefore = [[NSUserDefaults standardUserDefaults] boolForKey:@"didRunBefore"];
if (!didRunBefore) {
//Your Launch Code
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"didRunBefore"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
问题:我想要一个警告永远查看解释它包含哪些功能,只在首次启动应用时打开此警报?
答案 0 :(得分:10)
作为OOP程序员,您可以制作一个通用的公共方法。
+ (BOOL)checkWhetherRunBefore:(NSString *)key
{
return [[NSUserDefaults standardUserDefaults] boolForKey:key];
}
+ (void)hasRunForMyClass:(NSString *)key
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}
在ViewController中,您可以像这样在viewWillAppear或viewDidAppear中进行编码:
- (void)viewWillAppear
{
if(![HelpController checkWhetherRunBefore:NSStringFromClass([self class])])
{
//do your thing
[HelpController hasRunForMyClass:NSStringFromClass([self class])]
}
}
答案 1 :(得分:1)
您只需将代码放入viewDidLoad
即可当app加载您的视图时,viewDidLoad只会运行一次。 (低内存除外)
下次在viewDidLoad中再次加载视图时,可以检查bool didRunBefore
答案 2 :(得分:1)
您可以使用任何您想要的密钥。
在FirstViewController
:
BOOL didRunBefore = [[NSUserDefaults standardUserDefaults] boolForKey:@"FirstViewController_didRunBefore"];
if (!didRunBefore) {
//Your Launch Code
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"FirstViewController_didRunBefore"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
在SecondViewController
:
BOOL didRunBefore = [[NSUserDefaults standardUserDefaults] boolForKey:@"SecondViewController_didRunBefore"];
if (!didRunBefore) {
//Your Launch Code
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SecondViewController_didRunBefore"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
答案 3 :(得分:0)
你必须要检测应用程序首次启动,你可以检测到这样的
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (![defaults objectForKey:@"firstRun"])
[defaults setObject:[NSDate date] forKey:@"firstRun"];
[[NSUserDefaults standardUserDefaults] synchronize];
You can then test for it later...
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([defaults objectForKey:@"firstRun"])
{
// do something or not...
}