IOSアプリが初めて起動されたときにどのように検出しますか?
MarcとChrisが言ったことはほとんど同じですが、アプリケーションの複数の領域について知っておく必要がある場合に備えて、アプリケーションが終了したときに値を変更することを好みます。コードで:
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.
// -applicationDidFinishLaunching:
UserDefaults.standard.register(defaults: ["firstLaunch":true])
// to check it:
UserDefaults.standard.bool(forKey: "firstLaunch")
// -applicationWillTerminate:
UserDefaults.standard.set(false, forKey: "firstLaunch")
私はこの質問がかなり古いことに気づきましたが、「新規インストール」後の最初の起動(アップグレード/ダウングレード後の最初の起動に対して)を検出するoneメソッドを思いついたので、私はそれを考えました。それが役立つ場合に備えて、将来の視聴者のためにここでコードを共有します。
// 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のキーと値のペアが常にNULLであることがわかりました。
// Check to see if its the first time
if ([[NSUserDefaults standardUserDefaults] valueForKey:@"firstTime"] == NULL) {
[[NSUserDefaults standardUserDefaults] setValue:@"Not" forKey:@"firstTime"];
}
このコードを、アプリケーションの起動時に表示されるビューコントローラーのawakeFromNibに配置します。他の回答があなたの問題に有効かどうかはわかりませんが、これが私が解決した方法です。
これを行うには、ユーザーのデフォルトでブール値を設定できます。 registerDefaults:
を呼び出すときにキーをfalseに設定し、それをtrueに設定して、最初のヘルプ画面または必要な操作をすべて表示した後で、trueに変更します。
アプリを閉じた後も常に保存される永続的なデータファイルがある場合、それが存在するかどうかを確認することは別の方法です。
これを ユーザー設定 として保存します。たとえば、had_first_launchを起動時にtrueに設定します。初回のみfalseになります...
これは、コードの他の場所で最初に起動したかどうかを検出したい場合、正しく機能しません。 「applicationWillTerminate」は、マルチタスクのため、iOS 4.0からは機能しません。このリンクは良い解決策を提供します: http://mobiledevblog.metalcompass.com/?p=4