2012-01-27 49 views
0

我遇到了一些令人费解的事情。我有我想要保存到一些NSUserDefaults的基本字符串数据,比如:NSUserDefaults并不总是保存我的NSString数据

NSString *state = @"finished"; 
[[NSUserDefaults standardUserDefaults] setObject:state forKey:@"downloadFinished"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

当应用程序启动时,它作出决定的方式之一上查看到负载是检查的价值这个用户设置:

NSString *savedState = [[NSUserDefaults standardUserDefaults] stringForKey:@"downloadFinished"] 
if(savedState && [savedState length]) { 
    // Show view 
} 

在每隔一段时间,我注意到,这个值加载失败,即使我知道肯定这个数值以前保存(或至少,应用程序试图挽救它以前)。发生这种情况时,当我从用户默认值中查找“downloadFinished”键时,我得到的值为零。

有没有人遇到过这个?有没有关于为什么会发生这种情况的知识?如何保存用户的默认缓存和默认数据库失败,并且是否有可能进一步防止这种情况发生?

我将尝试Why is NSUserDefaults not saving my values?中提到的解决方案,这会在应用程序进入后台时强制另一个同步,但我想知道是否有人对此问题有更深入的了解。

+1

这里不是解决办法,但为什么不使用你的'downloadFinished'键布尔值? – 2012-01-27 00:57:44

+0

你是否从你的stringForKey获取零或空字符串?根据文档,nil表示在NSUserDefaults中找不到密钥。 – bneely 2012-01-27 01:15:01

+0

@MichaelDautermann downloadFinished是一个例子 - 我实际上试图保存一个字符串。 – dreadpirateryan 2012-01-27 19:04:30

回答

0

我在这里猜测一些数据类型的问题。 你可以试试这个,看看你有什么东西吗?

NSString *savedState = [[NSUserDefaults standardUserDefaults] objectForKey:@"downloadFinished"] 

通知objectForKey使用

+0

我会给你一个镜头。如果它起作用,它关系到的是,当stringForKey没有时,objectForKey会起作用。数据绝对保存为NSString。 – dreadpirateryan 2012-01-27 19:06:03