Как определить, когда приложение iOS запускается в первый раз?
Обнаруживать, когда приложение iOS запускается в первый раз?
Ответ 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 после того, как вы указали начальный экран справки или что бы вы ни делали.
Если у вас есть постоянный файл данных, который всегда сохраняется после закрытия приложения, проверка его наличия будет другим способом.
Ответ 6
Сохраните его как пользовательские предпочтения, например has_first_launch, установите true при запуске, он будет только в первый раз..
Ответ 7
Это не будет работать должным образом, если вы хотите обнаружить в других местах кода, если его первый запуск. "ApplicationWillTerminate" не будет работать из iOS 4.0 из-за многозадачности. эта ссылка обеспечивает хорошее решение: http://mobiledevblog.metalcompass.com/?p=43