繁体   English   中英

Swift –编辑单元格内容后,Table View reloadData无法正常工作

[英]Swift – Table View reloadData not working after editing contents of cell

在我的应用程序中,我向用户显示条目的表格视图,当他们点击条目时,它们会被带到带有TextView的屏幕上,以便他们可以编辑该单元格的内容。 保存后,它们将过渡回tableView。 问题在于,当数据返回到tableView时,不会重新加载数据,它显示的数据与编辑单元格内容之前的数据相同

我试过将self.tableView.reloadData()放在viewWillAppearviewDidAppear但都没有用。 我已经阅读了许多与此相关的答案,但都没有奏效。 我很乐意您的帮助。 谢谢!

PastSessionsViewController.swift

class PastSessionsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    var arrayOfEntriesNew: [Entry] = [Entry]()
    let transitionManager = TransitionManager()

    var entry: String?
    var entryDate: NSDate?

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let gradient: CAGradientLayer = CAGradientLayer()
        let arrayColors: [AnyObject] = [
            UIColor(red: 0.302, green: 0.612, blue: 0.961, alpha: 1.000).CGColor,
            UIColor(red: 0.247, green: 0.737, blue: 0.984, alpha: 1.000).CGColor
        ]

        tableView.backgroundColor = nil
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None

        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 168.0

        gradient.frame = view.bounds
        gradient.colors = arrayColors
        view.layer.insertSublayer(gradient, atIndex: 0)

        prepareEntries()
    }

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

    override func viewWillAppear(animated: Bool) {
        self.tableView.reloadData()
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
    }

    func prepareEntries() {
        let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
        let managedObjectContext = appDelegate.managedObjectContext!
        let request = NSFetchRequest(entityName: "Meditation")
        let sortDescriptor = NSSortDescriptor(key: "date", ascending: false)
        request.sortDescriptors = [sortDescriptor]
        var error: NSError?

        var showStreak = (top: false, bottom: false)

        let result = managedObjectContext.executeFetchRequest(request, error: &error)
        if let objects = result as? [Meditation] {
            for (index, object) in enumerate(objects) {
                var timeLabel = lengthMinutesLabel(minutesString: lengthMinutes(object.length))

                var entry = Entry(sessionLength: lengthMinutes(object.length), sessionTimeUnit: timeLabel, sessionStartTime: "\(object.date.format())", sessionJournalEntry: object.journalEntry, sessionStreakTop: showStreak.top, sessionStreakBottom: showStreak.bottom)

                arrayOfEntriesNew.append(entry)
            }
        }
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrayOfEntriesNew.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell: EntryCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as EntryCell

        let entry = arrayOfEntriesNew[indexPath.row]

        var journalEntry = entry.sessionJournalEntry
        cell.sessionStartTimeLabel.text = entry.sessionStartTime
        cell.sessionJournalEntryLabel.text = journalEntry

        cell.sessionLengthLabel.text = entry.sessionLength
        cell.sessionTimeUnitLabel.text = entry.sessionTimeUnit

        return cell
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // janky but works, probably a better way to do this. Will figure it out after v1
        if sender is UIButton {
            let destinationVC = segue.destinationViewController as ViewController
            destinationVC.showJournalButton = false
        } else {
            let path = self.tableView.indexPathForSelectedRow()!
            let location = path.row

            let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
            let managedObjectContext = appDelegate.managedObjectContext!
            let request = NSFetchRequest(entityName: "Meditation")
            let sortDescriptor = NSSortDescriptor(key: "date", ascending: false)
            request.sortDescriptors = [sortDescriptor]
            var error: NSError?

            let result = managedObjectContext.executeFetchRequest(request, error: &error)
            if let objects = result as? [Meditation] {
                var journalVC = segue.destinationViewController as EditJournalViewController

                journalVC.journalEntryCoreDataLocation = path.row
                journalVC.journalEntryToEdit = objects[location].journalEntry
                journalVC.journalEntryToEditTimestamp = objects[location].date

                let transitionManager = self.transitionManager
                transitionManager.presenting = true
                transitionManager.direction = "left"
                journalVC.transitioningDelegate = transitionManager
            }
        }
    }
}

viewWillAppear添加prepareEntries()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM