"+resetStandardUserDefaults"实际上是做什么的?

4

尝试使用NSUserDefaults类的"+resetStandardUserDefaults"来将默认值重置为其“工厂”设置,但结果证明这不是合适的方法。从SO中的一些存档讨论中发现,我们应该使用实例方法“removeObjectForKey”来删除用户的设置。

但我只是好奇并希望有人能解释“+resetStandardUserDefaults”的实际用途。已经阅读了有关此内容的参考网页手册,但它非常简短,我似乎没有真正理解其含义...


我认为这是一个完全的谜团,没有人真正知道。在这次启动期间,“重置”和“重置”“用户的首选项”(通常作为用户考虑)之间存在很大的混淆。 - Fattie
@Joe Blow,你说得对,工厂默认设置似乎没有被“+resetStandardUserDefaults”更改,因为我刚刚在示例代码中添加了一个按钮来测试调用该类方法。不知道有没有人就这个问题联系过苹果? - Stanley
1个回答

1

在某个地方(通常是在应用程序委托+initialize中),您声明标准用户默认值(首次启动时应用程序的首选项)。 +resetStandardUserDefaults使您的应用程序意味着它是第一次启动,并使用您在应用程序委托中声明的用户默认值。

以上是错误的答案

正如Apple的文档所说:

同步对共享用户默认对象所做的任何更改并将其从内存中释放

重置部分是指standardUserDefaults对象在内存中被销毁,因此下次使用[NSUserDefaults standardUserDefaults]时,您会从文件系统中获取一个新的对象,但它与任何首次启动行为无关。

如果将其重命名为flushDefaultsToDisk或类似名称,则调用将有意义。这是我迄今为止看到的最具误导性的iOS SDK部分。

我在原地进行了更正,因为这个问题在搜索中排名很高,我不想把更正放在评论中,以免有人没有看到。


从我正在关注的示例教程代码中,启动用户默认系统时没有使用“+resetStandardUserDefaults”调用。我们需要在特定情况下使用“+reset…”调用吗? - Stanley
你的意思是在调用+resetStandardUserDefaults方法后,之前的用户默认设置会变成工厂默认设置吗? - Stanley
没错。通常情况下不使用+resetStandardUserDefaults方法,你可以声明默认设置。当用户需要时可以更改设置。它们不再是默认设置了。但是当需要时,可以将自定义设置重置为默认设置。 - lbrndnr
我们可能需要更深入地研究这个问题。正如Joe Blow所提到的,开发人员对于+resetStandardUserDefaults的使用存在一些困惑。我已经再次测试了它,似乎对工厂默认值没有任何影响。 - Stanley

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