Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么在和嵌入式tableView中显示领域数据并不容易?_Ios_Swift_Uitableview_Realm - Fatal编程技术网

Ios 为什么在和嵌入式tableView中显示领域数据并不容易?

Ios 为什么在和嵌入式tableView中显示领域数据并不容易?,ios,swift,uitableview,realm,Ios,Swift,Uitableview,Realm,无法在嵌入视图控制器的表视图中显示来自领域的数据。这里有一些代码 处理数据存储方案的数据模型类(这是一个财务跟踪应用程序): class Entry: Object { @objc dynamic var name: String = "" @objc dynamic var amount: Int = 0 @objc dynamic var date: Date? var isExpense: Bool = false // initializatio

无法在嵌入视图控制器的表视图中显示来自领域的数据。这里有一些代码

处理数据存储方案的数据模型类(这是一个财务跟踪应用程序):

class Entry: Object {
    @objc dynamic var name: String = ""
    @objc dynamic var amount: Int = 0
    @objc dynamic var date: Date?
    var isExpense: Bool = false

    // initialization block dropped for concise post purposes
}
class FinanceOverviewCell: UITableViewCell {

    @IBOutlet weak var entryNameLabel: UILabel!
    @IBOutlet weak var entryAmountLabel: UILabel!

    func updateData(name: String, amount: String) {
        entryNameLabel?.text = name
        entryAmountLabel?.text = amount
    }
}
import UIKit
import RealmSwift

class FinanceOverviewController: UIViewController {

    @IBOutlet weak var financeOverviewTableView: UITableView!
    @IBOutlet weak var currentBalanceLabel: UILabel!

    var realm = try! Realm()
    let tableEntries = try! Realm().objects(Entry.self)
    let entriesManager = EntriesManager()
    var notificationToken: NotificationToken?

    override func viewDidLoad() {
        super.viewDidLoad()
        print(tableEntries)

        self.financeOverviewTableView.reloadData()
        financeOverviewTableView.delegate = self
        financeOverviewTableView.dataSource = self

        // notification token code block dropped for concise post purposes

        // outlets code block removed for concise post purposes

extension FinanceOverviewController: UITableViewDelegate {    
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            realm.beginWrite()
            realm.delete(tableEntries[indexPath.row])
            try! realm.commitWrite()
        }
    }
}

extension FinanceOverviewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tableEntries.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = financeOverviewTableView.dequeueReusableCell(withIdentifier: "FinanceOverviewCell", for: indexPath) as! FinanceOverviewCell
        let tableData = tableEntries[indexPath.row]

        cell.updateData(name: tableData.name, amount: String(tableData.amount))

        return cell
    }
}
单元类:

class Entry: Object {
    @objc dynamic var name: String = ""
    @objc dynamic var amount: Int = 0
    @objc dynamic var date: Date?
    var isExpense: Bool = false

    // initialization block dropped for concise post purposes
}
class FinanceOverviewCell: UITableViewCell {

    @IBOutlet weak var entryNameLabel: UILabel!
    @IBOutlet weak var entryAmountLabel: UILabel!

    func updateData(name: String, amount: String) {
        entryNameLabel?.text = name
        entryAmountLabel?.text = amount
    }
}
import UIKit
import RealmSwift

class FinanceOverviewController: UIViewController {

    @IBOutlet weak var financeOverviewTableView: UITableView!
    @IBOutlet weak var currentBalanceLabel: UILabel!

    var realm = try! Realm()
    let tableEntries = try! Realm().objects(Entry.self)
    let entriesManager = EntriesManager()
    var notificationToken: NotificationToken?

    override func viewDidLoad() {
        super.viewDidLoad()
        print(tableEntries)

        self.financeOverviewTableView.reloadData()
        financeOverviewTableView.delegate = self
        financeOverviewTableView.dataSource = self

        // notification token code block dropped for concise post purposes

        // outlets code block removed for concise post purposes

extension FinanceOverviewController: UITableViewDelegate {    
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            realm.beginWrite()
            realm.delete(tableEntries[indexPath.row])
            try! realm.commitWrite()
        }
    }
}

extension FinanceOverviewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tableEntries.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = financeOverviewTableView.dequeueReusableCell(withIdentifier: "FinanceOverviewCell", for: indexPath) as! FinanceOverviewCell
        let tableData = tableEntries[indexPath.row]

        cell.updateData(name: tableData.name, amount: String(tableData.amount))

        return cell
    }
}
最后,查看控制器:

class Entry: Object {
    @objc dynamic var name: String = ""
    @objc dynamic var amount: Int = 0
    @objc dynamic var date: Date?
    var isExpense: Bool = false

    // initialization block dropped for concise post purposes
}
class FinanceOverviewCell: UITableViewCell {

    @IBOutlet weak var entryNameLabel: UILabel!
    @IBOutlet weak var entryAmountLabel: UILabel!

    func updateData(name: String, amount: String) {
        entryNameLabel?.text = name
        entryAmountLabel?.text = amount
    }
}
import UIKit
import RealmSwift

class FinanceOverviewController: UIViewController {

    @IBOutlet weak var financeOverviewTableView: UITableView!
    @IBOutlet weak var currentBalanceLabel: UILabel!

    var realm = try! Realm()
    let tableEntries = try! Realm().objects(Entry.self)
    let entriesManager = EntriesManager()
    var notificationToken: NotificationToken?

    override func viewDidLoad() {
        super.viewDidLoad()
        print(tableEntries)

        self.financeOverviewTableView.reloadData()
        financeOverviewTableView.delegate = self
        financeOverviewTableView.dataSource = self

        // notification token code block dropped for concise post purposes

        // outlets code block removed for concise post purposes

extension FinanceOverviewController: UITableViewDelegate {    
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            realm.beginWrite()
            realm.delete(tableEntries[indexPath.row])
            try! realm.commitWrite()
        }
    }
}

extension FinanceOverviewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tableEntries.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = financeOverviewTableView.dequeueReusableCell(withIdentifier: "FinanceOverviewCell", for: indexPath) as! FinanceOverviewCell
        let tableData = tableEntries[indexPath.row]

        cell.updateData(name: tableData.name, amount: String(tableData.amount))

        return cell
    }
}
问题出现在视图控制器的cellForRowAtfunc中。不知何故,尽管tableData每次都保存一些适当的内容来添加行,但它只是不添加任何内容。在应用程序屏幕中,我看到了另一行占位符标签

可能是什么问题?我阅读了一些参考资料,也仔细查看了一下,但没有看到任何针对这个案例的特殊解决方案


感谢您的支持。

事实上,使用Realm并不困难,我试图复制您的代码,一切正常。我认为它与NotificationToken有关,因为每次更改集合时,NotificationToken都会运行一段代码,我不知道如何更新tableView。我建议您使用此扩展,我已经使用了几个月,这是通过Realm的NotificationToken采用UITableView的最佳方式:

    extension UITableView {
  func applyChanges<T>(changes: RealmCollectionChange<T>) {
    switch changes {
      case .initial: reloadData()
      case .update(let results, let deletions, let insertions, let updates):
        let fromRow = { (row: Int) in return IndexPath(row: row, section: 0) }
        beginUpdates()
        insertRows(at: insertions.map(fromRow), with: .automatic)
        reloadRows(at: updates.map(fromRow), with: .automatic)
        deleteRows(at: deletions.map(fromRow), with: .automatic)
        endUpdates()
      case .error(let error): fatalError("\(error)")
    }
  }
}

来源:

请分享您的
cell.updateData()代码。
@koen它就在cell类中的单元格出口之后。是的,我现在看到了,谢谢。那么这个方法是用有效数据调用的?您的标签在故事板中连接了吗?@koen是的,调用此方法,然后传递两条数据:条目数量和名称。后两个来源于一系列未解释的条目。那么出口呢?