Определить, когда приложение iOS запускается в первый раз? [закрытый]


Как определить, когда приложение iOS запускается в первый раз?

7 63

7 ответов:

в значительной степени то, что сказали Марк и Крис, хотя я предпочитаю изменять значение, когда приложение выходит, если есть несколько областей приложения, которые должны знать об этом. В коде:

// -applicationDidFinishLaunching:
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstLaunch",nil]];
// to check it:
[[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"];
// -applicationWillTerminate:
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];

Я понимаю, что этот вопрос довольно старый, но я использовал его, чтобы придумать один метод обнаружения первого запуска после "новой установки" (против первого запуска после обновления/понижения) и подумал, что я поделюсь кодом здесь для будущих зрителей, если это полезно.

// Get current version ("Bundle Version") from the default Info.plist file
NSString *currentVersion = (NSString*)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSArray *prevStartupVersions = [[NSUserDefaults standardUserDefaults] arrayForKey:@"prevStartupVersions"];
if (prevStartupVersions == nil) 
{
    // Starting up for first time with NO pre-existing installs (e.g., fresh 
    // install of some version)
    [self firstStartAfterFreshInstall];
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:currentVersion] forKey:@"prevStartupVersions"];
}
else
{
    if (![prevStartupVersions containsObject:currentVersion]) 
    {
        // Starting up for first time with this version of the app. This
        // means a different version of the app was alread installed once 
        // and started.
        [self firstStartAfterUpgradeDowngrade];
        NSMutableArray *updatedPrevStartVersions = [NSMutableArray arrayWithArray:prevStartupVersions];
        [updatedPrevStartVersions addObject:currentVersion];
        [[NSUserDefaults standardUserDefaults] setObject:updatedPrevStartVersions forKey:@"prevStartupVersions"];
    }
}

// Save changes to disk
[[NSUserDefaults standardUserDefaults] synchronize];

обычно я использую номер версии приложения вместо логического значения для значения firstLaunch в пользовательских значениях по умолчанию. Таким образом, вы можете различать первый запуск новой установки и первый запуск обновления. Может быть полезно в будущих версиях...

Это очень простой ярлык, но я обнаружил, что пары значений ключей NSUserDefault всегда равны нулю при первом запуске приложения, поэтому

// Check to see if its the first time
if ([[NSUserDefaults standardUserDefaults] valueForKey:@"firstTime"] == NULL) {
   [[NSUserDefaults standardUserDefaults] setValue:@"Not" forKey:@"firstTime"];
}

и поместите этот код в awakeFromNib контроллера вида, который появляется при запуске приложения. Я не знаю, работают ли какие-либо другие ответы на вашу проблему, но именно так я ее решил.

для этого можно задать логическое значение в пользовательских значениях по умолчанию. Установите ключ в значение false при вызове registerDefaults:, а затем установите его в true измените его на true после того, как вы показали свой начальный экран справки или все, что вам нужно сделать.

Если у вас есть постоянный файл данных, который всегда сохраняется после закрытия приложения, Проверка его существования будет другим способом.

Сохранить как предпочтения пользователя, например had_first_launch, установите значение true при запуске, оно будет ложным только в первый раз...

Это не будет работать должным образом, если вы хотите обнаружить в других местах кода, если ее первый запуск. В "applicationWillTerminate" не будет работать с iOS 4.0 из-за многозадачности. эта ссылка обеспечивает хорошее решение: http://mobiledevblog.metalcompass.com/?p=43