我正在使用这些方法来保存并从NSUserDefaults获取数据。但随机时间段后,NSUserDefaults将在设备中自动清除。我检查了项目 -
代码...
+(NSString *) getUserName{
return [[NSUserDefaults standardUserDefaults] objectForKey:kAccUserNameKey];
}
+(void)saveUserName:(NSString *) value {
[[NSUserDefaults standardUserDefaults] setObject:value forKey:kAccUserNameKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
使用saveUserName保存数据后,即使重新启动应用程序,我仍然可以使用getUserName正确获取数据。但据报道,数据有时会丢失。(从didFinishLaunchingWithOptions和applicationWillEnterForeground调用getUserName)为什么NSUserDefault正在重置?任何想法?
来自文档
- (NSUserDefaults *)standardUserDefaults 说明
返回共享默认对象。 如果共享默认值对象尚不存在,则会使用包含以下域名称的搜索列表创建它,顺序如下:
- NSArgumentDomain
- 由应用程序的包标识符
标识的域- NSGlobalDomain
- NSRegistrationDomain
这是否意味着,有时共享对象尚不存在且返回为零?什么解决方案?
答案 0 :(得分:0)
您是否通过-registerDefaults:为数据字典创建了NSRegistrationDomain域?
正如documentation所说:
在发布时,应用应注册任何默认值 它希望存在并且有效的偏好。
您可以这样做,以使NSUSerDefaults
正常工作:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSDictionary * defaultsDictionary = @{kAccUserNameKey : @"default name"}
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDictionary];
return YES;
}
在defaultsDictionary
中,您应指定将在应用中使用的所有数据键及其默认值。