Определить, когда приложение iOS запускается в первый раз? [закрытый]
Как определить, когда приложение iOS запускается в первый раз?
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