在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文件夹?
有人可以帮助我吗?非常感谢!
答案 0 :(得分:0)
registerDefaults
实际上并没有向磁盘写入任何内容。它只是在内存中创建一个“默认默认值”字典。因此,每次重新启动应用程序时,testValue都应为零。
如果要设置持久值,请使用setObject:forKey:
。
我不知道你为什么没有得到有效的物品。