有没有办法让“看不见的”用户默认?

时间:2011-04-12 19:48:21

标签: ios4

我的上一个问题是之前的这条道路,但我认为这需要一个新问题,因为我现在想要走这条道路(而不是试图做我在其他问题上尝试做的事情)。

我想要做的是在NSUserDefaults中拥有“不可见”值。我不关心Apple的指导原则,因为我的应用程序针对的是Jailbroken手机。这就是我到目前为止所做的:

settings.bundle中的root.plist看起来像这样(到目前为止,因为我想稍后添加密码字段):

enter image description here

first_launch是一个我不希望用户直接修改的值。正如它的名字所暗示的那样,一旦用户启动应用程序并通过我的小配置向导,它的价值将是“假的”。

就像你在plist中看到的那样,first_launch的初始值为TRUE / YES,但是这段代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSLog(@"%d", [defaults boolForKey:@"first_launch"]);

总是告诉我它是0.如果在我的设置包中有“隐形”值,我该怎么办?我不希望用户出于显而易见的原因修改first_launch,而且我总是希望添加一个只能从应用程序本身访问的密码字段。

1 个答案:

答案 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."); 
}