我向NSUserDefaults添加一个字典并调用'synchronize'方法,但是当我关闭我的应用并重新打开它时,NSUserDefault中保存的值为nil。
#define kStartTime @"startTime"
#define kEndTime @"endTime"
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
NSString *startTime=@"08:00";
NSString *endTime=@"18:00";
NSDictionary *dict=[[NSDictionary alloc] initWithObjectsAndKeys:startTime,kStartTime,
endTime,kEndTime,
nil];
[defaults registerDefaults:dict];
[defaults synchronize];
在viewDidLoad
方法中,我称之为:
NSString *startTimeValue=[defaults stringForKey:kStartTime];
当我在模拟器中重新打开我的应用程序时,startTimeValue仍为零。是否UserDefaults无法保存在模拟器中???
我的观点是当我关闭我的应用并在模拟器中重新打开它时,值已消失。
在我搜索了苹果文档后,我得到了这个。
registerDefaults:
。
正如Apple文档中所述:将指定字典的内容添加到注册域。
* 注册域的内容不会写入磁盘; *每次应用程序启动时都需要调用此方法。您可以将plist文件放在应用程序的Resources目录中并调用registerDefaults :使用您从该文件中读取的内容。
因此registerDefaults:
的功能是在应用中设置默认值,默认值不会按synchronize
答案 0 :(得分:1)
我认为您在注册默认值之前尝试从NSUserDefaults读取值。 如果您注册默认值,这些值不会保存到磁盘,它们将不会持续到下一个应用程序启动。每次启动应用程序时都必须注册默认值。
当您从NSUserDefaults读取对象并且之前未保存过值时,将返回已注册的默认值。如果您之前保存了某个值,则会返回此值。
在您发布的代码中,您尚未向userDefaults保存任何内容。因此,您将注册为默认值。如果您尚未注册任何值,则返回nil。
注册默认值的代码应该放在一个在应用程序生命周期的早期运行的方法中。我建议使用application:didFinishLaunchingWithOptions:
如果要将多个值保存到NSUserDefaults,则必须使用多个setObject:forKey:
来电。
registerDefaults:
不能同时用于将多个密钥保存到NSUserDefaults!
答案 1 :(得分:-1)
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
NSDictionary *dict=[[NSDictionary alloc] initWithObjectsAndKeys:startTime,@"kStartTime",
endTime,@"kEndTime",
nil];
[defaults registerDefaults:dict];
[defaults synchronize];
NSString *startTimeValue=[defaults stringForKey:@"kStartTime"];
NSLog(@"%@",startTimeValue);
你需要像这样添加像@“value”这样的键。
现在试试这个代码......