【发布时间】:2014-09-22 09:35:04
【问题描述】:
我的应用中有一个文本字段,用户可以使用该文本字段输入预算名称。我将这些名称存储在一个数组中,以便用户可以点击“预设”按钮来快速访问以前使用的名称。
如果用户没有输入预算名称,那么该名称会自动设置为“预算”,我不想将其存储在预设列表中。因此,我想出了这个代码:
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
}
【问题讨论】:
标签: uitableview swift nsmutablearray nsarray