2

我将字典添加到 NSUserDefaults 并调用“同步”方法,但是当我关闭我的应用程序并重新打开它时,保存在 NSUserDefaults 中的值为零。

#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 Document中所说:将指定字典的内容添加到注册域中。

*注册域的内容不写入磁盘;*您需要在每次应用程序启动时调用此方法。您可以在应用程序的 Resources 目录中放置一个 plist 文件,然后使用从该文件中读取的内容调用 registerDefaults:。

所以 的功能registerDefaults:是在应用程序中设置默认值,默认值不会存储在磁盘中synchronize

4

2 回答 2

1

我认为您在注册默认值之前尝试从 NSUserDefaults 读取值。如果您注册默认值,这些值不会保存到磁盘,它们将不会持续到下一次应用程序启动。每次启动应用程序时都必须注册默认值。

当你从 NSUserDefaults 读取一个对象并且之前没有保存过值时,将返回注册的默认值。如果您之前保存了一个值,则该值将被返回。

在您发布的代码中,您没有将任何内容保存到 userDefaults。因此,您注册为默认值的值将被返回。如果您还没有注册任何值,这将返回 nil。

注册默认值的代码应该放在一个在应用程序生命周期的早期运行的方法中。我建议使用application:didFinishLaunchingWithOptions:

如果要将多个值保存到 NSUserDefaults,则必须使用多个setObject:forKey:调用。
registerDefaults:不能用于将多个键同时保存到 NSUserDefaults!

于 2013-08-20T08:17:07.403 回答
-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”这样的键。

现在试试这个代码....

于 2013-08-20T07:51:49.403 回答