我的应用中有一个文本字段,用户可以使用该字段输入预算名称。我将这些名称存储在一个数组中,以便用户可以点击一个预设的'按钮快速访问以前使用的名称。
如果用户未输入预算名称,则该名称仅设置为'预算'自动,我不想将其存储在预设列表中。因此,我想出了这个代码:
presetNames = NSUserDefaults.standardUserDefaults().objectForKey("presets") as NSArray
presetNamesMutable = presetNames.mutableCopy() as NSMutableArray
if presetNamesMutable.containsObject(budgetName) == false && budgetName != "Budget" {
presetNamesMutable.insertObject(budgetName, atIndex: 0)
NSUserDefaults.standardUserDefaults().setObject(presetNamesMutable, forKey: "presets")
}
所以基本上它会检查以确保名称不在数组中且名称不是'预算'。
问题在于,由于某些原因,如果文本字段留空,而不是忽略它而不将其添加到数组中,它似乎只是添加""到阵列。我无法弄清楚为什么......
这是我的意思的一个例子:
以下是代码的其余部分:
用于显示预设名称的表格视图:
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
return presetNamesMutable.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:PresetTableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as PresetTableViewCell
// Configure the cell...
cell.presetNameLabel.text = presetNamesMutable.objectAtIndex(indexPath.row) as? String
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var cell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
tempBudgetName = presetNamesMutable.objectAtIndex(indexPath.row) as String
presetTapped = true
NSUserDefaults.standardUserDefaults().setBool(presetTapped, forKey: "presetUsed")
self.navigationController?.popToRootViewControllerAnimated(true)
println(tempBudgetName)
}
// Override to support conditional editing of the table view.
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return true
}
// Override to support editing the table view.
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
presetNamesMutable.removeObjectAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
NSUserDefaults.standardUserDefaults().setObject(presetNamesMutable, forKey: "presets")
}
override func viewWillAppear(animated: Bool) {
presetNames = NSUserDefaults.standardUserDefaults().objectForKey("presets") as NSArray
presetNamesMutable = presetNames.mutableCopy() as NSMutableArray
}
答案 0 :(得分:0)
答案在我在我的问题中发布的代码中很明显。我刚刚改变了它:
if presetNamesMutable.containsObject(budgetName) == false && budgetNameLength != 0 {
致:
if presetNamesMutable.containsObject(budgetName) == false && budgetName != "Budget" {
所以我完全错过了我没有将名称设置为'预算'的事实。现在使用以下代码修复它:
presetNames = NSUserDefaults.standardUserDefaults().objectForKey("presets") as NSArray
presetNamesMutable = presetNames.mutableCopy() as NSMutableArray
if budgetNameLength == 0 {
budgetName = "Budget"
}
if presetNamesMutable.containsObject(budgetName) == false && budgetName != "Budget" {
presetNamesMutable.insertObject(budgetName, atIndex: 0)
NSUserDefaults.standardUserDefaults().setObject(presetNamesMutable, forKey: "presets")
println(presetNamesMutable)
}