我正在尝试将名称添加到UITableView
中。名称将存储为NSUserDefault
。
我的viewDidLoad:
var PlayersUserDefault = NSUserDefaults.standardUserDefaults()
if (PlayersUserDefault.arrayForKey("playersKey") != nil){
players = PlayersUserDefault.arrayForKey("playersKey")
}
添加名称按钮:
@IBAction func addButtonAction(sender: AnyObject) {
players!.append(namesTextBox.text)
myTableView.reloadData()
}
当我按下addButtonAction
时,我收到以下错误:
players!.append(namesTextBox.text)
玩家声明:
var players = NSUserDefaults().arrayForKey("playersKey")
答案 0 :(得分:1)
在一行中使用NSUserDefaults.standardUserDefaults()
,在另一行中创建NSUserDefaults
的新实例,并要求" playersKey"。你应该做的是使用NSUserDefaults.standardUserDefaults()
来检索并保存你的玩家。
对于init:
此方法不会在搜索列表中放置任何内容。仅调用它 如果你已经分配了自己的NSUserDefaults实例而不是使用 共享的。
和共享实例:
如果共享默认对象尚不存在,则使用a创建 包含以下域名的搜索列表,在此处 顺序:
NSArgumentDomain,由从应用程序解析的默认值组成 参数
- 标识的域
由应用程序的包标识符
NSGlobalDomain,由默认值组成,供所有人查看 应用
为每个用户首选语言分隔域
NSRegistrationDomain,一组临时默认值,其值可以是 由应用程序设置,以确保始终进行搜索 成功
为当前用户初始化默认值。随后 即使在以下情况下,对标准搜索列表的修改仍然有效 再次调用此方法 - 保证搜索列表 标准仅在第一次调用此方法时。
答案 1 :(得分:1)
玩家阵列在时间点是零,这就是为什么阵列没有被打开的原因。如果你是第一次点击按钮,你的UserDefaults将没有玩家,所以players
数组是零。所以你可以通过两种方式解决这个问题。
在viewDidLoad()
var PlayersUserDefault = NSUserDefaults.standardUserDefaults()
if (PlayersUserDefault.arrayForKey("playersKey") != nil){
players = PlayersUserDefault.arrayForKey("playersKey")
}else {
players = [String]()
}
否则,使用如下所示的空字符串数组初始化players
数组:
var players = [String]()
这可能会对你有帮助。
答案 2 :(得分:0)
在尝试执行append
之前,您可以尝试展开玩家的价值。然后,您将确定它是否nil
。
尝试:
@IBAction func addButtonAction(sender: AnyObject) {
if let playerValue = players {
players!.append(namesTextBox.text)
myTableView.reloadData()
}else{
println("players is nil!")
}
}