在NSUserDefaults(NSString)中保存日期不起作用 [英] Saving a date in NSUserDefaults (as NSString) not working

查看:194
本文介绍了在NSUserDefaults(NSString)中保存日期不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将此日期保存在NSUSerDefaults中:

  2011-04-14T13:18:25 + 0000 

但是我不想要最后一位(+0000),所以我用这个方法把它关掉:

  NSString * since = [last objectForKey:@updated_time]; 
NSString * cutOff = @+ 0000;
NSRange range = [since rangeOfString:cutOff];
self.lastUpdated = [since substringToIndex:range.location];
[[NSUserDefaults standardUserDefaults] setObject:lastUpdated forKey:@lastUpdated];

正如你所看到的,这只是一个非常简单的操作,将上述字符串剪切为: / p>

  2011-04-14T13:18:25 

然而,当我从NSUserDefaults加载它时,我得到:

  2011-04 -14 13:18:25 +0000 

任何人都可以告诉我为什么?



更新:



我曾经在.h中像以前一样宣布了lastUpdated:

  @interface TwitModel 
{
NSString * lastUpdated;
}

@property(retain)NSString * lastUpdated;

in .m:

  @synthesize lastUpdated; 

当我想加载它:

  if(self.lastUpdated == nil){
self.lastUpdated = [[NSUserDefaults standardUserDefaults] objectForKey:@lastUpdated];
}


解决方案

您需要调用code>同步在 NSUserDefaults 中,以便正确保存数据:

  [[NSUserDefaults standardUserDefaults] synchronize]; 






编辑 p>

这是我的工作代码:

  //输出以前的发布的存储值
NSLog(@从先前启动的值:%@,[[NSUserDefaults standardUserDefaults] valueForKey:@lastUpdated]);

NSString * since = @2011-04-14T13:18:25 + 0000;
NSLog(@Since:%@,since);
NSString * cutOff = @+ 0000;
NSRange range = [since rangeOfString:cutOff];
NSString * lastUpdated = [since substringToIndex:range.location];
[[NSUserDefaults standardUserDefaults] setObject:lastUpdated forKey:@lastUpdated];
[[NSUserDefaults standardUserDefaults] synchronize];

NSLog(@Value:%@,[[NSUserDefaults standardUserDefaults] valueForKey:@lastUpdated]);

输出:

  2011-04-14 08:52:29.972 TestApp [2117:207]从上次发布的价值:2011-04-14T13:18:25 
2011-04-14 08:52: 29.973 TestApp [2117:207]自:2011-04-14T13:18:25 + 0000
2011-04-14 08:52:29.975 TestApp [2117:207]价值:2011-04-14T13:18: 25


I'm trying to save this date in NSUSerDefaults:

2011-04-14T13:18:25+0000

But I don't want the last bit (+0000), so I chopped it off using this method:

NSString *since = [last objectForKey:@"updated_time"];
NSString *cutOff = @"+0000"; 
NSRange range = [since rangeOfString:cutOff];
self.lastUpdated = [since substringToIndex:range.location];
[[NSUserDefaults standardUserDefaults] setObject:lastUpdated forKey:@"lastUpdated"];

As you can see, it's just a very simple operation that will chop the above string to this:

2011-04-14T13:18:25

However when I load this from NSUserDefaults, I get this:

2011-04-14 13:18:25 +0000

Can anyone tell me why?

UPDATE:

I declared lastUpdated as usual in .h:

@interface TwitModel
{
    NSString *lastUpdated;
}

@property (retain) NSString *lastUpdated;

in .m:

@synthesize lastUpdated;

When I want to load it:

    if(self.lastUpdated == nil) {
        self.lastUpdated = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastUpdated"];
    }

解决方案

You need to call synchronize on NSUserDefaults in order for it to properly save the data:

[[NSUserDefaults standardUserDefaults] synchronize];


EDIT

Here's my working code:

// Output previous launch's stored value
NSLog(@"Value From Previous Launch: %@", [[NSUserDefaults standardUserDefaults] valueForKey:@"lastUpdated"]);

NSString *since = @"2011-04-14T13:18:25+0000";
NSLog(@"Since: %@", since);
NSString *cutOff = @"+0000"; 
NSRange range = [since rangeOfString:cutOff];
NSString* lastUpdated = [since substringToIndex:range.location];
[[NSUserDefaults standardUserDefaults] setObject:lastUpdated forKey:@"lastUpdated"];
[[NSUserDefaults standardUserDefaults] synchronize];

NSLog(@"Value: %@", [[NSUserDefaults standardUserDefaults] valueForKey:@"lastUpdated"]);

And the output:

2011-04-14 08:52:29.972 TestApp[2117:207] Value From Previous Launch: 2011-04-14T13:18:25
2011-04-14 08:52:29.973 TestApp[2117:207] Since: 2011-04-14T13:18:25+0000
2011-04-14 08:52:29.975 TestApp[2117:207] Value: 2011-04-14T13:18:25

这篇关于在NSUserDefaults(NSString)中保存日期不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆