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

Примечание: Неопределенная переменная

Случается, когда вы пытаетесь использовать переменную, которая ранее не была определена.

Типичным примером может быть

foreach ($items as $item) {
    // do something with item
    $counter++;
}

Если вы ранее не определяли $counter, код, указанный выше, вызывает уведомление.

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

$counter = 0;
foreach ($items as $item) {
    // do something with item
    $counter++;
}

Вопросы, относящиеся:

64
задан Vadim Kotov 27 October 2017 в 12:13
поделиться

5 ответов

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

// -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"];
83
ответ дан Sergio 24 November 2019 в 15:40
поделиться

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

29
ответ дан 24 November 2019 в 15:40
поделиться

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

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

2
ответ дан Marc Charbonneau 24 November 2019 в 15:40
поделиться

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

2
ответ дан Chris Kimpton 24 November 2019 в 15:40
поделиться

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

// 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];
59
ответ дан 24 November 2019 в 15:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: