2015-07-03 86 views
8

iOS游乐场似乎存在一个奇怪的问题,其中NSUserDefaults总是返回nil而不是实际值。iOS游乐场的NSUserDefaults

在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") 

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

+0

你运行的是什么版本的Xcode,这适用于Xcode 6.4。 – zaph

+0

对于我来说,这两个代码片段也能正常工作。6.4 – SomeGuy

回答

7

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

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

Example

值变为零,由于这样的事实,没有什么坚持反对。

+1

这适用于iOS游戏机:'let readString = defaults.objectForKey(“name”)as? String'。 – zaph

+0

我已经更新了我的答案,以反映我在Xcode 6中看到的内容。出于好奇,您是否使用Xcode 7测试版?我真的不会依赖读/写/存储功能在游乐场环境中正常工作。操场环境意味着更独立的模块化代码而不是持久性代码。 – TheCodingArt

1

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

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

看起来这在Xcode 7 GM种子中也失败了。 –

+0

与Xcode 7.1.1相同但NSKeyedArchiver确实工作正常 –

2

对于它的价值,下面的代码工作正常的iOS版本游乐场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 
0

在iOS的Xcode 9.2中,它目前甚至可以在UserDefaults保存在pl的重播之间ayground。这首先让我感到恼火,因为我预计在每次停止之后,UserDefaults都会被清理干净,就像他们之前明显的那样。 因此,警告:UserDefaults现在在重执行之间持续存在,在搜索错误时更好地记住,可能会有副作用!