2017-02-03 76 views
0

無法獲取存儲在UserDefaults無法從UserDefaults

var videoString = String() 

鑑於沒有負載的字符串值的字符串值

videoString = "http://site4brandz.com/cphp/26/uploads/oggy.mp4" 
UserDefaults.standard.set(videoString as String, forKey: CurrentURL) 
UserDefaults.standard.synchronize() 
print("\(UserDefaults.standard.object(forKey: CurrentURL))") 

這是印刷如下:

Optional(http://site4brandz.com/cphp/26/uploads/oggy.mp4) 

當我回去檢查相同的字符串,如

if (UserDefaults.standard.value(forKey: CurrentURL) != nil) { 
    print("\(UserDefaults.standard.value(forKey: CurrentURL))") 
    let runningSrtring = UserDefaults.standard.value(forKey: CurrentURL)! 
} 

但現在它的打印爲Optional(4.067826)我在哪裏犯了一個錯誤?

+1

我覺得你的問題是‘CURRENTURL’,確保爲值,而設定值相同,並獲得價值 –

+1

使用對象的關鍵和雙重檢查你的關鍵我認爲你的關鍵不匹配。您用一個密鑰存儲字符串並用另一個密鑰獲取。用例如「MySavedKey」的測試鍵進行測試,然後使用「MySavedKey」重新打印。 – ChanWarde

+0

@ChanWarde是的,你是對的我已經改變了密鑰並修改爲UserDefaults.standard.string(forKey:CurrentURL)!和它的工作 –

回答

4

在Swift3

如何使用UserDefaults.standard.string(forKey: CurrentURL)!

代替UserDefaults.standard.value(forKey: CurrentURL)!

+0

UserDefaults.standard.string(forKey:CurrentURL)!這是爲了設置嗎?或變得?? –

+0

@MaheshNarla正在獲取函數返回'字符串?'類型 – Cruz

+0

是的,你是對的,併爲我工作 –

1

斯威夫特2.3

您可以設置值的字符串中UserDefaults

NSUserDefaults.standardUserDefaults().setObject(videoString, forKey: CurrentURL) 

通過得到

if let string = NSUserDefaults.standardUserDefaults().stringforKey(CurrentURL) { 
} 

值在斯威夫特3 可以設置值的字符串中UserDefaults

UserDefaults.standard.set(videoString, forKey: CurrentURL) 

通過得到UserDefaults

if let string = UserDefaults.standard.string(forKey: CurrentURL) { 
} 

值確保您的鍵「CurrentURL」具有相同的值

+0

它也會在迅速3? –

+0

讓我補充了SWIFT 3 –

+0

結賬的代碼我的回答 –

1

更改UserDefaults設置代碼:

來自:

UserDefaults.standard.set(videoString as String, forKey: CurrentURL) 

if videoString { 
    UserDefaults.standard.set(videoString!, forKey: CurrentURL) 
} 

,檢查不同!

1

與Swift3試試:

extension UserDefaults { 

    func setValue(value: String, key: String) { 
     set(value, forKey: key) 
     synchronize() 
    } 

    func getValue(key: String) -> String { 
     return string(forKey: key) 
    } 
} 

用法:

let videoString: String = "http://site4brandz.com/cphp/26/uploads/oggy.mp4" 

UserDefaults.standard.setValue(value: videoString, key: CurrentURL) 

,並檢查它:

print(UserDefaults.standard.getValue(key: CurrentURL)) 

請注意,我用關鍵String。更改的關鍵類型CURRENTURL型正如所預期(如:URL Type,...)