2015-07-03 47 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現在在重執行之間持續存在,在搜索錯誤時更好地記住,可能會有副作用!