「タイムスタンプ」というクラスがあります。このクラスには、アプリstatic NSDate
を開いて最初に初期化される変数が含まれています。NSUserDefaults
この日付は、後で使用される文字列に変換されます。これは私が最初に日付を設定する方法です:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *string = [defaults objectForKey:@"timestampCheck"];
if (!string) {
Timestamp *tstamp = [[Timestamp alloc] init];
[tstamp setSingleTimeStamp : [NSDate date]];
[tstamp release];
[defaults setObject:@"notFirst" forKey:@"timestampCheck"];
[defaults synchronize];
} else {
Timestamp *ti = [[Timestamp alloc] init];
[ti initializeTimestamp];
[ti release];
}
initializeTimestamp
メソッドは、デフォルトからタイムスタンプを取得するだけです。これは、次のメソッドで設定されます。synchronizeTimestamp
このメソッドは、アプリがバックグラウンド状態になったときに呼び出されます。
Timestamp クラスは次のようになります。
- (void)setSingleTimeStamp:(NSDate *)dateProvided {
date = dateProvided;
[date retain];
}
- (void)synchronizeTimestamp {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:date forKey:@"timestampDate"];
[defaults synchronize];
}
- (void)initializeTimestamp {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
date = [defaults objectForKey:@"timestampDate"];
}
- (NSString *)dateStringContainer {
NSDate *tempDate = date;
unsigned units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:units fromDate:tempDate];
NSInteger year = [components year];
NSInteger month = [components month];
NSInteger day = [components day];
return [NSString stringWithFormat:@"%i - %i - %i", day, month, year];
}
別のビュー コントローラーのラベルのテキストは に設定されdateStringContainer
ます。もちろん、アプリを削除してビルドすると、正しい日付が表示されます。しかし、アプリを終了してマルチタスク バーから削除すると、ラベル テキストは次のようになります。
1 - 1 - 2001
そしてdate
、いくつかの後にゼロですNSLog's
アップデート:
基本的に、アプリがプラグインされているときに、アプリが初めて開いたときに日付が機能します(これを行うには、毎回アプリを削除する必要があります)。しかし、マルチタスクバーから削除した後に戻ったとき、日付が正しくありません。NSUserDefaults
これは、私のコードに何か問題があるということですよね? 推測するだけで...
編集:
synchronizeTimestamp メソッドが呼び出されていないことに気付きました。しかし、それは Xcode でアプリを停止しているためかもしれません。Xcode でそのアプリを停止すると、バックグラウンド モードになりますか?