Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Objective-C

// -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"];

Swift 5.0

// -applicationDidFinishLaunching:
UserDefaults.standard.register(defaults: ["firstLaunch":true])
// to check it:
UserDefaults.standard.bool(forKey: "firstLaunch")
// -applicationWillTerminate:
UserDefaults.standard.set(false, forKey: "firstLaunch")

Ответ 2

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

// 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];

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 7

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