iOS12.4.1
iPhone7で確認
最小限のプログラムでテストしたわけではないのでプログラム自体のバグの可能性もあり
以下のようなプログラムでUserDefaultsを使って保存した場合、isSaveがYESになっていて、再読み込みしてUserDefaultsに保存した値が変更されたことを確認したあとにXcodeでプログラムをストップして再起動させた際にデータが永続化されていないことがありました。
呼び出し側
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[dataStore saveDatas]; // UserDefaultsで保存処理
}
保存処理
// 保存処理
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
//NSDataに変換する
NSData* baseDataData = [NSKeyedArchiver archivedDataWithRootObject:baseData];
BOOL isSave = [defaults synchronize];
NSLog(@"isSave:%d", isSave);
UserDefaultsの変更はメモリ上にキャッシュされていて実際に永続化(ディスクに書き込み)されるかどうかはシステム判断のようです。synchronize()を呼んだとしても同期されず永続化されていませんでした。
UserDefaultsを使った保存はお手軽ですが、本当に消えたら困るデータには使わないほうがいいのかもしれません。