[英]Xcode: Why doesn't this code work for saving UITextField using NSUserDefaults?
[英]Why will one code work but the other not with getting NSUserDefaults?
只想知道為什么從NSUserDefault檢索值時為什么一個代碼起作用而另一個代碼不起作用
這是我將信息保存到nsuserdefaults中的方法:
let prefs = NSUserDefaults.standardUserDefaults()
prefs.setValue(user_names, forKey: "username") //storing the username "test"
這是我檢索nsuserdefaults信息的方式:
let prefs = NSUserDefaults.standardUserDefaults() //preference name
let username1 = prefs.stringForKey("username") //doesn't work
let username2: [NSString]? = NSUserDefaults.standardUserDefaults().objectForKey("username") as? [NSString] //works
print(username1) //doesn't work - "nil"
print(username2) //works - "test"
有人可以向我解釋為什么username1不起作用,而username2起作用嗎? 謝謝
正常方法是第二種方法。 這就是你應該怎么做
let myString = "Test"
var myStringArray = ["Test"]
保存
NSUserDefaults.standardUserDefaults().setObject(myString, forKey: "Key")
NSUserDefaults.standardUserDefaults().setObject(myStringArray, forKey: "Key")
為了以安全的方式獲取值(如果未第一次設置,objectForKey可能返回nil)
NSUserDefaults.standardUserDefaults().objectForKey("Key") as? String ?? myString
NSUserDefaults.standardUserDefaults().objectForKey("Key") as? [String] ?? myStringArray
您正在檢查對象是否存在(如?...),如果不存在,則使用屬性中的默認值(?? ...)
如您在Apple文檔中所見,您只能存儲:
默認對象必須是屬性列表,即NSData,NSString,NSNumber,NSNumber,NSDate,NSArray或NSDictionary的一個實例(或用於集合的實例的組合)。 如果要存儲任何其他類型的對象,通常應將其歸檔以創建NSData實例。
因此,如果要存儲具有不同類型的對象,則必須執行以下操作:
let data = NSKeyedArchiver.archivedDataWithRootObject(yourObject)
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(data, forKey:"yourObject" )
然后,如果要檢索它:
if let data = NSUserDefaults.standardUserDefaults().objectForKey("yourObject") as? NSData
{
let yourObject = NSKeyedUnarchiver.unarchiveObjectWithData(data) as! YourObjectType
}
希望這個能對您有所幫助 !
stringForKey返回一個可選值,因此您可以使用nil合並運算符“ ??” 如果為零,則返回一個空字符串“”:
讓username1 = prefs.stringForKey(“ username”)?? ”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.