gpt4 book ai didi

objective-c - NSDate 是 1-1-2001

转载 作者:行者123 更新时间:2023-11-29 04:37:34 26 4
gpt4 key购买 nike

我有一个名为“Timestamp”的类(class)。此类包含一个静态 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];

}

单独 View Controller 中的标签文本设置为dateStringContainer。当然,当我删除并构建我的应用程序时,它会显示正确的日期。但是当我退出应用程序并从多任务栏中删除时,标签文本为:

1 - 1 - 2001

在一些NSLog's之后,date为零

更新:

好吧,基本上,当我的应用程序插入时,该日期在应用程序第一次打开时有效(我必须每次都删除该应用程序才能执行此操作)。但是当我从应用程序中删除它后返回到它时多任务栏,日期不正确。这意味着我的 NSUserDefaults 代码有问题,对吗?只是猜测...

编辑:

我注意到我的synchronizeTimestamp 方法没有被调用。但这可能是因为我在 Xcode 上停止该应用程序,在 Xcode 上停止该应用程序是否会将其转换为后台模式?

最佳答案

您必须保留以下内容

date = [defaults objectForKey:@"timestampDate"];

应该是

date = [[defaults objectForKey:@"timestampDate"] retain];

由于默认将返回一个自动释放的对象,我不知道这是否能解决您的所有问题,但这肯定是一个错误

关于objective-c - NSDate 是 1-1-2001,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com