NSUserDefault将在随机时间段后自动清除

时间:2014-03-11 11:40:18

标签: ios iphone nsuserdefaults

我正在使用这些方法来保存并从NSUserDefaults获取数据。但随机时间段后,NSUserDefaults将在设备中自动清除。我检查了项目 -

  • 我没有使用saveUserName方法保存任何nil或空字符串。
  • 不使用removeObjectForKey,removePersistentDomainForName重置NSUserDefault。

代码...

+(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
    •   
  •   

这是否意味着,有时共享对象尚不存在且返回为零?什么解决方案?

1 个答案:

答案 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中,您应指定将在应用中使用的所有数据键及其默认值。