我试图将数组的内容写入NSUserDefaults
,但是当我以数组作为对象调用setObject:withKey
时应用程序挂起。这是相关代码:
class Contact: NSObject {
var name:String = ""
var number:String = ""
}
var contacts:[Contact]?
contacts = [Contact]()
let contact = Contact()
contact.name = "Joe"
contact.number = "123-4567"
contacts.append(contact)
let defaults = NSUserDefaults.standardUserDefaults()
// Never returns from this when I step over it in the debugger
defaults.setObject(contacts, forKey: "contacts")
defaults.synchronize()
我做错了什么?
答案 0 :(得分:2)
不确定它在OS X上究竟是如何工作的,但是如果它在iOS上有类似的东西,你就不能在NSUserDefaults中存储自定义类,只有字符串,Ints,数据等......所以一个解决方法是将您的数组转换为NSData,然后将其存储为数据,当您检索它时,将其转换为[Contact]。它可能看起来像这样:
let data = NSKeyedArchiver.archivedDataWithRootObject(contacts)
let defaults = NSUserDefaults.standardUserDefaults()
// Storing the data
defaults.setObject(data, forKey: "contacts")
// Retrieving the data
if let data = defaults.objectForKey("contacts") as? NSData {
if let contacts = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? [Contact] {
// Now you have your contacts
}
}
但是,如果要存储大量数据,则应考虑采用其他形式的数据管理。