我有一个名为“时间戳”的课程。此类包含一个变量,该变量在第一次使用应用程序打开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 上停止该应用程序是否会将其变为后台模式?