新元素是Array覆盖以前的成员swift

时间:2016-09-05 01:52:44

标签: ios arrays swift

我正在创建一种带有Xcode的联系人列表应用程序,一切都运行顺畅,直到应用程序实际将新联系人添加到联系人列表。一旦用户进入帮助用户创建新联系人的ViewController,会发生什么?之前添加的联系人将从列表中删除。我试图调查,我发现的是,一旦我为数组创建了一个新元素(或联系人);我的代码由于某种原因删除旧的联系人并将其替换为新创建的联系人。有趣的是,通过简单地转到我的应用程序上的另一个页面(转到新的ViewController),我的应用程序由于某种原因从联系人列表中删除了新创建的联系人,并将我的TableView留空。

以下是我的编码细分以及我尝试过的内容:

这是最初的ViewController(我已经实现了一个TableView并创建了在TableView中的单元格中组织的数组)

class ViewController: UIViewController, UITableViewDataSource,UITableViewDelegate {

@IBOutlet var TableView: UITableView!

var names = [String]()
var numbers = [String]()
override func viewDidAppear(animated: Bool) {
    TableView.reloadData()
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return names.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell
    cell.Name.text = names[indexPath.row]
    cell.PhoneNumber.text = numbers[indexPath.row]
    cell.reloadInputViews()
    return cell
}
}

这是我的用户将创建新联系人的位置以及我如何尝试将新联系人附加到联系人列表

classPickViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {



override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if Save.touchInside{
        var VC :ViewController = segue.destinationViewController as! ViewController
        if VC.names.count >= 1 {
            VC.names.insert(NameText, atIndex: (VC.names.count)+1)
            VC.numbers.insert(PhoneText,atIndex: (VC.numbers.count)+1)
        }
        else{
            VC.names.insert(NameText, atIndex: (VC.names.count)+0)
            VC.numbers.insert(PhoneText,atIndex: (VC.numbers.count)+0)
        }
}
}
@IBAction func SaveContact(sender: UIButton) {
    performSegueWithIdentifier("SaveEm", sender: self)//this takes the usr to the Contact list
}

以下是我用于在TableView(UITableViewCell文件)中初始化我的单元格的代码

class CustomCell: UITableViewCell {
  @IBOutlet var Name: UILabel!
  @IBOutlet var PhoneNumber: UILabel!
override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

2 个答案:

答案 0 :(得分:1)

您的应用正在从ViewController-> classPickViewController-> ViewController导航,因此您有一个新的ViewController实例,它将以一个新的空数组开头。

您应该查看展开细分,以便您可以返回到呈现ViewController

您还需要使用类似Core Data的内容来在应用的执行之间保留数据。

我会存储一个“Contact”结构的数组而不是两个数组

答案 1 :(得分:0)

当你已经在cellForRowAtIndexPath中时,

reloadInputViews()是一种过度杀伤。删除它并适当地放入reloaddata。如果需要,当您知道控制流程结束时再次放置。 所以删除reloadInputViews(),然后重新访问cellForRowAtIndexPath中tableviewcell的每个视图。