我无法从这个计算属性中获取值(userList)...我的init是否正确设置?我正在尝试构建一个列表,用于填充表视图中的行。 (*编辑:我用saveData函数编辑了我的问题,但是“无法使用类型的参数列表调用setObject”([String:User],forKey:String)“ -
import Foundation
class DataManager {
static let sharedInstance = DataManager()
var users = [String : User]()
init() {
let userDefaults = NSUserDefaults.standardUserDefaults()
if let var userFromDefaults = userDefaults.objectForKey("userKey") as? [String : User] {
users = userFromDefaults
}
else {
// add default values later
}
}
func saveData() {
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(users, forKey: "userKey")
}
var userList: [String] {
var list: [String] = []
for name in users.keys {
list.append(name)
}
list.sort(<)
return list
}
我的viewcontroller:
import UIKit
class NameViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var users: [String] = DataManager.sharedInstance.userList
用户结构转换为json的方法:
import Foundation
struct User {
var name = ""
var stores: [Store] = []
init?(json: [String: AnyObject]) {
if let name = json["name"] as? String,
storesJSON = json["stores"] as? [[String: AnyObject]]
{
self.name = name
self.stores = storesJSON.map { Store(json: $0)! }
} else {
return nil
}
}
init() { }
func toJSON() -> [String: AnyObject] {
return [
"name": name,
"stores": stores.map { $0.toJSON() }
]
}
}
答案 0 :(得分:2)
您可以使用(from apple documentation)
获取所有键/值dictionaryRepresentation()返回包含union的字典 搜索列表中域中的所有键值对。
使用它可以循环字典中的所有元素
for element in NSUserDefaults.standardUserDefaults().dictionaryRepresentation() {
println(element)
//Do what you need to do here
}
您也可以只检索密钥:
println(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array);
或只是值
println(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array);
答案 1 :(得分:0)
Matt在评论中指出,您需要先将内容保存到NSUserDefaults,然后才能阅读。
阻止您的代码工作的其他因素:
NSUserDefaults只保存“属性列表”对象(NSString,NSData,NSDate,NSNumber,NSArray或NSDictionary对象或它们的Swift等价物。)
如果您尝试保存其他任何内容,或者包含除这些数据类型之外的任何内容的集合,则保存失败,当您尝试将其读回时,您将获得nil。您的代码显示您尝试保存字典,其中每个键的值是“User”类型的对象。这将失败,因为“用户”不是“属性列表”对象类型的短列表之一。
答案 2 :(得分:0)
这不是NSUserDefaults
的好用户,它用于在应用启动之间存储首选项和其他一小部分数据。请参阅NSUserDefaults上的文档。
在显示数据时,您应该在内存中管理此用户词典,如果要在应用程序启动之间将其保留到磁盘,则应使用CoreData或使User
类符合{{1}并使用存档读/写它。 Here's a nice tutorial。