我的上一个问题是之前的这条道路,但我认为这需要一个新问题,因为我现在想要走这条道路(而不是试图做我在其他问题上尝试做的事情)。
我想要做的是在NSUserDefaults中拥有“不可见”值。我不关心Apple的指导原则,因为我的应用程序针对的是Jailbroken手机。这就是我到目前为止所做的:
settings.bundle中的root.plist看起来像这样(到目前为止,因为我想稍后添加密码字段):
first_launch是一个我不希望用户直接修改的值。正如它的名字所暗示的那样,一旦用户启动应用程序并通过我的小配置向导,它的价值将是“假的”。
就像你在plist中看到的那样,first_launch的初始值为TRUE / YES,但是这段代码:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSLog(@"%d", [defaults boolForKey:@"first_launch"]);
总是告诉我它是0.如果在我的设置包中有“隐形”值,我该怎么办?我不希望用户出于显而易见的原因修改first_launch,而且我总是希望添加一个只能从应用程序本身访问的密码字段。
答案 0 :(得分:0)
NSUserDefaults
值对于“设置”应用是不可见的,除非它们已添加到Settings.bundle
中。
您可以使用以下代码在NSUserDefaults中存储信息:
[[NSUserDefaults standardUserDefaults] setObject:someObject forKey:@"stringKey"];
所以,在你的app委托中,试试这个:
if([[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"] != NO){
// Do first run stuff here...
// Then, set the firstRun flag to NO
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];
}
编辑:
交换机和分组数据等必须在代码中初始化或由用户设置才能使用。
<强> EDIT2:强>
您需要手动更改@"firstLaunch"
键的值。
if([[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"] == NO){
NSLog(@"The app has never been launched before.");
// Notice the changed value here:
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];
} else {
NSLog(@"The app was launched before.");
}