每次app运行时,TableView都会返回重复的项目

时间:2017-04-01 12:25:10

标签: ios xcode uitableview realm

所以,我正在使用Realm数据库,而我的TableView每次都会返回新的数据集。所以,我第一次得到3件物品。第二次是6项等等。

import UIKit
import RealmSwift


class TableViewController: UITableViewController {

var ModelName = [String]()
var Power = [String]()



func addPanel () {

    let realm = try! Realm()
    let allPanels = realm.objects(Panel)
    try! realm.write {
        realm.add(Panel(model: "Hyundai", power: 260))
        realm.add(Panel(model: "Honda", power: 420))
        realm.add(Panel(model: "Siemens", power: 280))
    }

    tableView.reloadData()


    for i in allPanels {
        ModelName.append(i.model)
        Power.append("\(i.power)")
    }

}

override func viewDidLoad() {
    super.viewDidLoad()
    addPanel()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return ModelName.count //changed from 3
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell:TableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell
    //connect NameLabel cell to the name of Model and PowerLabel cell to the power 

    cell.NameLabel.text = ModelName[indexPath.row]
    cell.PowerLabel.text = Power [indexPath.row]



    return cell
}

如果我将行数限制为3,那该应用就可以了。

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return ModelName.count //changed from 3
}

我将不胜感激任何帮助。谢谢

1 个答案:

答案 0 :(得分:0)

我相信它是因为每次加载此控制器时,都会向Realm添加三个对象。因为默认情况下,update为false,所以每次都会向Realm添加三个新对象。如果您将更新更改为true,那么它应该使用对象的主键和"更新"这些对象每个视图控制器负载。

public func add(_ object: Object, update: Bool = false)