iOS游乐场的NSUserDefaults

iOS操作系统似乎有一个奇怪的问题, NSUserDefaults总是返回nil而不是实际的值。

在iOS游乐场中,最后一行错误地返回nil

 import UIKit let defaults = NSUserDefaults.standardUserDefaults() defaults.setObject("This is a test", forKey: "name") let readString = defaults.objectForKey("name") 

在OSX Playground中,最后一行正确返回“This is a test”。

 import Cocoa let defaults = NSUserDefaults.standardUserDefaults() defaults.setObject("This is a test", forKey: "name") let readString = defaults.objectForKey("name") 

任何想法,为什么这是? 错误?

这不是一个真正的bug ….. NSUserDefaults绑定到iOS沙箱环境。 游乐场不在这个环境中运行。 因此,为什么你将无法将文件写入磁盘。 如果通过模拟器或设备运行时在应用程序中运行此代码,则可以访问沙箱环境,NSUserDefaults将返回适当的引用。 我看到虽然我在操场上得到了一个适当的参考,可以设置和获得价值,所以这里还有其他事情要做。 我只是不会依赖这种方式来testing这种types的function,由于性质。

注意当我同步商店时会发生什么。

例

价值成为零,因为没有什么可坚持的。

对于它的价值,下面的代码在iOS Playground 1.6.1版(Swift 4)中工作正常

 import Foundation let defaults = UserDefaults.standard defaults.set("This is a test", forKey: "name") let readString = defaults.string(forKey: "name") print(readString!) 

打印:

 This is a test 

该代码在Xcode 6.4中正常工作,但在Xcode 7.0 beta(7A120f)中失败。

  1. 贝塔斯已知有错误。
  2. 提交错误报告: http : //bugreport.apple.com

在iOS的Xcode 9.2中,目前甚至可以在UserDefaults在游戏场的重播之间保存。 这首先让我很恼火,因为我预计在每次停止之后,UserDefaults将被清理,就像他们之前明显的那样。 所以,警告:UserDefaults现在在重执行之间被保留,在search错误时更好地记住,可能有副作用!