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

Dar*_*vil 5 iphone nsuserdefaults ios

我正在使用这些方法从 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];
}
Run Code Online (Sandbox Code Playgroud)

使用 saveUserName 保存数据后,我使用 getUserName 正确获取数据,即使在重新启动应用程序后也是如此。但据报道有时会丢失数据。(从 didFinishLaunchingWithOptions 和 applicationWillEnterForeground 调用 getUserName) 为什么 NSUserDefault 正在重置?任何的想法??

从文档

  • (NSUserDefaults *)standardUserDefaults 描述
    返回共享的默认对象。如果共享默认对象尚不存在,则使用包含以下域名称的搜索列表创建它,按此顺序:
    • NS参数域
    • 由应用程序的包标识符标识的域
    • NS全局域
    • NS注册域

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

Iva*_*lev -1

您是否通过-registerDefaults:为数据字典创建了 NSRegistrationDomain 域?

正如文档所说:

在启动时,应用程序应该为其期望存在且有效的任何首选项注册默认值。

您可以这样做,以使其NSUSerDefaults正常工作:

- (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSDictionary * defaultsDictionary = @{kAccUserNameKey : @"default name"}
    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDictionary];       

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

在 中,defaultsDictionary您应该指定将在应用程序中使用的所有数据键及其默认值。