0

在 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 文件夹?

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

4

1 回答 1

0

registerDefaults实际上并没有将任何内容写入磁盘。它只是在内存中创建一个'defaults defaults'字典。所以每次重启应用时,testValue 应该是 nil。

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

但是,我不知道为什么您没有得到有效的对象。

于 2010-04-29T13:39:20.183 回答