2010-09-14 48 views
1

我创建了一个Settings.bundle我的申请,我尝试下面的代码读取设置:从standardUserDefaults获得零,

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if(!defaults) 
{ 
    NSLog("can not get default bundle"); 
} 
NSString *usr = [NSString stringWithFormat:@"%@",[defaults stringForKey:@"username"]]; 
NSLog(usr); 

在控制台输出为(空)。我以前使用过它,它工作。这种情况发生在我升级到iOS的最新xcode之后。我不确定是否有任何改变?

这是从我的Settings.bundle屏幕截图。

alt text

回答

0

stringForKey:将返回nil

它返回nil,因为它找不到“用户名”的密钥。

它找不到“用户名”的关键字,因为该关键字不存在于该应用程序的用户默认值中。

该键不存在,因为(A)它从来不存在,对于该应用程序,或(B)它存在但被删除。 (A)如果通过Springboard删除应用程序,或者整个设备(模拟器)被重置,则可能在设备或模拟器上发生。这两种情况都是真的吗? (B)如果您在代码中执行了某些操作以删除密钥,可能会发生这种情况。你能证实情况并非如此吗?

+0

我可以确认这与这两种情况无关。 – nababa 2010-09-14 23:30:54

+0

您确定“应用程序名称”的值在应用程序退出前已被您的应用程序保存并保存吗? – 2010-09-14 23:37:40

+0

是的,有一个默认值,我可以在模拟器的“设置”中看到默认值。 – nababa 2010-09-15 00:14:18

0

如果您在模拟器中切换模拟器(新建或回归SDK)或运行不同的操作系统版本,则可能无法在这些不同的模拟器运行之间运行任何会话信息(包括默认值)。

+0

但是,在手动输入设置中的用户名后,我仍然没有找到零。 – nababa 2010-09-14 23:31:58

+0

在你运行应用程序之前还是之后(或者两者兼而有之)? – hotpaw2 2010-09-15 00:20:14