将空白文本添加到数组的问题

时间:2014-09-22 01:18:09

标签: uitableview swift nsmutablearray nsarray

我的应用中有一个文本字段,用户可以使用该字段输入预算名称。我将这些名称存储在一个数组中,以便用户可以点击一个预设的'按钮快速访问以前使用的名称。

如果用户未输入预算名称,则该名称仅设置为'预算'自动,我不想将其存储在预设列表中。因此,我想出了这个代码:

    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")
    }

所以基本上它会检查以确保名称不在数组中且名称不是'预算'。

问题在于,由于某些原因,如果文本字段留空,而不是忽略它而不将其添加到数组中,它似乎只是添加""到阵列。我无法弄清楚为什么......

这是我的意思的一个例子:

enter image description here

以下是代码的其余部分:

用于显示预设名称的表格视图:

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
}

1 个答案:

答案 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)
    }