iOS Playgrounds似乎有一个奇怪的问题,NSUserDefaults
总是返回nil
而不是实际值。
在iOS Playground中,最后一行错误地返回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")
知道为什么会这样吗?错误?
这不是一个真正的错误...... NSUserDefaults与iOS沙箱环境有关。游乐场不在这种环境中运行。因此,为什么您将无法将文件写入磁盘。如果您在通过模拟器或设备运行时在应用程序中运行此代码,您将可以访问沙箱环境,NSUserDefaults将返回正确的引用。我确实看到我在游乐场得到了一个适当的参考,并且可以设置和获取值,所以这里必须有其他东西。由于性质原因,我不会依赖于这种方式来测试这种类型的功能。
请注意我同步商店时会发生什么。
由于没有任何东西可以持续存在,因此该值变为零。
对于它的价值,以下代码在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)中失败。
在Xcode 9.2 for iOS中,目前甚至可以将UserDefaults保存在游乐场的重播之间。这首先让我恼火,因为我预计在每次停止后,UserDefaults都会被清除,就像之前一样。所以,一个警告:UserDefaults现在在重新运行之间保持不变,最好在搜索bug时记住这一点,可能会有副作用!