timeIntervalSince1970与NSUserDefaults崩溃

时间:2012-10-26 22:20:39

标签: crash nsstring nsdate nsuserdefaults nstimeinterval

我试图每隔4天显示一次UIALertView。但因为:

而崩溃
NSInvalidArgumentException', reason: '-[__NSCFString timeIntervalSince1970]:

我尝试使用不同的方法,如下面的代码:https://stackoverflow.com/a/4278151/1014564导致同样的崩溃。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDate *firstLaunchDate = [defaults objectForKey:@"timeStamp"];
NSDate *dateNow = [[NSDate alloc] init];

if (!firstLaunchDate){

    NSString *nowTimestamp = [NSString stringWithFormat:@"%f", [[NSDate date] timeIntervalSince1970]];

    [defaults setObject:nowTimestamp            forKey:@"timeStamp"];
    [defaults synchronize];


} else if (([dateNow timeIntervalSince1970] - [firstLaunchDate timeIntervalSince1970]) > 86400*4){

 ///UIAlertView Here..

}

答案赞赏并将被接受。我知道这可能是一个简单的错误,我已经过了困倦的atm。

1 个答案:

答案 0 :(得分:2)

nowTimestamp = [NSString stringWithFormat:...];
[defaults setObject:nowTimestamp forKey:@"timeStamp"];

然后

NSDate *firstLaunchDate = [defaults objectForKey:@"timeStamp"];

所以你基本上在用户默认设置中设置NSString,但是你希望得到NSDate。由于NSUserDefaults不是魔法,所以不会发生。如果要存储日期,请使用

进行存储
[defaults setObject:[NSDate date] forKey:@"timeStamp"];

只有您可以对timeIntervalSince1970返回的对象使用NSUserDefaults