iOS Playground中的NSUserDefaults

问题描述 投票:8回答:4

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

知道为什么会这样吗?错误?

ios swift xcode nsuserdefaults swift-playground
4个回答
7
投票

这不是一个真正的错误...... NSUserDefaults与iOS沙箱环境有关。游乐场不在这种环境中运行。因此,为什么您将无法将文件写入磁盘。如果您在通过模拟器或设备运行时在应用程序中运行此代码,您将可以访问沙箱环境,NSUserDefaults将返回正确的引用。我确实看到我在游乐场得到了一个适当的参考,并且可以设置和获取值,所以这里必须有其他东西。由于性质原因,我不会依赖于这种方式来测试这种类型的功能。

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

由于没有任何东西可以持续存在,因此该值变为零。


2
投票

对于它的价值,以下代码在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

1
投票

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

  1. 已知Betas有虫子。
  2. 提交错误报告:http://bugreport.apple.com

0
投票

在Xcode 9.2 for iOS中,目前甚至可以将UserDefaults保存在游乐场的重播之间。这首先让我恼火,因为我预计在每次停止后,UserDefaults都会被清除,就像之前一样。所以,一个警告:UserDefaults现在在重新运行之间保持不变,最好在搜索bug时记住这一点,可能会有副作用!

© www.soinside.com 2019 - 2024. All rights reserved.