在OS X应用程序中以编程方式清除用户默认设置

4

我正在开发我的应用程序的beta版本,我需要确保在最终发布的版本中,曾经参与beta测试的用户在第一次启动应用程序时会使用完全清除的用户默认设置...(我无法更改Bundle ID)。

1) 有没有办法通过编程方式清除用户默认设置?

2) 将此应用程序沙盒化以进行App Store提交是否有帮助?

2个回答

4
您可以这样移除它:
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

为了在第一次启动时运行它,我建议您设置一个BOOL标志。其中一种方法如下:

- (void)applicationDidFihishLaunching
{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    if ([[prefs objectForKey:@"secondOrMoreTimeLoading"]boolValue]==0) //so if there is nothing there...
    {
        NSLog(@"This is the first time the user has loaded the application. Welcome!");
        //run the code above here, then change our flag to 1 so that it never runs this again (unless the prefs are reset elsewhere)
        [prefs setObject:[NSNumber numberWithBool:1] forKey:@"secondOrMoreTimeLoading"];
    }
    else{NSLog(@"Welcome back, user.");}     
}

我需要为这个操作设置特定的权限吗? - MatterGoal
@MatterGoal 不用担心,只需在首次加载时运行此代码即可。如果您在运行上述代码时遇到问题,另一种方法是对每个键执行 removeObjectForKey 操作,或者将您的 NSUserDefaults 替换为一个空字典。但我列出的方法应该是有效的。 - Baub
谢谢@James,我该如何检查“第一次启动”?我曾经在我的用户默认设置中设置了NSNumber参数,例如“first-launch”,然后进行检查。 - MatterGoal
沙盒隔离对于新提交的要求吗?不是吗?我很确定我读到过这个论点。 - MatterGoal
哎呀!我想我应该问你(或者注意标签),抱歉!我会编辑我的帖子。关于沙盒,你可能想要继续进行 - 如果我没记错的话,他们推迟了到明年才强制执行,但你最好先处理掉。 - Baub
显示剩余2条评论

2

我不确定这个操作是否符合我的需求,我读到它在重置之前同步数据。我需要完全删除先前创建的信息。来自苹果文档: italic 同步对共享用户默认对象所做的任何更改,并将其从内存中释放 italic - MatterGoal
然后它继续说,“随后调用standardUserDefaults会创建一个新的共享用户默认对象,其中包含标准搜索列表。” - Joshua Nozzi
我尝试了这段代码`[NSUserDefaults resetStandardUserDefaults]; NSUserDefaults *def = [NSUserDefaults standardUserDefaults];`但是在def中我仍然发现用户生成的数据。 我错过了什么? - MatterGoal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接