NSUserdefaults坚持

时间:2010-12-03 16:59:15

标签: iphone objective-c cocoa passwords nsuserdefaults

快速提问。我的应用程序中有一个密码系统,如果输入了太多不正确的密码,我想提供“锁定”应用程序的选项。我可以轻松地做到这一点,通过让UISwitch设置一些默认密钥,可以切换另一个锁定应用程序的密钥集。很抱歉,如果这令人困惑,但我真正的问题是,如果我做了类似的事情:

// in the failure function
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"appIsLocked"];

// in didFinishLaunching
if( ![[NSUserDefaults standardUserDefaults] boolForKey:@"appIsLocked"] )
{
  // launch normally
}

首先,如果用户删除应用程序,然后从iTunes重新安装它,是否会重置userDefaults?如此,应用程序是否会自动解锁?其次,如果苹果被锁定,苹果对我的感觉如何退出?那可能吗?或者,如果我只是显示一个屏幕上显示已锁定,请重新安装。是否有一个函数在用户卸载我可以运行清理的应用程序时被调用?

谢谢,如果问题太多,我很抱歉。

4 个答案:

答案 0 :(得分:1)

用户默认位于应用包内,因此将被删除。 我认为苹果会在您退出时显示“您不被允许使用此应用程序”dailog时批准您的应用程序。 请记住,当iOS设备被越狱时,编辑用户默认值非常容易,因此将其保存在用户默认设置中并不是保护它的好方法。

答案 1 :(得分:1)

据我所知,没有办法实际退出应用程序。调用exit()通常会让你被拒绝。 Apple特此在此处这样说:http://developer.apple.com/library/ios/#qa/qa2008/qa1561.html

因此我不建议这样做,只需保持应用程序打开并将其锁定。

另一方面,重新安装应用程序将解锁它,用户默认值将被删除,如Antwan之前说的那样。

答案 2 :(得分:1)

以编程方式退出应用并不是首选。您应该使用专用于通知用户他们被锁定的视图来锁定用户。

此外,当从设备中删除应用程序时,将删除任何一个应用程序的用户默认值。持久锁定的唯一方法是远程存储锁定信息,例如在您的一台服务器上(在这种情况下考虑实用性)。

Protip:对密码进行哈希处理,不要将其存储在纯文本中,并比较哈希值。

答案 3 :(得分:0)

虽然强烈建议不要因为用户觉得应用程序已经崩溃,但您仍然可以使用函数exit();。我不知道这是沮丧的,我使用它的方式是我动画我的应用程序淡入黑屏,一旦动画完成它退出应用程序。这种方法似乎并没有让应用程序崩溃给用户。

我目前在应用商店中有一个使用此功能的应用,因此您的应用可能会也可能不会被拒绝。如果您仍希望使用此退出应用程序的方法,请使用以下代码段。

exit(0);