Pergunta

Como faço para detectar quando um aplicativo iOS é lançado pela primeira vez?

Foi útil?

Solução

Muito bonito o que Marc e Chris disse, embora eu prefira alterar o valor quando os quites de aplicativos em caso lá está várias áreas do aplicativo que precisa de saber sobre isso. No código:

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

Outras dicas

Eu percebo esta pergunta é bastante antiga, mas eu usei-o para chegar a um método de detecção do primeiro arranque depois de uma "nova instalação" (vs. primeiro arranque após uma atualização / rebaixamento) e pensei em compartilhar o código aqui para os telespectadores futuras no caso, é útil.

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

Normalmente eu uso o número da versão aplicativo, em vez de um booleano para o valor firstLaunch em padrões do usuário. Dessa forma, você pode distinguir entre o primeiro lançamento de uma nova instalação e o primeiro lançamento de um upgrade. Pode ser útil em futuras versões ...

Este é um atalho muito simples, mas eu achei que NSUserDefault pares de valores-chave sempre são nulos a primeira vez que você executar um aplicativo para

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

e colocar esse código no awakeFromNib do controlador de vista que aparece quando seu aplicativo é iniciado. Eu não sei se alguma das outras respostas trabalhar para o seu problema, mas esta é a maneira que eu resolveu.

Você pode definir um valor booleano nos padrões do usuário para fazer isso. Defina a chave para false quando você chamar registerDefaults:, e, em seguida, configurá-lo para a verdadeira mudança que a verdade depois de ter mostrado sua tela inicial ajuda ou o que você precisa fazer.

Se você tem um arquivo de dados persistente que sempre salvo após o fechamento do aplicativo, verificar para ver se ele existe seria uma outra maneira.

Save-lo como um preferência dos utilizadores , por exemplo had_first_launch, definido como verdadeiro no arranque, ele só irá ser falsa na primeira vez ...

Isso não vai funcionar corretamente se você deseja detectar durante a outros lugares do código se o seu primeiro lançamento. O "applicationWillTerminate" não vai trabalhar a partir de iOS 4.0, devido à multitarefa. este link fornece uma boa solução: http://mobiledevblog.metalcompass.com/?p=43

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top