同步后无法从[NSUserDefaults standardUserDefaults]读取值

时间:2010-04-29 13:21:49

标签: iphone nsuserdefaults synchronize

在Application Delegate didFinishLaunching方法中,我使用以下代码构建一个新的NSDictionary,用作用户的新设置包:

NSNumber *testValue = (NSNumber*)[[NSUserDefaults standardUserDefaults] objectForKey:@"settingsversion"];
if (testValue == nil)
{
    NSNumber *numNewDB = [NSNumber numberWithBool:NO];
    NSNumber *numFirstUse = [NSNumber numberWithBool:YES];
    NSDate *dateLastStatic = [NSDate date];
    NSDate *dateLastMobile = [NSDate date];
    NSNumber *numSettingsversion = [NSNumber numberWithFloat:1.0];

    NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
                                 numNewDB, @"newdb",
                                 numFirstUse, @"firstuse",
                                 numSettingsversion, @"settingsversion",
                                 dateLastStatic, @"laststaticupdate",
                                 dateLastMobile, @"lastmobileupdate",
                                 nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

稍后在另一个ViewController中我试图从同一个字典中读回一个值,保存为NSUserDefaults - 至少我认为会这样,但是我没有获得所需成员lastUpdate的任何有效对象指针:

在.h文件中

NSDate *lastUpdate;

在成员函数的.m文件中:

lastUpdate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"laststaticupdate"];

即便如此,如果我打印出[NSUserDefaults standardUserDefaults]的内容,我只能得到这个:

2010-04-29 15:13:22.322 myApp[4136:207] Content of UserDefaults: <NSUserDefaults: 0x11d340>

这使我得出结论,内存中某处没有standardUserDefaults字典,或者它无法确定为这样的结构。

编辑:每次,我重新启动设备的应用程序,检查testValue是否为Nil,我正在重新构建字典但是在一次运行后它应该在电话上持续存在,对吗?

我在中间某处做错了吗?我觉得我还没有真正理解如何加载和保存iPhone上某个应用程序的持久设置。

除此之外我还有什么需要做的吗?在XCode中集成settings.bundle或手动将字典保存到Documents文件夹?

有人可以帮助我吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

registerDefaults实际上并没有向磁盘写入任何内容。它只是在内存中创建一个“默认默认值”字典。因此,每次重新启动应用程序时,testValue都应为零。

如果要设置持久值,请使用setObject:forKey:

我不知道你为什么没有得到有效的物品。